diff --git a/L2BotDll/Events/OnEndItemListEvent.h b/L2BotDll/Events/OnEndItemListEvent.h
new file mode 100644
index 0000000..8789677
--- /dev/null
+++ b/L2BotDll/Events/OnEndItemListEvent.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "Event.h"
+
+class OnEndItemListEvent : public Event
+{
+public:
+ static constexpr const char* name = "onEndItemList";
+
+ const std::string GetName() const
+ {
+ return std::string(name);
+ }
+
+ OnEndItemListEvent() = default;
+ virtual ~OnEndItemListEvent() = default;
+};
\ No newline at end of file
diff --git a/L2BotDll/L2BotDll.vcxproj b/L2BotDll/L2BotDll.vcxproj
index 5d831f5..568fdc8 100644
--- a/L2BotDll/L2BotDll.vcxproj
+++ b/L2BotDll/L2BotDll.vcxproj
@@ -177,6 +177,7 @@
+
diff --git a/L2BotDll/L2BotDll.vcxproj.filters b/L2BotDll/L2BotDll.vcxproj.filters
index d120f92..07f609f 100644
--- a/L2BotDll/L2BotDll.vcxproj.filters
+++ b/L2BotDll/L2BotDll.vcxproj.filters
@@ -198,6 +198,9 @@
Header Files
+
+ Header Files
+
diff --git a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp
index 65fcb83..8c649ec 100644
--- a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp
+++ b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.cpp
@@ -14,6 +14,7 @@
#include "../../../Events/ItemAutousedEvent.h"
#include "../../../Events/GameEngineTickedEvent.h"
#include "../../../Events/ChatMessageCreatedEvent.h"
+#include "../../../Events/OnEndItemListEvent.h"
#include "../../../DTO/ItemData.h"
#include "FName.h"
@@ -30,6 +31,7 @@ namespace Interlude
void(__thiscall* GameEngineWrapper::__OnExAutoSoulShot)(GameEngine*, L2ParamStack&) = 0;
void(__thiscall* GameEngineWrapper::__Tick)(GameEngine*, float_t) = 0;
void(__thiscall* GameEngineWrapper::__OnSay2)(GameEngine*, L2ParamStack&) = 0;
+ void(__thiscall* GameEngineWrapper::__OnEndItemList)(GameEngine*) = 0;
void GameEngineWrapper::Init(HMODULE hModule)
@@ -61,6 +63,9 @@ namespace Interlude
(FARPROC&)__OnSay2 = (FARPROC)splice(
GetProcAddress(hModule, "?OnSay2@UGameEngine@@UAEXAAVL2ParamStack@@@Z"), __OnSay2_hook
);
+ (FARPROC&)__OnEndItemList = (FARPROC)splice(
+ GetProcAddress(hModule, "?OnEndItemList@UGameEngine@@UAEXXZ"), __OnEndItemList_hook
+ );
}
void GameEngineWrapper::Restore()
@@ -73,6 +78,7 @@ namespace Interlude
restore((void*&)__OnReceiveUpdateItemList);
restore((void*&)__OnExAutoSoulShot);
restore((void*&)__OnSay2);
+ restore((void*&)__OnEndItemList);
}
void __fastcall GameEngineWrapper::__OnSkillListPacket_hook(GameEngine* This, uint32_t, L2ParamStack& stack)
@@ -185,4 +191,9 @@ namespace Interlude
(*__OnSay2)(This, stack);
}
+ void __fastcall GameEngineWrapper::__OnEndItemList_hook(GameEngine* This, uint32_t)
+ {
+ EventDispatcher::GetInstance().Dispatch(OnEndItemListEvent());
+ (*__OnEndItemList)(This);
+ }
}
\ No newline at end of file
diff --git a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h
index c4dbbd8..578a69d 100644
--- a/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h
+++ b/L2BotDll/Versions/Interlude/GameStructs/GameEngineWrapper.h
@@ -28,6 +28,7 @@ namespace Interlude
static void(__thiscall* __OnExAutoSoulShot)(GameEngine*, L2ParamStack&);
static void(__thiscall* __Tick)(GameEngine*, float_t);
static void(__thiscall* __OnSay2)(GameEngine*, L2ParamStack&);
+ static void(__thiscall* __OnEndItemList)(GameEngine*);
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);
@@ -38,6 +39,7 @@ namespace Interlude
static void __fastcall __OnExAutoSoulShot_hook(GameEngine* This, uint32_t /*edx*/, L2ParamStack& stack);
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*/);
private:
static GameEngine* _target;
diff --git a/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h b/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h
index bc4ebf8..571362a 100644
--- a/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h
+++ b/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h
@@ -12,7 +12,7 @@
#include "../../../Events/ItemDeletedEvent.h"
#include "../../../Events/HeroDeletedEvent.h"
#include "../../../Events/ItemAutousedEvent.h"
-#include "../../../Events/GameEngineTickedEvent.h"
+#include "../../../Events/OnEndItemListEvent.h"
#include "../../../Events/EventDispatcher.h"
using namespace L2Bot::Domain;
@@ -66,15 +66,15 @@ namespace Interlude
EventDispatcher::GetInstance().Subscribe(ItemAutousedEvent::name, [this](const Event& evt) {
OnItemAutoused(evt);
});
- EventDispatcher::GetInstance().Subscribe(GameEngineTickedEvent::name, [this](const Event& evt) {
- OnGameEngineTicked(evt);
+ EventDispatcher::GetInstance().Subscribe(OnEndItemListEvent::name, [this](const Event& evt) {
+ OnEndItemList(evt);
});
}
- void OnGameEngineTicked(const Event& evt)
+ void OnEndItemList(const Event& evt)
{
std::shared_lock(m_Mutex);
- if (evt.GetName() == GameEngineTickedEvent::name)
+ if (evt.GetName() == OnEndItemListEvent::name)
{
for (auto it = m_Items.begin(); it != m_Items.end();)
{