mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2025-06-18 07:07:32 +08:00
Fix Script Event Handler hook from clogging event queue (#163)
* fixes #154 * fix(ReceivedEvent): BitBuffer was incorrectly initialised
This commit is contained in:
parent
0fc1bf6a1b
commit
0390050d3f
@ -26,16 +26,6 @@ namespace big::functions
|
|||||||
// Received Event Signatures START
|
// Received Event Signatures START
|
||||||
using read_bitbuf_array = bool(rage::datBitBuffer* buffer, PVOID read, int bits, int);
|
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 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);
|
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
|
// Received Event Signatures END
|
||||||
}
|
}
|
||||||
|
@ -50,9 +50,6 @@ namespace big
|
|||||||
// Received Event
|
// Received Event
|
||||||
m_received_event_hook("RE", g_pointers->m_received_event, &hooks::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
|
// 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_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_received_event_hook.enable();
|
||||||
|
|
||||||
m_scripted_game_event_hook.enable();
|
|
||||||
|
|
||||||
m_send_net_info_to_lobby.enable();
|
m_send_net_info_to_lobby.enable();
|
||||||
|
|
||||||
m_enabled = true;
|
m_enabled = true;
|
||||||
@ -114,8 +109,6 @@ namespace big
|
|||||||
|
|
||||||
m_send_net_info_to_lobby.disable();
|
m_send_net_info_to_lobby.disable();
|
||||||
|
|
||||||
m_scripted_game_event_hook.disable();
|
|
||||||
|
|
||||||
m_received_event_hook.disable();
|
m_received_event_hook.disable();
|
||||||
|
|
||||||
m_error_screen_hook.disable();
|
m_error_screen_hook.disable();
|
||||||
|
@ -57,8 +57,8 @@ namespace big
|
|||||||
uint16_t event_id,
|
uint16_t event_id,
|
||||||
int event_index,
|
int event_index,
|
||||||
int event_handled_bitset,
|
int event_handled_bitset,
|
||||||
int64_t bit_buffer_size,
|
int unk,
|
||||||
int64_t bit_buffer
|
rage::datBitBuffer* bit_buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
static bool scripted_game_event(CScriptedGameEvent* scripted_game_event, CNetGamePlayer* player);
|
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_is_dlc_present_hook;
|
||||||
|
|
||||||
detour_hook m_received_event_hook;
|
detour_hook m_received_event_hook;
|
||||||
|
|
||||||
detour_hook m_scripted_game_event_hook;
|
|
||||||
detour_hook m_send_net_info_to_lobby;
|
detour_hook m_send_net_info_to_lobby;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11,15 +11,18 @@ namespace big
|
|||||||
uint16_t event_id,
|
uint16_t event_id,
|
||||||
int event_index,
|
int event_index,
|
||||||
int event_handled_bitset,
|
int event_handled_bitset,
|
||||||
int64_t bit_buffer_size,
|
int unk,
|
||||||
int64_t bit_buffer
|
rage::datBitBuffer* buffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
auto buffer = std::make_unique<rage::datBitBuffer>((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)
|
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);
|
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)
|
switch ((RockstarEvent)event_id)
|
||||||
{
|
{
|
||||||
|
case RockstarEvent::SCRIPTED_GAME_EVENT:
|
||||||
|
{
|
||||||
|
const auto scripted_game_event = std::make_unique<CScriptedGameEvent>();
|
||||||
|
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:
|
case RockstarEvent::NETWORK_CLEAR_PED_TASKS_EVENT:
|
||||||
{
|
{
|
||||||
if (source_player->m_player_id < 32)
|
if (source_player->m_player_id < 32)
|
||||||
@ -100,6 +119,6 @@ namespace big
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_hooking->m_received_event_hook.get_original<decltype(&received_event)>()(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<decltype(&received_event)>()(event_manager, source_player, target_player, event_id, event_index, event_handled_bitset, unk, buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,10 +16,10 @@ namespace big
|
|||||||
|
|
||||||
bool hooks::scripted_game_event(CScriptedGameEvent* scripted_game_event, CNetGamePlayer* player)
|
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<eRemoteEvent>(args[0]);
|
const auto hash = static_cast<eRemoteEvent>(args[0]);
|
||||||
const char* player_name = player->get_name();
|
const auto player_name = player->get_name();
|
||||||
|
|
||||||
const auto& notify = g->notifications.script_event_handler;
|
const auto& notify = g->notifications.script_event_handler;
|
||||||
|
|
||||||
@ -187,12 +187,12 @@ namespace big
|
|||||||
LOG(INFO) << "Player: " << player->get_name();
|
LOG(INFO) << "Player: " << player->get_name();
|
||||||
LOG(INFO) << "Hash/Arg #0: " << (int)hash;
|
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) << "Arg #" << i << ": " << args[i];
|
||||||
|
|
||||||
LOG(INFO) << "== End of Script Event ==";
|
LOG(INFO) << "== End of Script Event ==";
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_hooking->m_scripted_game_event_hook.get_original<decltype(&hooks::scripted_game_event)>()(scripted_game_event, player);
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -165,12 +165,6 @@ namespace big
|
|||||||
memset(spectator_check, 0x90, 0x4);
|
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<decltype(m_scripted_game_event)>();
|
|
||||||
});
|
|
||||||
|
|
||||||
// GET CNetGamePlayer
|
// GET CNetGamePlayer
|
||||||
main_batch.add("GCNGP", "48 83 EC ? 33 C0 38 05 ? ? ? ? 74 ? 83 F9", [this](memory::handle ptr)
|
main_batch.add("GCNGP", "48 83 EC ? 33 C0 38 05 ? ? ? ? 74 ? 83 F9", [this](memory::handle ptr)
|
||||||
{
|
{
|
||||||
|
@ -72,14 +72,13 @@ namespace big
|
|||||||
functions::get_gameplay_cam_coords* m_get_gamplay_cam_coords;
|
functions::get_gameplay_cam_coords* m_get_gamplay_cam_coords;
|
||||||
|
|
||||||
functions::increment_stat_event* m_increment_stat_event{};
|
functions::increment_stat_event* m_increment_stat_event{};
|
||||||
|
|
||||||
PVOID m_scripted_game_event{};
|
|
||||||
functions::trigger_script_event* m_trigger_script_event{};
|
functions::trigger_script_event* m_trigger_script_event{};
|
||||||
|
|
||||||
// Received Event Signatures START
|
// Received Event Signatures START
|
||||||
functions::read_bitbuf_array* m_read_bitbuf_array{};
|
functions::read_bitbuf_array* m_read_bitbuf_array{};
|
||||||
functions::read_bitbuf_dword* m_read_bitbuf_dword{};
|
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{};
|
functions::send_event_ack* m_send_event_ack{};
|
||||||
// Received Event Signatures END
|
// Received Event Signatures END
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user