feat(Hooks): Added player join and leave hooks
This commit is contained in:
parent
436db363f4
commit
2f7b8d425b
@ -17,6 +17,7 @@
|
||||
namespace big
|
||||
{
|
||||
hooking::hooking() :
|
||||
// Swapchain
|
||||
m_swapchain_hook(*g_pointers->m_swapchain, hooks::swapchain_num_funcs),
|
||||
// SetCursorPos
|
||||
m_set_cursor_pos_hook("SCP", memory::module("user32.dll").get_export("SetCursorPos").as<void*>(), &hooks::set_cursor_pos),
|
||||
@ -26,6 +27,8 @@ namespace big
|
||||
// ConvertThreadToFibe
|
||||
m_convert_thread_to_fiber_hook("CTTF", memory::module("kernel32.dll").get_export("ConvertThreadToFiber").as<void*>(), &hooks::convert_thread_to_fiber),
|
||||
|
||||
// GTA Thead Start
|
||||
m_gta_thread_start_hook("GTS", g_pointers->m_gta_thread_start, &hooks::gta_thread_start),
|
||||
// GTA Thread Tick
|
||||
m_gta_thread_tick_hook("GTT", g_pointers->m_gta_thread_tick, &hooks::gta_thread_tick),
|
||||
// GTA Thread Kill
|
||||
@ -48,7 +51,10 @@ namespace big
|
||||
// Send NET Info to Lobby
|
||||
m_send_net_info_to_lobby("SNITL", g_pointers->m_send_net_info_to_lobby, &hooks::send_net_info_to_lobby),
|
||||
|
||||
m_gta_thread_start_hook("GTS", g_pointers->m_gta_thread_start, &hooks::gta_thread_start)
|
||||
// Player Has Joined
|
||||
m_player_has_joined_hook("PHJ", g_pointers->m_player_has_joined, &hooks::player_join),
|
||||
// Player Has Left
|
||||
m_player_has_left_hook("PHL", g_pointers->m_player_has_left, &hooks::player_leave)
|
||||
{
|
||||
m_swapchain_hook.hook(hooks::swapchain_present_index, &hooks::swapchain_present);
|
||||
m_swapchain_hook.hook(hooks::swapchain_resizebuffers_index, &hooks::swapchain_resizebuffers);
|
||||
@ -77,6 +83,9 @@ namespace big
|
||||
m_gta_thread_kill_hook.enable();
|
||||
m_gta_thread_tick_hook.enable();
|
||||
|
||||
m_player_has_joined_hook.enable();
|
||||
m_player_has_left_hook.enable();
|
||||
|
||||
m_increment_stat_hook.enable();
|
||||
|
||||
m_error_screen_hook.enable();
|
||||
@ -104,6 +113,9 @@ namespace big
|
||||
|
||||
m_increment_stat_hook.disable();
|
||||
|
||||
m_player_has_joined_hook.disable();
|
||||
m_player_has_left_hook.disable();
|
||||
|
||||
m_gta_thread_tick_hook.disable();
|
||||
m_gta_thread_kill_hook.disable();
|
||||
m_gta_thread_start_hook.disable();
|
||||
|
@ -40,6 +40,9 @@ namespace big
|
||||
static rage::eThreadState gta_thread_tick(GtaThread* a1, unsigned int a2);
|
||||
static rage::eThreadState gta_thread_kill(GtaThread* thread);
|
||||
|
||||
static void player_join(CNetworkObjectMgr* _this, CNetGamePlayer* net_player);
|
||||
static void player_leave(CNetworkObjectMgr* _this, CNetGamePlayer* net_player);
|
||||
|
||||
static bool increment_stat_event(CNetworkIncrementStatEvent* net_event_struct, CNetGamePlayer* sender, int64_t a3);
|
||||
static bool is_dlc_present(Hash dlc_hash);
|
||||
|
||||
@ -79,6 +82,7 @@ namespace big
|
||||
minhook_keepalive m_minhook_keepalive;
|
||||
|
||||
vmt_hook m_swapchain_hook;
|
||||
|
||||
WNDPROC m_og_wndproc = nullptr;
|
||||
detour_hook m_set_cursor_pos_hook;
|
||||
|
||||
@ -91,6 +95,9 @@ namespace big
|
||||
detour_hook m_gta_thread_tick_hook;
|
||||
detour_hook m_gta_thread_kill_hook;
|
||||
|
||||
detour_hook m_player_has_joined_hook;
|
||||
detour_hook m_player_has_left_hook;
|
||||
|
||||
detour_hook m_increment_stat_hook;
|
||||
detour_hook m_is_dlc_present_hook;
|
||||
|
||||
|
11
BigBaseV2/src/hooks/player_join.cpp
Normal file
11
BigBaseV2/src/hooks/player_join.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "hooking.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void hooks::player_join(CNetworkObjectMgr* _this, CNetGamePlayer* net_player)
|
||||
{
|
||||
LOG(INFO) << "Player '" << net_player->get_name() << "' joined taking slot #" << (int)net_player->player_id;
|
||||
|
||||
return g_hooking->m_player_has_joined_hook.get_original<decltype(&hooks::player_join)>()(_this, net_player);
|
||||
}
|
||||
}
|
11
BigBaseV2/src/hooks/player_left.cpp
Normal file
11
BigBaseV2/src/hooks/player_left.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "hooking.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void hooks::player_leave(CNetworkObjectMgr* _this, CNetGamePlayer* net_player)
|
||||
{
|
||||
LOG(INFO) << "Player '" << net_player->get_name() << "' leaved freeing slot #" << (int)net_player->player_id;
|
||||
|
||||
return g_hooking->m_player_has_left_hook.get_original<decltype(&hooks::player_leave)>()(_this, net_player);
|
||||
}
|
||||
}
|
@ -215,6 +215,24 @@ namespace big
|
||||
{
|
||||
m_send_net_info_to_lobby = ptr.sub(0x64).as<decltype(m_send_net_info_to_lobby)>();
|
||||
});
|
||||
|
||||
// CNetworkObjectMgr
|
||||
main_batch.add("CNOM", "48 8B 0D ? ? ? ? 45 33 C0 E8 ? ? ? ? 33 FF 4C 8B F0", [this](memory::handle ptr)
|
||||
{
|
||||
m_network_object_mgr = ptr.add(3).rip().as<CNetworkObjectMgr**>();
|
||||
});
|
||||
|
||||
// Player Has Joined
|
||||
main_batch.add("PHJ", "48 8B CA 48 8B F2 FF 50 18 4C 8D 05", [this](memory::handle ptr)
|
||||
{
|
||||
m_player_has_joined = ptr.sub(0x26).as<PVOID>();
|
||||
});
|
||||
|
||||
// Player Has Left
|
||||
main_batch.add("PHL", "4C 8B F1 48 8B CA 48 8B EA FF 50 18 4C 8D 05", [this](memory::handle ptr)
|
||||
{
|
||||
m_player_has_left = ptr.sub(0x26).as<PVOID>();
|
||||
});
|
||||
|
||||
main_batch.run(memory::module(nullptr));
|
||||
|
||||
|
@ -21,6 +21,7 @@ namespace big
|
||||
|
||||
CPedFactory **m_ped_factory{};
|
||||
CNetworkPlayerMgr **m_network_player_mgr{};
|
||||
CNetworkObjectMgr** m_network_object_mgr{};
|
||||
|
||||
rage::CReplayInterface** m_replay_interface{};
|
||||
functions::ptr_to_handle* m_ptr_to_handle{};
|
||||
@ -51,6 +52,9 @@ namespace big
|
||||
PVOID m_gta_thread_tick{};
|
||||
PVOID m_gta_thread_kill{};
|
||||
|
||||
PVOID m_player_has_joined{};
|
||||
PVOID m_player_has_left{};
|
||||
|
||||
functions::increment_stat_event* m_increment_stat_event{};
|
||||
|
||||
PVOID m_scripted_game_event{};
|
||||
|
Reference in New Issue
Block a user