fix: move some methods from network handler to game engine wrapper
This commit is contained in:
@ -15,6 +15,7 @@
|
|||||||
#include "../../../Events/GameEngineTickedEvent.h"
|
#include "../../../Events/GameEngineTickedEvent.h"
|
||||||
#include "../../../Events/ChatMessageCreatedEvent.h"
|
#include "../../../Events/ChatMessageCreatedEvent.h"
|
||||||
#include "../../../Events/OnEndItemListEvent.h"
|
#include "../../../Events/OnEndItemListEvent.h"
|
||||||
|
#include "../../../Events/CreatureDiedEvent.h"
|
||||||
#include "../../../DTO/ItemData.h"
|
#include "../../../DTO/ItemData.h"
|
||||||
#include "FName.h"
|
#include "FName.h"
|
||||||
|
|
||||||
@ -32,6 +33,8 @@ namespace Interlude
|
|||||||
void(__thiscall* GameEngineWrapper::__Tick)(GameEngine*, float_t) = 0;
|
void(__thiscall* GameEngineWrapper::__Tick)(GameEngine*, float_t) = 0;
|
||||||
void(__thiscall* GameEngineWrapper::__OnSay2)(GameEngine*, L2ParamStack&) = 0;
|
void(__thiscall* GameEngineWrapper::__OnSay2)(GameEngine*, L2ParamStack&) = 0;
|
||||||
void(__thiscall* GameEngineWrapper::__OnEndItemList)(GameEngine*) = 0;
|
void(__thiscall* GameEngineWrapper::__OnEndItemList)(GameEngine*) = 0;
|
||||||
|
float(__thiscall* GameEngineWrapper::__GetMaxTickRate)(GameEngine*) = 0;
|
||||||
|
int(__thiscall* GameEngineWrapper::__OnDie)(GameEngine*, User*, L2ParamStack&) = 0;
|
||||||
|
|
||||||
|
|
||||||
void GameEngineWrapper::Init(HMODULE hModule)
|
void GameEngineWrapper::Init(HMODULE hModule)
|
||||||
@ -66,6 +69,12 @@ namespace Interlude
|
|||||||
(FARPROC&)__OnEndItemList = (FARPROC)splice(
|
(FARPROC&)__OnEndItemList = (FARPROC)splice(
|
||||||
GetProcAddress(hModule, "?OnEndItemList@UGameEngine@@UAEXXZ"), __OnEndItemList_hook
|
GetProcAddress(hModule, "?OnEndItemList@UGameEngine@@UAEXXZ"), __OnEndItemList_hook
|
||||||
);
|
);
|
||||||
|
(FARPROC&)__GetMaxTickRate = (FARPROC)splice(
|
||||||
|
GetProcAddress(hModule, "?GetMaxTickRate@UGameEngine@@UAEMXZ"), __GetMaxTickRate_hook
|
||||||
|
);
|
||||||
|
(FARPROC&)__OnDie = (FARPROC)splice(
|
||||||
|
GetProcAddress(hModule, "?OnDie@UGameEngine@@UAEHPAUUser@@AAVL2ParamStack@@@Z"), __OnDie_hook
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameEngineWrapper::Restore()
|
void GameEngineWrapper::Restore()
|
||||||
@ -79,6 +88,8 @@ namespace Interlude
|
|||||||
restore((void*&)__OnExAutoSoulShot);
|
restore((void*&)__OnExAutoSoulShot);
|
||||||
restore((void*&)__OnSay2);
|
restore((void*&)__OnSay2);
|
||||||
restore((void*&)__OnEndItemList);
|
restore((void*&)__OnEndItemList);
|
||||||
|
restore((void*&)__GetMaxTickRate);
|
||||||
|
restore((void*&)__OnDie);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __fastcall GameEngineWrapper::__OnSkillListPacket_hook(GameEngine* This, uint32_t, L2ParamStack& stack)
|
void __fastcall GameEngineWrapper::__OnSkillListPacket_hook(GameEngine* This, uint32_t, L2ParamStack& stack)
|
||||||
@ -196,4 +207,18 @@ namespace Interlude
|
|||||||
EventDispatcher::GetInstance().Dispatch(OnEndItemListEvent());
|
EventDispatcher::GetInstance().Dispatch(OnEndItemListEvent());
|
||||||
(*__OnEndItemList)(This);
|
(*__OnEndItemList)(This);
|
||||||
}
|
}
|
||||||
|
// TODO ini
|
||||||
|
// 0 - <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
float __fastcall GameEngineWrapper::__GetMaxTickRate_hook(GameEngine* This, int)
|
||||||
|
{
|
||||||
|
float fps = (*__GetMaxTickRate)(This);
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __fastcall GameEngineWrapper::__OnDie_hook(GameEngine* This, int, User* creature, L2ParamStack& stack)
|
||||||
|
{
|
||||||
|
EventDispatcher::GetInstance().Dispatch(CreatureDiedEvent{ creature->objectId, stack.GetBufferAsVector<int32_t>() });
|
||||||
|
|
||||||
|
return (*__OnDie)(This, creature, stack);
|
||||||
|
}
|
||||||
}
|
}
|
@ -29,6 +29,8 @@ namespace Interlude
|
|||||||
static void(__thiscall* __Tick)(GameEngine*, float_t);
|
static void(__thiscall* __Tick)(GameEngine*, float_t);
|
||||||
static void(__thiscall* __OnSay2)(GameEngine*, L2ParamStack&);
|
static void(__thiscall* __OnSay2)(GameEngine*, L2ParamStack&);
|
||||||
static void(__thiscall* __OnEndItemList)(GameEngine*);
|
static void(__thiscall* __OnEndItemList)(GameEngine*);
|
||||||
|
static float(__thiscall* __GetMaxTickRate)(GameEngine*);
|
||||||
|
static int(__thiscall* __OnDie)(GameEngine*, User*, L2ParamStack&);
|
||||||
|
|
||||||
static void __fastcall __OnSkillListPacket_hook(GameEngine* This, uint32_t /*edx*/, L2ParamStack& stack);
|
static void __fastcall __OnSkillListPacket_hook(GameEngine* This, uint32_t /*edx*/, L2ParamStack& stack);
|
||||||
static int __fastcall __OnReceiveMagicSkillUse_hook(GameEngine* This, uint32_t /*edx*/, User* u1, User* u2, L2ParamStack& stack);
|
static int __fastcall __OnReceiveMagicSkillUse_hook(GameEngine* This, uint32_t /*edx*/, User* u1, User* u2, L2ParamStack& stack);
|
||||||
@ -40,6 +42,8 @@ namespace Interlude
|
|||||||
static void __fastcall __Tick_hook(GameEngine* This, uint32_t /*edx*/, float_t unk);
|
static void __fastcall __Tick_hook(GameEngine* This, uint32_t /*edx*/, float_t unk);
|
||||||
static void __fastcall __OnSay2_hook(GameEngine* This, uint32_t /*edx*/, L2ParamStack& stack);
|
static void __fastcall __OnSay2_hook(GameEngine* This, uint32_t /*edx*/, L2ParamStack& stack);
|
||||||
static void __fastcall __OnEndItemList_hook(GameEngine* This, uint32_t /*edx*/);
|
static void __fastcall __OnEndItemList_hook(GameEngine* This, uint32_t /*edx*/);
|
||||||
|
static int __fastcall __OnDie_hook(GameEngine* This, int /*edx*/, User* creature, L2ParamStack& stack);
|
||||||
|
static float __fastcall __GetMaxTickRate_hook(GameEngine* This, int /*edx*/);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static GameEngine* _target;
|
static GameEngine* _target;
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#include "../../../Common/apihook.h"
|
#include "../../../Common/apihook.h"
|
||||||
#include "NetworkHandlerWrapper.h"
|
#include "NetworkHandlerWrapper.h"
|
||||||
#include "../../../Events/SpoiledEvent.h"
|
#include "../../../Events/SpoiledEvent.h"
|
||||||
#include "../../../Events/CreatureDiedEvent.h"
|
|
||||||
#include "../../../Events/EventDispatcher.h"
|
#include "../../../Events/EventDispatcher.h"
|
||||||
#include "ProcessManipulation.h"
|
#include "ProcessManipulation.h"
|
||||||
|
|
||||||
@ -14,9 +13,7 @@ namespace Interlude
|
|||||||
void(__thiscall* NetworkHandlerWrapper::__Init)(NetworkHandler*, float) = 0;
|
void(__thiscall* NetworkHandlerWrapper::__Init)(NetworkHandler*, float) = 0;
|
||||||
Item* (__thiscall* NetworkHandlerWrapper::__GetNextItem)(NetworkHandler*, float, int) = 0;
|
Item* (__thiscall* NetworkHandlerWrapper::__GetNextItem)(NetworkHandler*, float, int) = 0;
|
||||||
User* (__thiscall* NetworkHandlerWrapper::__GetNextCreature)(NetworkHandler*, float, int) = 0;
|
User* (__thiscall* NetworkHandlerWrapper::__GetNextCreature)(NetworkHandler*, float, int) = 0;
|
||||||
float(__thiscall* NetworkHandlerWrapper::__GetMaxTickRate)(NetworkHandler*) = 0;
|
|
||||||
int(__thiscall* NetworkHandlerWrapper::__AddNetworkQueue)(NetworkHandler*, L2::NetworkPacket*) = 0;
|
int(__thiscall* NetworkHandlerWrapper::__AddNetworkQueue)(NetworkHandler*, L2::NetworkPacket*) = 0;
|
||||||
int(__thiscall* NetworkHandlerWrapper::__OnDie)(NetworkHandler*, User*, L2ParamStack&) = 0;
|
|
||||||
|
|
||||||
//todo exception
|
//todo exception
|
||||||
Item* NetworkHandlerWrapper::GetNextItem(float_t radius, int prevId) const
|
Item* NetworkHandlerWrapper::GetNextItem(float_t radius, int prevId) const
|
||||||
@ -62,23 +59,16 @@ namespace Interlude
|
|||||||
(FARPROC&)__GetNextItem = GetProcAddress(hModule, "?GetNextItem@UNetworkHandler@@UAEPAUItem@@MH@Z");
|
(FARPROC&)__GetNextItem = GetProcAddress(hModule, "?GetNextItem@UNetworkHandler@@UAEPAUItem@@MH@Z");
|
||||||
(FARPROC&)__GetNextCreature = GetProcAddress(hModule, "?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z");
|
(FARPROC&)__GetNextCreature = GetProcAddress(hModule, "?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z");
|
||||||
|
|
||||||
(FARPROC&)__GetMaxTickRate = (FARPROC)splice(
|
|
||||||
GetProcAddress(hModule, "?GetMaxTickRate@UGameEngine@@UAEMXZ"), __GetMaxTickRate_hook
|
|
||||||
);
|
|
||||||
(FARPROC&)__AddNetworkQueue = (FARPROC)splice(
|
(FARPROC&)__AddNetworkQueue = (FARPROC)splice(
|
||||||
GetProcAddress(hModule, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z"), __AddNetworkQueue_hook
|
GetProcAddress(hModule, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z"), __AddNetworkQueue_hook
|
||||||
);
|
);
|
||||||
(FARPROC&)__OnDie = (FARPROC)splice(
|
|
||||||
GetProcAddress(hModule, "?OnDie@UGameEngine@@UAEHPAUUser@@AAVL2ParamStack@@@Z"), __OnDie_hook
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkHandlerWrapper::Restore()
|
void NetworkHandlerWrapper::Restore()
|
||||||
{
|
{
|
||||||
restore(originalInitAddress);
|
restore(originalInitAddress);
|
||||||
restore((void*&)__GetMaxTickRate);
|
|
||||||
restore((void*&)__AddNetworkQueue);
|
restore((void*&)__AddNetworkQueue);
|
||||||
restore((void*&)__OnDie);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __fastcall NetworkHandlerWrapper::__Init_hook(NetworkHandler* This, int /*edx*/, float unk)
|
void __fastcall NetworkHandlerWrapper::__Init_hook(NetworkHandler* This, int /*edx*/, float unk)
|
||||||
@ -94,14 +84,6 @@ namespace Interlude
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO ini
|
|
||||||
// 0 - <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
float __fastcall NetworkHandlerWrapper::__GetMaxTickRate_hook(NetworkHandler* This, int)
|
|
||||||
{
|
|
||||||
float fps = (*__GetMaxTickRate)(This);
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
int __fastcall NetworkHandlerWrapper::__AddNetworkQueue_hook(NetworkHandler* This, int, L2::NetworkPacket* packet)
|
int __fastcall NetworkHandlerWrapper::__AddNetworkQueue_hook(NetworkHandler* This, int, L2::NetworkPacket* packet)
|
||||||
{
|
{
|
||||||
if (packet->id == static_cast<int>(L2::NetworkPacketId::SYSTEM_MESSAGE)) {
|
if (packet->id == static_cast<int>(L2::NetworkPacketId::SYSTEM_MESSAGE)) {
|
||||||
@ -116,11 +98,4 @@ namespace Interlude
|
|||||||
|
|
||||||
return (*__AddNetworkQueue)(This, packet);
|
return (*__AddNetworkQueue)(This, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __fastcall NetworkHandlerWrapper::__OnDie_hook(NetworkHandler* This, int, User* creature, L2ParamStack& stack)
|
|
||||||
{
|
|
||||||
EventDispatcher::GetInstance().Dispatch(CreatureDiedEvent{ creature->objectId, stack.GetBufferAsVector<int32_t>()});
|
|
||||||
|
|
||||||
return (*__OnDie)(This, creature, stack);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -25,16 +25,12 @@ namespace Interlude
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
static void __fastcall __Init_hook(NetworkHandler* This, int /*edx*/, float unk);
|
static void __fastcall __Init_hook(NetworkHandler* This, int /*edx*/, float unk);
|
||||||
static int __fastcall __AddNetworkQueue_hook(NetworkHandler* This, int /*edx*/, L2::NetworkPacket* packet);
|
static int __fastcall __AddNetworkQueue_hook(NetworkHandler* This, int /*edx*/, L2::NetworkPacket* packet);;
|
||||||
static int __fastcall __OnDie_hook(NetworkHandler* This, int /*edx*/, User* creature, L2ParamStack& stack);
|
|
||||||
static float __fastcall __GetMaxTickRate_hook(NetworkHandler* This, int /*edx*/);
|
|
||||||
|
|
||||||
static void(__thiscall* __Init)(NetworkHandler*, float);
|
static void(__thiscall* __Init)(NetworkHandler*, float);
|
||||||
static Item* (__thiscall* __GetNextItem)(NetworkHandler*, float, int);
|
static Item* (__thiscall* __GetNextItem)(NetworkHandler*, float, int);
|
||||||
static User* (__thiscall* __GetNextCreature)(NetworkHandler*, float, int);
|
static User* (__thiscall* __GetNextCreature)(NetworkHandler*, float, int);
|
||||||
static float(__thiscall* __GetMaxTickRate)(NetworkHandler*);
|
|
||||||
static int(__thiscall* __AddNetworkQueue)(NetworkHandler*, L2::NetworkPacket*);
|
static int(__thiscall* __AddNetworkQueue)(NetworkHandler*, L2::NetworkPacket*);
|
||||||
static int(__thiscall* __OnDie)(NetworkHandler*, User*, L2ParamStack&);
|
|
||||||
private:
|
private:
|
||||||
static void* originalInitAddress;
|
static void* originalInitAddress;
|
||||||
static NetworkHandler* _target;
|
static NetworkHandler* _target;
|
||||||
|
Reference in New Issue
Block a user