
02.07.2018, 20:15
|
|
Познающий
Регистрация: 13.11.2014
Сообщений: 41
С нами:
6050727
Репутация:
58
|
|
Всем хай,использую хук на HandleRPCPacketFunc в двух плагинах и получается,что он работает то в одном плагине,то в другом.
Сообщение от Спойлер
C++:
Код:
#define SAMP_HOOKENTER_HANDLE_RPC 0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2 0x373C9
#define SAMP_HOOKEXIT_HANDLE_RPC 0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2 0x37451
void
HandleRPCPacketFunc
(
unsigned
char
id
,
RPCParameters
*
rpcParams
,
void
(
*
callback
)
(
RPCParameters
*
)
)
{
if
(
rpcParams
!=
nullptr
&&
rpcParams
->
numberOfBitsOfData
>=
8
)
{
BitStream
bsData
(
rpcParams
->
input
,
rpcParams
->
numberOfBitsOfData
/
8
,
false
)
;
switch
(
id
)
{
case
RPC_DeathMessage
:
{
pSAMP
->
addMessageToChat
(
-
1
,
"plugin ONE"
)
;
int16_t
plaerid
,
killerid
;
int8_t
resaon
;
bsData
.
ResetReadPointer
(
)
;
bsData
.
Read
(
killerid
)
;
bsData
.
Read
(
plaerid
)
;
bsData
.
Read
(
resaon
)
;
break
;
}
}
}
callback
(
rpcParams
)
;
}
void
_declspec
(
naked
)
hook_handle_rpc_packet
(
void
)
{
static
RPCParameters
*
pRPCParams
=
nullptr
;
static
RPCNode
*
pRPCNode
=
nullptr
;
static
DWORD dwTmp
=
0
;
__asm pushad
;
__asm mov pRPCParams
,
eax
;
__asm mov pRPCNode
,
edi
;
HandleRPCPacketFunc
(
pRPCNode
->
uniqueIdentifier
,
pRPCParams
,
pRPCNode
->
staticFunctionPointer
)
;
dwTmp
=
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKEXIT_HANDLE_RPC
;
__asm popad
;
__asm add esp
,
4
__asm jmp dwTmp
;
}
void
_declspec
(
naked
)
hook_handle_rpc_packet2
(
void
)
{
static
RPCParameters
*
pRPCParams
=
nullptr
;
static
RPCNode
*
pRPCNode
=
nullptr
;
static
DWORD dwTmp
=
0
;
__asm pushad
;
__asm mov pRPCParams
,
ecx
;
__asm mov pRPCNode
,
edi
;
HandleRPCPacketFunc
(
pRPCNode
->
uniqueIdentifier
,
pRPCParams
,
pRPCNode
->
staticFunctionPointer
)
;
dwTmp
=
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKEXIT_HANDLE_RPC2
;
__asm popad
;
__asm jmp dwTmp
;
}
void
InstallAllHooks
(
)
{
static
int
iSAMPHooksInstalled
;
if
(
!
iSAMPHooksInstalled
)
{
if
(
pSAMP
->
getInfo
(
)
==
NULL
)
return
;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
HookRPC1
=
new
CHookJmp
(
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKENTER_HANDLE_RPC
,
hook_handle_rpc_packet
,
6
)
;
//
HookRPC2
=
new
CHookJmp
(
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKENTER_HANDLE_RPC2
,
hook_handle_rpc_packet2
,
8
)
;
iSAMPHooksInstalled
=
1
;
}
}
у второго плагина код один и тот же,за исключением другого RPC.
Я понимаю,что идёт конфликт хуков,но как его исправить?
|
|
|