Показать сообщение отдельно

  #10  
Старый 19.09.2022, 00:44
MeG@LaDo[N] ^_^
Участник форума
Регистрация: 21.07.2020
Сообщений: 280
С нами: 3059886

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

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

Посмотрел пару уроков по сф и решил сделать жоски скрипт с хуком синхры педа, сделал, ошибок при компиляции никаких нету, но хук как я понял не срабатывает.

main.cpp:





Код:
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_OUTCOMING_PACKET
,
onSendPacket
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"abc"
,
[
]
(
std
::
string
)
{
AddChat
(
-
1
,
"Mamut_Rahal active"
)
;
actived
=
!
actived
;
}
)
;
//SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(id);
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
;
AddChat
(
-
1
,
"Ну типа работа с синхрой бу Ега."
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}


main.h:





Код:
#pragma once
#include "SAMPFUNCS_API.h"
#include "game_api.h"
bool
__stdcall
onSendPacket
(
stRakNetHookParams
*
param
)
;
static
bool
actived
=
false
;
#define AddChat SF->getSAMP()->getChat()->AddChatMessage
extern
SAMPFUNCS
*
SF
;


raknet.cpp (сам хук):





Код:
#include "main.h"
bool
__stdcall
onSendPacket
(
stRakNetHookParams
*
param
)
{
if
(
param
->
packetId
==
ID_PLAYER_SYNC
)
{
if
(
actived
)
{
BYTE packet
;
stOnFootData data
;
memset
(
&
data
,
0
,
sizeof
(
stOnFootData
)
)
;
//float pos = SF->getSAMP()->getPlayers()->GetOnFootData(2)->fPosition[3];
param
->
bitStream
->
ResetReadPointer
(
)
;
param
->
bitStream
->
Read
(
packet
)
;
param
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
data
.
fMoveSpeed
[
0
]
=
2.5f
;
data
.
fMoveSpeed
[
1
]
=
2.5f
;
data
.
fMoveSpeed
[
2
]
=
2.5f
;
param
->
bitStream
->
ResetWritePointer
(
)
;
param
->
bitStream
->
Write
(
(
PCHAR
)
packet
)
;
param
->
bitStream
->
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
AddChat
(
-
1
,
"%f %f %f"
,
data
.
fMoveSpeed
[
0
]
,
data
.
fMoveSpeed
[
1
]
,
data
.
fMoveSpeed
[
2
]
)
;
}
}
return
true
;
}


P.S. смог решить тем, что хук перенес из отдельного файла в main.cpp. Тогда еще 2 вопроса: как можно это сделать в разных файлах и влияет ли как-то на производительность то, что все в одном файле или разделено на несколько?
создать raknet.h и добавить прототип bool __stdcall onSendPacket(stRakNetHookParams* param);

и подключить этот файл в main.h и raknet.cpp

или вместо .cpp/h юзать .hpp
 
Ответить с цитированием