From 10e925f42bfa6281bf61bcdb7864b5265b6696e4 Mon Sep 17 00:00:00 2001 From: Yimura Date: Sun, 27 Dec 2020 19:10:01 +0100 Subject: [PATCH] feat(Hooking/Pointers): Added script event handler hook --- BigBaseV2/src/function_types.hpp | 3 ++- BigBaseV2/src/hooking.cpp | 5 ++++- BigBaseV2/src/hooking.hpp | 2 ++ BigBaseV2/src/hooks/script_event_handler.cpp | 9 +++++++++ BigBaseV2/src/pointers.cpp | 5 +++++ BigBaseV2/src/pointers.hpp | 3 ++- 6 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 BigBaseV2/src/hooks/script_event_handler.cpp diff --git a/BigBaseV2/src/function_types.hpp b/BigBaseV2/src/function_types.hpp index 20bf7e2f..af951a03 100644 --- a/BigBaseV2/src/function_types.hpp +++ b/BigBaseV2/src/function_types.hpp @@ -12,5 +12,6 @@ namespace big::functions using error_screen = void(char* entryHeader, char* entryLine1, int instructionalKey, char* entryLine2, BOOL p4, Any p5, Any* p6, Any* p7, BOOL background); using increment_stat_event = bool(uint64_t net_event_struct, int64_t sender, int64_t a3); using get_player_name = char*(Player player); - using sync_local_time_t = void(int h, int m); + using script_event_handler = bool(void* events, CNetGamePlayer* sourcePlayer, CNetGamePlayer* targetPlayer); + using sync_local_time = void(int h, int m); } diff --git a/BigBaseV2/src/hooking.cpp b/BigBaseV2/src/hooking.cpp index 5534fd79..e1feb403 100644 --- a/BigBaseV2/src/hooking.cpp +++ b/BigBaseV2/src/hooking.cpp @@ -40,7 +40,8 @@ namespace big m_convert_thread_to_fiber_hook("ConvertThreadToFiber", memory::module("kernel32.dll").get_export("ConvertThreadToFiber").as(), &hooks::convert_thread_to_fiber), m_error_screen_hook("Disable Warning/Error Screen", g_pointers->m_error_screen, &hooks::error_screen), - m_increment_stat_hook("Increment Stat Event", g_pointers->m_increment_stat_event, &hooks::increment_stat_event) + m_increment_stat_hook("Increment Stat Event", g_pointers->m_increment_stat_event, &hooks::increment_stat_event), + m_script_event_hook("Script Event Handler hook", g_pointers->m_script_event_handler, &hooks::script_event_handler) { m_swapchain_hook.hook(hooks::swapchain_present_index, &hooks::swapchain_present); m_swapchain_hook.hook(hooks::swapchain_resizebuffers_index, &hooks::swapchain_resizebuffers); @@ -68,6 +69,7 @@ namespace big // New hooks enable m_error_screen_hook.enable(); m_increment_stat_hook.enable(); + m_script_event_hook.enable(); m_enabled = true; } @@ -86,6 +88,7 @@ namespace big // New hooks disable m_error_screen_hook.disable(); m_increment_stat_hook.disable(); + m_script_event_hook.disable(); } minhook_keepalive::minhook_keepalive() diff --git a/BigBaseV2/src/hooking.hpp b/BigBaseV2/src/hooking.hpp index aa8fa041..b5528817 100644 --- a/BigBaseV2/src/hooking.hpp +++ b/BigBaseV2/src/hooking.hpp @@ -24,6 +24,7 @@ namespace big // New Hook Definitions static void error_screen(char* entryHeader, char* entryLine1, int instructionalKey, char* entryLine2, BOOL p4, Any p5, Any* p6, Any* p7, BOOL background); static bool increment_stat_event(uint64_t net_event_struct, int64_t sender, int64_t a3); + static bool script_event_handler(std::int64_t NetEventStruct, std::int64_t CNetGamePlayer); }; struct minhook_keepalive @@ -56,6 +57,7 @@ namespace big // New Detour Hook Definitions detour_hook m_error_screen_hook; detour_hook m_increment_stat_hook; + detour_hook m_script_event_hook; }; inline hooking *g_hooking{}; diff --git a/BigBaseV2/src/hooks/script_event_handler.cpp b/BigBaseV2/src/hooks/script_event_handler.cpp new file mode 100644 index 00000000..b8fe27d5 --- /dev/null +++ b/BigBaseV2/src/hooks/script_event_handler.cpp @@ -0,0 +1,9 @@ +#include "hooking.hpp" + +namespace big +{ + bool hooks::script_event_handler(std::int64_t NetEventStruct, std::int64_t CNetGamePlayer) + { + return g_hooking->m_script_event_hook.get_original()(NetEventStruct, CNetGamePlayer); + } +} \ No newline at end of file diff --git a/BigBaseV2/src/pointers.cpp b/BigBaseV2/src/pointers.cpp index 10cb842a..90639972 100644 --- a/BigBaseV2/src/pointers.cpp +++ b/BigBaseV2/src/pointers.cpp @@ -92,6 +92,11 @@ namespace big { m_increment_stat_event = ptr.as(); }); + + main_batch.add("Script Event Handler", "40 53 48 81 EC ? ? ? ? 44 8B 81 ? ? ? ? 4C 8B CA 41 8D 40 FF 3D ? ? ? ? 77 42", [this](memory::handle ptr) + { + m_script_event_handler = ptr.as(); + }); main_batch.run(memory::module(nullptr)); diff --git a/BigBaseV2/src/pointers.hpp b/BigBaseV2/src/pointers.hpp index baa66010..a95f01ef 100644 --- a/BigBaseV2/src/pointers.hpp +++ b/BigBaseV2/src/pointers.hpp @@ -38,7 +38,8 @@ namespace big functions::error_screen* m_error_screen{}; functions::get_player_name* m_get_player_name{}; functions::increment_stat_event* m_increment_stat_event{}; - functions::sync_local_time_t* m_sync_local_time{}; + functions::script_event_handler* m_script_event_handler{}; + functions::sync_local_time* m_sync_local_time{}; }; inline pointers *g_pointers{};