添加进入人物和退出人物hook

This commit is contained in:
小疯
2022-09-12 18:11:08 +08:00
parent 2ccdac8561
commit cdca473ec3
10 changed files with 590 additions and 78 deletions

View File

@@ -8,11 +8,7 @@
#include "controller.h"
Controller::Controller() :
old_IPacketDispatcher_ParamBase_dispatch_template((IPacketDispatcher_ParamBase_dispatch_template_Type*)base::IPacketDispatcher::ParamBase::dispatch_template),
old_UseJewel_dispatch_sig((UseJewel_dispatch_sig_Type*)base::Dispatcher_UseJewel::dispatch_sig),
old_Dispatcher_ModItemAttr_dispatch_sig((Dispatcher_ModItemAttr_dispatch_sig_Type*)base::Dispatcher_ModItemAttr::dispatch_sig),
old_PacketDispatcher_doDispatch((PacketDispatcher_doDispatch_Type*)base::PacketDispatcher::doDispatch)
Controller::Controller()
{
}
@@ -45,15 +41,17 @@ void Controller::init()
//mhook_IPacketDispatcher_ParamBase_dispatch_template.Hook((void**)&old_IPacketDispatcher_ParamBase_dispatch_template, (void*)hook_IPacketDispatcher_ParamBase_dispatch_template);
//HOOK_SETUP(IPacketDispatcher_ParamBase_dispatch_template);
HOOK_SETUP(UseJewel_dispatch_sig);
mhook_UseJewel_dispatch_sig.Hook((void**)&old_UseJewel_dispatch_sig, (void*)hook_UseJewel_dispatch_sig);
HOOK_SETUP(Dispatcher_ModItemAttr_dispatch_sig);
mhook_Dispatcher_ModItemAttr_dispatch_sig.Hook((void**)&old_Dispatcher_ModItemAttr_dispatch_sig, (void*)hook_Dispatcher_ModItemAttr_dispatch_sig);
HOOK_SETUP(PacketDispatcher_doDispatch);
mhook_PacketDispatcher_doDispatch.Hook((void**)&old_PacketDispatcher_doDispatch, (void*)hook_PacketDispatcher_doDispatch);
HOOK_SETUP(DisPatcher_MoveMap_dispatch_sig);
HOOK_SETUP(Inter_LoadEtc_dispatch_sig);
LOG("Controller::init()");
@@ -99,8 +97,8 @@ int Controller::hook_Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_ModItemAttr*
PacketBuf new_buf;
memcpy(&new_buf, pBuf, sizeof(PacketBuf));
short equipment_pos = 0;
int equipment_id = 0;
short item_pos = 0;
int equipment_id = 0;
short item_pos = 0;
if ((unsigned __int8)new_buf.get_short(&equipment_pos) != 1
|| (unsigned __int8)new_buf.get_int(&equipment_id) != 1
@@ -121,7 +119,7 @@ int Controller::hook_Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_ModItemAttr*
int result = (ret == PAK_ERROR) ? 1 : 0;
return result;
}
return Controller::Get()->old_Dispatcher_ModItemAttr_dispatch_sig(dis_mod, user, pBuf);
return Get()->old_Dispatcher_ModItemAttr_dispatch_sig(dis_mod, user, pBuf);
}
int Controller::hook_PacketDispatcher_doDispatch(PacketDispatcher* a1, CUser* user, int packet_class, int packet_id, char* packet_src, int packet_len, int a7, int a8)
@@ -172,7 +170,25 @@ int Controller::hook_PacketDispatcher_doDispatch(PacketDispatcher* a1, CUser* us
}
return result;
}
return Controller::Get()->old_PacketDispatcher_doDispatch(a1, user, packet_class, packet_id, packet_src, packet_len, a7, a8);
return Get()->old_PacketDispatcher_doDispatch(a1, user, packet_class, packet_id, packet_src, packet_len, a7, a8);
}
int Controller::hook_DisPatcher_MoveMap_dispatch_sig(void* a1, CUser* pUser, PacketBuf* pBuf)
{
ENUM_PACK_RET_TYPE ret = CDispatch::Get()->MoveMap_dispatch_sig(a1, pUser, pBuf);
int result = (ret == PAK_ERROR) ? 1 : 0;
return result;
}
int Controller::hook_Inter_LoadEtc_dispatch_sig(void* a1, CUser* pUser, char* a3)
{
CDispatch::Get()->Inter_LoadEtc_dispatch_sig(a1, pUser, a3);
return Get()->old_Inter_LoadEtc_dispatch_sig(a1, pUser, a3);
}
int Controller::hook_DisPatcher_ReturnToSelectCharacter_dispatch_sig(void* a1, CUser* pUser, char* a3)
{
CDispatch::Get()->DisPatcher_ReturnToSelectCharacter_dispatch_sig(a1, pUser, a3);
return Get()->old_DisPatcher_ReturnToSelectCharacter_dispatch_sig(a1, pUser, a3);
}