diff --git a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp index 8c649ec..ae885d8 100644 --- a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp +++ b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp @@ -15,6 +15,7 @@ #include "../../../Events/GameEngineTickedEvent.h" #include "../../../Events/ChatMessageCreatedEvent.h" #include "../../../Events/OnEndItemListEvent.h" +#include "../../../Events/CreatureDiedEvent.h" #include "../../../DTO/ItemData.h" #include "FName.h" @@ -32,6 +33,8 @@ namespace Interlude void(__thiscall* GameEngineWrapper::__Tick)(GameEngine*, float_t) = 0; void(__thiscall* GameEngineWrapper::__OnSay2)(GameEngine*, L2ParamStack&) = 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) @@ -66,6 +69,12 @@ namespace Interlude (FARPROC&)__OnEndItemList = (FARPROC)splice( 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() @@ -79,6 +88,8 @@ namespace Interlude restore((void*&)__OnExAutoSoulShot); restore((void*&)__OnSay2); restore((void*&)__OnEndItemList); + restore((void*&)__GetMaxTickRate); + restore((void*&)__OnDie); } void __fastcall GameEngineWrapper::__OnSkillListPacket_hook(GameEngine* This, uint32_t, L2ParamStack& stack) @@ -196,4 +207,18 @@ namespace Interlude EventDispatcher::GetInstance().Dispatch(OnEndItemListEvent()); (*__OnEndItemList)(This); } + // TODO ini + // 0 - фпс без ограничений + 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() }); + + return (*__OnDie)(This, creature, stack); + } } \ No newline at end of file diff --git a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h index 578a69d..3863d98 100644 --- a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h +++ b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h @@ -29,6 +29,8 @@ namespace Interlude static void(__thiscall* __Tick)(GameEngine*, float_t); static void(__thiscall* __OnSay2)(GameEngine*, L2ParamStack&); 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 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 __OnSay2_hook(GameEngine* This, uint32_t /*edx*/, L2ParamStack& stack); 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: static GameEngine* _target; diff --git a/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.cpp b/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.cpp index 27e3bb1..663f42f 100644 --- a/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.cpp +++ b/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.cpp @@ -2,7 +2,6 @@ #include "../../../Common/apihook.h" #include "NetworkHandlerWrapper.h" #include "../../../Events/SpoiledEvent.h" -#include "../../../Events/CreatureDiedEvent.h" #include "../../../Events/EventDispatcher.h" #include "ProcessManipulation.h" @@ -14,9 +13,7 @@ namespace Interlude void(__thiscall* NetworkHandlerWrapper::__Init)(NetworkHandler*, float) = 0; Item* (__thiscall* NetworkHandlerWrapper::__GetNextItem)(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::__OnDie)(NetworkHandler*, User*, L2ParamStack&) = 0; //todo exception 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&)__GetNextCreature = GetProcAddress(hModule, "?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z"); - (FARPROC&)__GetMaxTickRate = (FARPROC)splice( - GetProcAddress(hModule, "?GetMaxTickRate@UGameEngine@@UAEMXZ"), __GetMaxTickRate_hook - ); + (FARPROC&)__AddNetworkQueue = (FARPROC)splice( GetProcAddress(hModule, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z"), __AddNetworkQueue_hook ); - (FARPROC&)__OnDie = (FARPROC)splice( - GetProcAddress(hModule, "?OnDie@UGameEngine@@UAEHPAUUser@@AAVL2ParamStack@@@Z"), __OnDie_hook - ); } void NetworkHandlerWrapper::Restore() { restore(originalInitAddress); - restore((void*&)__GetMaxTickRate); restore((void*&)__AddNetworkQueue); - restore((void*&)__OnDie); } void __fastcall NetworkHandlerWrapper::__Init_hook(NetworkHandler* This, int /*edx*/, float unk) @@ -94,14 +84,6 @@ namespace Interlude } } - // TODO ini - // 0 - фпс без ограничений - 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) { if (packet->id == static_cast(L2::NetworkPacketId::SYSTEM_MESSAGE)) { @@ -116,11 +98,4 @@ namespace Interlude return (*__AddNetworkQueue)(This, packet); } - - int __fastcall NetworkHandlerWrapper::__OnDie_hook(NetworkHandler* This, int, User* creature, L2ParamStack& stack) - { - EventDispatcher::GetInstance().Dispatch(CreatureDiedEvent{ creature->objectId, stack.GetBufferAsVector()}); - - return (*__OnDie)(This, creature, stack); - } } diff --git a/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.h b/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.h index 5676832..3c25d38 100644 --- a/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.h +++ b/L2BotDll/Versions/Interlude/GameStructs/NetworkHandlerWrapper.h @@ -25,16 +25,12 @@ namespace Interlude private: 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 __OnDie_hook(NetworkHandler* This, int /*edx*/, User* creature, L2ParamStack& stack); - static float __fastcall __GetMaxTickRate_hook(NetworkHandler* This, int /*edx*/); + static int __fastcall __AddNetworkQueue_hook(NetworkHandler* This, int /*edx*/, L2::NetworkPacket* packet);; static void(__thiscall* __Init)(NetworkHandler*, float); static Item* (__thiscall* __GetNextItem)(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* __OnDie)(NetworkHandler*, User*, L2ParamStack&); private: static void* originalInitAddress; static NetworkHandler* _target;