HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 17.07.2019, 21:28
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Как можно выгрузить аsi, и снять хуки которые я поставил через собейтовский клас CDetour

Вот как я снимаю хуки, но хз правильно ли

C++:





Код:
bool
RemoveSAMPHook
(
uint32_t
dwFuncOffset
,
void
*
origFunc
,
int
iType
,
int
iSize
)
{
if
(
GetModuleHandle
(
"samp.dll"
)
==
NULL
)
return
false
;
uint32_t
g_dwSAMP_Addr
=
(
uint32_t
)
GetModuleHandle
(
"samp.dll"
)
;
CDetour api
;
return
api
.
Remove
(
(
uint8_t
*
)
(
(
uint32_t
)
g_dwSAMP_Addr
)
+
dwFuncOffset
,
(
uint8_t
*
)
origFunc
,
iType
,
iSize
)
;
}
RemoveSAMPHook
(
SAMP_HOOKENTER_CNETGAME_DESTR
,
oDestrFuncs
[
0
]
,
3
,
5
)
RemoveSAMPHook
(
SAMP_HOOKENTER_CNETGAME_DESTR2
,
oDestrFuncs
[
1
]
,
3
,
5
)


И еще, что я делаю не так, что при инициализации окна сампа то FindWindowA возвращает всегда NULL

C++:





Код:
while
(
m_pGameWindow
==
NULL
)
{
m_pGameWindow
=
FindWindowA
(
NULL
,
"GTA:SA:MP"
)
;
Sleep
(
timeout
)
;
}
 
Ответить с цитированием

  #2  
Старый 18.07.2019, 23:39
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

Есть файл test.h, есть папка game, в ней файл test.cpp, вопрос, как сделать так чтобы я могу инклуднуть файл test.h в test.cpp именно вот так
Код:
#include
?
 
Ответить с цитированием

  #3  
Старый 19.07.2019, 08:14
index
Новичок
Регистрация: 18.10.2015
Сообщений: 6
С нами: 5563739

Репутация: 0
По умолчанию

Цитата:
Сообщение от Musaigen  

Есть файл test.h, есть папка game, в ней файл test.cpp, вопрос, как сделать так чтобы я могу инклуднуть файл test.h в test.cpp именно вот так
Код:
#include
?
Чтобы именно так - они должны лежать в одной директории. В твоем случае можно заинклудить так:
Код:
#include
Upd: подзабыл. Парень ниже описал верный способ без "..\".
 
Ответить с цитированием

  #4  
Старый 19.07.2019, 17:20
CarLCas
Участник форума
Регистрация: 12.07.2013
Сообщений: 161
С нами: 6755146

Репутация: 78
По умолчанию

Цитата:
Сообщение от Musaigen  

Есть файл test.h, есть папка game, в ней файл test.cpp, вопрос, как сделать так чтобы я могу инклуднуть файл test.h в test.cpp именно вот так
Код:
#include
?
Свойства проекта > Каталоги VC++ > Каталоги включения. Добавляешь путь до папки где лежит test.h
 
Ответить с цитированием

  #5  
Старый 19.07.2019, 23:40
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

Из-за чего raknet хук может выдавать значение 0 при чтении структуры stOnFootData(также при чтении вообще любых структур)

RakNetHook:





Код:
bool
OnReceivePacket
(
Packet
*
p
)
{
if
(
p
->
data
==
nullptr
||
p
->
length
==
0
)
return
true
;
if
(
p
->
data
[
0
]
==
ID_PLAYER_SYNC
)
{
BitStream
bs
(
p
->
data
,
p
->
length
,
false
)
;
uint16_t
playerID
=
uint16_t
(
-
1
)
;
stOnFootData data
{
0
}
;
bs
.
ResetReadPointer
(
)
;
bs
.
IgnoreBits
(
8
)
;
bs
.
Read
(
playerID
)
;
bs
.
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
// Дальше происходит форматирование и вывод.
}
}


Пытаюсь вывести айди(playerID) и позицию игрока(data.fPosition)

ID - высвечивается нормально, как положено.

Позиция игрока - выводится как 0

Конфликтов между собейтом или другими плагинами/скриптами нет.
 
Ответить с цитированием

  #6  
Старый 20.07.2019, 00:22
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Цитата:
Сообщение от Musaigen  

Из-за чего raknet хук может выдавать значение 0 при чтении структуры stOnFootData(также при чтении вообще любых структур)

RakNetHook:





Код:
bool
OnReceivePacket
(
Packet
*
p
)
{
if
(
p
->
data
==
nullptr
||
p
->
length
==
0
)
return
true
;
if
(
p
->
data
[
0
]
==
ID_PLAYER_SYNC
)
{
BitStream
bs
(
p
->
data
,
p
->
length
,
false
)
;
uint16_t
playerID
=
uint16_t
(
-
1
)
;
stOnFootData data
{
0
}
;
bs
.
ResetReadPointer
(
)
;
bs
.
IgnoreBits
(
8
)
;
bs
.
Read
(
playerID
)
;
bs
.
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
// Дальше происходит форматирование и вывод.
}
}


Пытаюсь вывести айди(playerID) и позицию игрока(data.fPosition)
ID - высвечивается нормально, как положено.
Позиция игрока - выводится как 0

Конфликтов между собейтом или другими плагинами/скриптами нет.
Чтение получаемого пакета PlayerSync и VehicleSync происходит по другому. Вроде в ракботе есть полный пример, вот не полный - https://gitlab.com/RcKoid/mod-s0beit-overlight/blob/master/src/Hooked RakNet/HookedRakClient.cpp#L98
 
Ответить с цитированием

  #7  
Старый 20.07.2019, 14:27
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Как можно точно конвертировать координаты текстдрава которые приходят с сервер на расширение моего монитора

Я делаю вот так но на мониторе отображается не точно(+- 5 пикс) с текстдравом который принял самп

C++:





Код:
x
=
(
dMaxX
/
640.
)
*
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
i
]
->
fX
;
y
=
(
dMaxY
/
448.
)
*
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
i
]
->
fY
;
SF
->
getRender
(
)
->
DrawBox
(
x
,
y
,
5
,
5
,
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
i
]
->
dwBoxColor
)
;
 
Ответить с цитированием

  #8  
Старый 21.07.2019, 19:38
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

Как получить свой CPed?

При вызове так
Код:
pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped);
происходит краш.

При вызове так
Код:
pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped))
также краш.

pGTA_Ped валидный
 
Ответить с цитированием

  #9  
Старый 24.07.2019, 01:13
checkdasound
Постоянный
Регистрация: 12.01.2018
Сообщений: 963
С нами: 4387250

Репутация: 133


По умолчанию

Цитата:
Сообщение от Musaigen  

Как получить свой CPed?
При вызове так
Код:
pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped);
происходит краш.
При вызове так
Код:
pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped))
также краш.
pGTA_Ped валидный
Если в sf api, то PEDSELF, если нет, то по адресу 0xB6F5F0.
 
Ответить с цитированием

  #10  
Старый 22.07.2019, 20:44
zMViToS_
Новичок
Регистрация: 02.07.2019
Сообщений: 3
С нами: 3615273

Репутация: 1
По умолчанию

Всем привет, это снова я по поводу SAMP Mobile. Научил клиент отсылать и принимать RPC пакеты. Теперь оружие видно локально в руках, у другого игрока и с пк. Теперь столкнулся с проблемой. Суть RPC_PlayerGiveTakeDamage заполнен, но урон по игроку не проходит. Как возможно решить данную ситуацию?
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.