diff --git a/BigBaseV2/src/function_types.hpp b/BigBaseV2/src/function_types.hpp index a5b987b1..2531e28a 100644 --- a/BigBaseV2/src/function_types.hpp +++ b/BigBaseV2/src/function_types.hpp @@ -26,16 +26,6 @@ namespace big::functions // Received Event Signatures START using read_bitbuf_array = bool(rage::datBitBuffer* buffer, PVOID read, int bits, int); using read_bitbuf_dword = bool(rage::datBitBuffer* buffer, PVOID read, int bits); - using received_event = bool( - rage::netEventMgr* event_manager, - CNetGamePlayer* source_player, - CNetGamePlayer* target_player, - uint16_t event_id, - int event_index, - int event_handled_bitset, - int64_t bit_buffer_size, - int64_t bit_buffer - ); using send_event_ack = void(rage::netEventMgr* event_manager, CNetGamePlayer* source_player, CNetGamePlayer* target_player, int event_index, int event_handled_bitset); // Received Event Signatures END } diff --git a/BigBaseV2/src/hooking.cpp b/BigBaseV2/src/hooking.cpp index d2d86b01..47a85164 100644 --- a/BigBaseV2/src/hooking.cpp +++ b/BigBaseV2/src/hooking.cpp @@ -50,9 +50,6 @@ namespace big // Received Event m_received_event_hook("RE", g_pointers->m_received_event, &hooks::received_event), - // Scripted Game Event Hook - m_scripted_game_event_hook("SGEH", g_pointers->m_scripted_game_event, &hooks::scripted_game_event), - // 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), @@ -101,8 +98,6 @@ namespace big m_received_event_hook.enable(); - m_scripted_game_event_hook.enable(); - m_send_net_info_to_lobby.enable(); m_enabled = true; @@ -114,8 +109,6 @@ namespace big m_send_net_info_to_lobby.disable(); - m_scripted_game_event_hook.disable(); - m_received_event_hook.disable(); m_error_screen_hook.disable(); diff --git a/BigBaseV2/src/hooking.hpp b/BigBaseV2/src/hooking.hpp index fde36a59..773dade2 100644 --- a/BigBaseV2/src/hooking.hpp +++ b/BigBaseV2/src/hooking.hpp @@ -57,8 +57,8 @@ namespace big uint16_t event_id, int event_index, int event_handled_bitset, - int64_t bit_buffer_size, - int64_t bit_buffer + int unk, + rage::datBitBuffer* bit_buffer ); static bool scripted_game_event(CScriptedGameEvent* scripted_game_event, CNetGamePlayer* player); @@ -110,8 +110,7 @@ namespace big detour_hook m_is_dlc_present_hook; detour_hook m_received_event_hook; - - detour_hook m_scripted_game_event_hook; + detour_hook m_send_net_info_to_lobby; }; diff --git a/BigBaseV2/src/hooks/received_event.cpp b/BigBaseV2/src/hooks/received_event.cpp index 222891e2..00664254 100644 --- a/BigBaseV2/src/hooks/received_event.cpp +++ b/BigBaseV2/src/hooks/received_event.cpp @@ -11,15 +11,18 @@ namespace big uint16_t event_id, int event_index, int event_handled_bitset, - int64_t bit_buffer_size, - int64_t bit_buffer + int unk, + rage::datBitBuffer* buffer ) { - auto buffer = std::make_unique((void*)bit_buffer, (uint32_t)bit_buffer_size); + if (event_id > 91u) + { + g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset); - if (event_id > 90u) return false; + return false; + } - const char* event_name = *(char**)((DWORD64)event_manager + 8i64 * event_id + 243376); + const auto event_name = *(char**)((DWORD64)event_manager + 8i64 * event_id + 243376); if (event_name == nullptr || source_player == nullptr || source_player->m_player_id < 0 || source_player->m_player_id >= 32) { g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset); @@ -28,6 +31,22 @@ namespace big switch ((RockstarEvent)event_id) { + case RockstarEvent::SCRIPTED_GAME_EVENT: + { + const auto scripted_game_event = std::make_unique(); + buffer->ReadDword(&scripted_game_event->m_args_size, 32); + if (scripted_game_event->m_args_size - 1 <= 0x1AF) + buffer->ReadArray(&scripted_game_event->m_args, 8 * scripted_game_event->m_args_size); + + if (hooks::scripted_game_event(scripted_game_event.get(), source_player)) + { + g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset); + + return false; + } + + break; + } case RockstarEvent::NETWORK_CLEAR_PED_TASKS_EVENT: { if (source_player->m_player_id < 32) @@ -100,6 +119,6 @@ namespace big } } - return g_hooking->m_received_event_hook.get_original()(event_manager, source_player, target_player, event_id, event_index, event_handled_bitset, bit_buffer_size, bit_buffer); + return g_hooking->m_received_event_hook.get_original()(event_manager, source_player, target_player, event_id, event_index, event_handled_bitset, unk, buffer); } } \ No newline at end of file diff --git a/BigBaseV2/src/hooks/script_event_handler.cpp b/BigBaseV2/src/hooks/script_event_handler.cpp index 178d2f11..efbd267e 100644 --- a/BigBaseV2/src/hooks/script_event_handler.cpp +++ b/BigBaseV2/src/hooks/script_event_handler.cpp @@ -16,10 +16,10 @@ namespace big bool hooks::scripted_game_event(CScriptedGameEvent* scripted_game_event, CNetGamePlayer* player) { - auto args = scripted_game_event->m_args; + const auto args = scripted_game_event->m_args; - const eRemoteEvent hash = static_cast(args[0]); - const char* player_name = player->get_name(); + const auto hash = static_cast(args[0]); + const auto player_name = player->get_name(); const auto& notify = g->notifications.script_event_handler; @@ -187,12 +187,12 @@ namespace big LOG(INFO) << "Player: " << player->get_name(); LOG(INFO) << "Hash/Arg #0: " << (int)hash; - for (int i = 1; i < sizeof(args); i++) + for (std::size_t i = 1; i < sizeof(args); i++) LOG(INFO) << "Arg #" << i << ": " << args[i]; LOG(INFO) << "== End of Script Event =="; } - return g_hooking->m_scripted_game_event_hook.get_original()(scripted_game_event, player); + return false; } } \ No newline at end of file diff --git a/BigBaseV2/src/pointers.cpp b/BigBaseV2/src/pointers.cpp index f99a6722..75798cc6 100644 --- a/BigBaseV2/src/pointers.cpp +++ b/BigBaseV2/src/pointers.cpp @@ -165,12 +165,6 @@ namespace big memset(spectator_check, 0x90, 0x4); }); - // Scripted Game Event Handler - main_batch.add("SGEH", "40 53 48 81 EC ? ? ? ? 44 8B 81 ? ? ? ? 4C 8B CA 41 8D 40 FF 3D ? ? ? ? 77 42", [this](memory::handle ptr) - { - m_scripted_game_event = ptr.as(); - }); - // GET CNetGamePlayer main_batch.add("GCNGP", "48 83 EC ? 33 C0 38 05 ? ? ? ? 74 ? 83 F9", [this](memory::handle ptr) { diff --git a/BigBaseV2/src/pointers.hpp b/BigBaseV2/src/pointers.hpp index 773db9c2..bca086d7 100644 --- a/BigBaseV2/src/pointers.hpp +++ b/BigBaseV2/src/pointers.hpp @@ -72,14 +72,13 @@ namespace big functions::get_gameplay_cam_coords* m_get_gamplay_cam_coords; functions::increment_stat_event* m_increment_stat_event{}; - - PVOID m_scripted_game_event{}; + functions::trigger_script_event* m_trigger_script_event{}; // Received Event Signatures START functions::read_bitbuf_array* m_read_bitbuf_array{}; functions::read_bitbuf_dword* m_read_bitbuf_dword{}; - functions::received_event* m_received_event{}; + PVOID m_received_event{}; functions::send_event_ack* m_send_event_ack{}; // Received Event Signatures END