2023-12-29 16:07:00 +00:00
|
|
|
#include "hooking/hooking.hpp"
|
2019-03-21 20:18:31 +01:00
|
|
|
|
2023-12-29 16:07:00 +00:00
|
|
|
#include "pointers.hpp"
|
2019-03-21 20:18:31 +01:00
|
|
|
|
2024-06-27 08:32:17 +00:00
|
|
|
#include <player/CNonPhysicalPlayerData.hpp>
|
|
|
|
#include <network/CNetGamePlayer.hpp>
|
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
namespace big
|
|
|
|
{
|
|
|
|
hooking::hooking() :
|
2023-08-19 11:01:08 +00:00
|
|
|
m_swapchain_hook(*g_pointers->m_gta.m_swapchain, hooks::swapchain_num_funcs),
|
2024-06-27 08:32:17 +00:00
|
|
|
m_sync_data_reader_hook(g_pointers->m_gta.m_sync_data_reader_vtable, 27),
|
|
|
|
m_error_packet_memmove_hook(g_pointers->m_gta.m_error_packet_memmove, hooks::error_packet_memmove)
|
2019-03-21 20:18:31 +01:00
|
|
|
{
|
|
|
|
m_swapchain_hook.hook(hooks::swapchain_present_index, &hooks::swapchain_present);
|
|
|
|
m_swapchain_hook.hook(hooks::swapchain_resizebuffers_index, &hooks::swapchain_resizebuffers);
|
|
|
|
|
2023-08-19 11:01:08 +00:00
|
|
|
m_sync_data_reader_hook.hook(1, &hooks::sync_reader_serialize_dword);
|
|
|
|
m_sync_data_reader_hook.hook(2, &hooks::sync_reader_serialize_word);
|
|
|
|
m_sync_data_reader_hook.hook(3, &hooks::sync_reader_serialize_byte);
|
|
|
|
m_sync_data_reader_hook.hook(4, &hooks::sync_reader_serialize_int32);
|
|
|
|
m_sync_data_reader_hook.hook(5, &hooks::sync_reader_serialize_int16);
|
|
|
|
m_sync_data_reader_hook.hook(6, &hooks::sync_reader_serialize_signed_byte);
|
|
|
|
m_sync_data_reader_hook.hook(7, &hooks::sync_reader_serialize_bool);
|
|
|
|
m_sync_data_reader_hook.hook(9, &hooks::sync_reader_serialize_int32);
|
|
|
|
m_sync_data_reader_hook.hook(10, &hooks::sync_reader_serialize_int16);
|
|
|
|
m_sync_data_reader_hook.hook(11, &hooks::sync_reader_serialize_signed_byte);
|
|
|
|
m_sync_data_reader_hook.hook(13, &hooks::sync_reader_serialize_dword);
|
|
|
|
m_sync_data_reader_hook.hook(14, &hooks::sync_reader_serialize_word);
|
|
|
|
m_sync_data_reader_hook.hook(15, &hooks::sync_reader_serialize_byte);
|
|
|
|
m_sync_data_reader_hook.hook(16, &hooks::sync_reader_serialize_signed_float);
|
|
|
|
m_sync_data_reader_hook.hook(17, &hooks::sync_reader_serialize_float);
|
|
|
|
m_sync_data_reader_hook.hook(18, &hooks::sync_reader_serialize_net_id);
|
|
|
|
m_sync_data_reader_hook.hook(19, &hooks::sync_reader_serialize_vec3);
|
|
|
|
m_sync_data_reader_hook.hook(21, &hooks::sync_reader_serialize_vec3_signed);
|
|
|
|
m_sync_data_reader_hook.hook(23, &hooks::sync_reader_serialize_array);
|
|
|
|
|
2022-10-30 19:32:51 +01:00
|
|
|
// The only instances in that vector at this point should only be the "lazy" hooks
|
|
|
|
// aka the ones that still don't have their m_target assigned
|
|
|
|
for (auto& detour_hook_helper : m_detour_hook_helpers)
|
|
|
|
{
|
2023-07-24 09:40:28 +02:00
|
|
|
detour_hook_helper.m_detour_hook->set_target_and_create_hook(detour_hook_helper.m_on_hooking_available());
|
2022-10-30 19:32:51 +01:00
|
|
|
}
|
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::run_script_threads>("SH", g_pointers->m_gta.m_run_script_threads);
|
2023-03-01 21:27:15 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::get_label_text>("GLT", g_pointers->m_gta.m_get_label_text);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::gta_thread_start>("GTS", g_pointers->m_gta.m_gta_thread_start);
|
|
|
|
detour_hook_helper::add<hooks::gta_thread_kill>("GTK", g_pointers->m_gta.m_gta_thread_kill);
|
|
|
|
detour_hook_helper::add<hooks::init_native_tables>("INT", g_pointers->m_gta.m_init_native_tables);
|
|
|
|
detour_hook_helper::add<hooks::script_vm>("SVM", g_pointers->m_gta.m_script_vm);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::network_player_mgr_init>("NPMI", g_pointers->m_gta.m_network_player_mgr_init);
|
|
|
|
detour_hook_helper::add<hooks::network_player_mgr_shutdown>("NPMS", g_pointers->m_gta.m_network_player_mgr_shutdown);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::received_event>("RE", g_pointers->m_gta.m_received_event);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::assign_physical_index>("API", g_pointers->m_gta.m_assign_physical_index);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::receive_net_message>("RNM", g_pointers->m_gta.m_receive_net_message);
|
2022-11-19 01:49:36 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::received_clone_create>("RCC", g_pointers->m_gta.m_received_clone_create);
|
|
|
|
detour_hook_helper::add<hooks::received_clone_sync>("RCS", g_pointers->m_gta.m_received_clone_sync);
|
|
|
|
detour_hook_helper::add<hooks::can_apply_data>("CAD", g_pointers->m_gta.m_can_apply_data);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::get_network_event_data>("GNED", g_pointers->m_gta.m_get_network_event_data);
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::invalid_decal>("IDC", g_pointers->m_gta.m_invalid_decal_crash);
|
2023-08-19 11:01:08 +00:00
|
|
|
detour_hook_helper::add<hooks::task_parachute_object>("TPO", g_pointers->m_gta.m_task_parachute_object);
|
|
|
|
detour_hook_helper::add<hooks::task_ambient_clips>("TAC", g_pointers->m_gta.m_task_ambient_clips);
|
2022-11-12 04:01:10 +08:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::update_presence_attribute_int>("UPAI", g_pointers->m_sc.m_update_presence_attribute_int);
|
|
|
|
detour_hook_helper::add<hooks::update_presence_attribute_string>("UPAS", g_pointers->m_sc.m_update_presence_attribute_string);
|
2022-11-13 16:34:44 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::handle_join_request>("HJR", g_pointers->m_gta.m_handle_join_request);
|
2022-11-19 01:49:36 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::sort_session_details>("SSD", g_pointers->m_gta.m_sort_session_details);
|
2022-11-19 01:49:36 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::send_chat_message>("SCM", g_pointers->m_gta.m_send_chat_message);
|
2022-11-21 15:42:12 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::process_matchmaking_find_response>("PMFR", g_pointers->m_gta.m_process_matchmaking_find_response);
|
2022-11-24 21:49:05 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::serialize_join_request_message>("SJRM", g_pointers->m_gta.m_serialize_join_request_message);
|
2024-05-10 21:09:10 +02:00
|
|
|
detour_hook_helper::add<hooks::serialize_join_request_message_2>("SJRM2", g_pointers->m_gta.m_serialize_join_request_message_2);
|
2022-11-24 21:49:05 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::start_matchmaking_find_sessions>("SMFS", g_pointers->m_gta.m_start_matchmaking_find_sessions);
|
2022-11-24 21:49:05 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::broadcast_net_array>("BNA", g_pointers->m_gta.m_broadcast_net_array);
|
2022-12-06 16:12:02 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::serialize_take_off_ped_variation_task>("STOPVT", g_pointers->m_gta.m_serialize_take_off_ped_variation_task);
|
2023-08-19 11:01:08 +00:00
|
|
|
detour_hook_helper::add<hooks::serialize_parachute_task>("SPT", g_pointers->m_gta.m_serialize_parachute_task);
|
2022-12-06 16:12:02 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::queue_dependency>("QD", g_pointers->m_gta.m_queue_dependency);
|
|
|
|
detour_hook_helper::add<hooks::prepare_metric_for_sending>("PMFS", g_pointers->m_gta.m_prepare_metric_for_sending);
|
2023-09-24 17:13:14 -04:00
|
|
|
detour_hook_helper::add<hooks::http_start_request>("HSR", g_pointers->m_gta.m_http_start_request);
|
2022-12-18 01:00:04 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::fragment_physics_crash_2>("FPC2", g_pointers->m_gta.m_fragment_physics_crash_2);
|
2023-01-03 05:52:07 -05:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::received_array_update>("RAU", g_pointers->m_gta.m_received_array_update);
|
2023-01-22 21:57:32 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::receive_pickup>("RPI", g_pointers->m_gta.m_receive_pickup);
|
2023-02-04 23:20:49 +01:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::send_player_card_stats>("SPCS", g_pointers->m_gta.m_send_player_card_stats);
|
|
|
|
detour_hook_helper::add<hooks::serialize_stats>("SS", g_pointers->m_gta.m_serialize_stats);
|
2023-03-01 21:27:15 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::get_model_info>("GMI", g_pointers->m_gta.m_get_model_info);
|
2023-02-21 06:20:40 +08:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::task_jump_constructor>("TJC", g_pointers->m_gta.m_taskjump_constructor);
|
2023-03-13 17:10:21 -04:00
|
|
|
|
2024-01-28 09:17:26 -05:00
|
|
|
detour_hook_helper::add<hooks::task_fall_constructor>("TFC", g_pointers->m_gta.m_taskfall_constructor);
|
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::enumerate_audio_devices>("EAD", g_pointers->m_gta.m_enumerate_audio_devices);
|
|
|
|
detour_hook_helper::add<hooks::direct_sound_capture_create>("DSCC", g_pointers->m_gta.m_direct_sound_capture_create);
|
2023-03-09 12:23:01 +00:00
|
|
|
|
2023-04-14 18:54:07 +02:00
|
|
|
detour_hook_helper::add<hooks::write_vehicle_proximity_migration_data_node>("WVPMDN", g_pointers->m_gta.m_write_vehicle_proximity_migration_data_node);
|
2023-03-09 12:23:01 +00:00
|
|
|
|
2023-06-30 22:03:17 +00:00
|
|
|
detour_hook_helper::add<hooks::netfilter_handle_message>("NHM", g_pointers->m_gta.m_netfilter_handle_message);
|
|
|
|
|
2023-07-10 19:01:34 +02:00
|
|
|
detour_hook_helper::add<hooks::log_error_message_box>("E0MBH", g_pointers->m_gta.m_error_message_box);
|
2024-05-19 20:26:44 +02:00
|
|
|
detour_hook_helper::add<hooks::log_error_message_box_2>("E0MBH2", g_pointers->m_gta.m_error_message_box_2);
|
2023-07-10 19:01:34 +02:00
|
|
|
|
2023-07-12 17:03:29 +00:00
|
|
|
detour_hook_helper::add<hooks::send_non_physical_player_data>("SNPPD", g_pointers->m_gta.m_send_non_physical_player_data);
|
|
|
|
|
2023-07-20 22:46:32 +02:00
|
|
|
detour_hook_helper::add<hooks::update_timecycle_keyframe_data>("UTCKD", g_pointers->m_gta.m_timecycle_keyframe_override);
|
|
|
|
|
2023-07-22 21:18:47 +00:00
|
|
|
detour_hook_helper::add<hooks::allocate_memory_reliable>("AMR", g_pointers->m_gta.m_allocate_memory_reliable);
|
|
|
|
|
|
|
|
detour_hook_helper::add<hooks::render_ped>("RP", g_pointers->m_gta.m_render_ped);
|
|
|
|
detour_hook_helper::add<hooks::render_entity>("RE", g_pointers->m_gta.m_render_entity);
|
|
|
|
detour_hook_helper::add<hooks::render_big_ped>("RBP", g_pointers->m_gta.m_render_big_ped);
|
|
|
|
|
2023-08-19 11:01:08 +00:00
|
|
|
detour_hook_helper::add<hooks::read_bits_single>("RBS", g_pointers->m_gta.m_read_bits_single);
|
|
|
|
|
2024-02-20 20:26:12 +01:00
|
|
|
detour_hook_helper::add<hooks::received_clone_remove>("RCR", g_pointers->m_gta.m_received_clone_remove);
|
|
|
|
|
2024-03-30 13:41:12 -04:00
|
|
|
detour_hook_helper::add<hooks::can_create_vehicle>("CCV", g_pointers->m_gta.m_can_create_vehicle);
|
|
|
|
|
2024-04-22 12:29:42 -04:00
|
|
|
detour_hook_helper::add<hooks::format_int>("FI", g_pointers->m_gta.m_format_int);
|
|
|
|
|
2024-05-13 17:01:47 +00:00
|
|
|
detour_hook_helper::add<hooks::searchlight_crash>("SLC", g_pointers->m_gta.m_searchlight_crash);
|
2024-05-24 21:17:54 +00:00
|
|
|
|
|
|
|
detour_hook_helper::add<hooks::advertise_session>("AS", g_pointers->m_gta.m_advertise_session);
|
|
|
|
detour_hook_helper::add<hooks::update_session_advertisement>("USA", g_pointers->m_gta.m_update_session_advertisement);
|
|
|
|
detour_hook_helper::add<hooks::unadvertise_session>("US", g_pointers->m_gta.m_unadvertise_session);
|
|
|
|
detour_hook_helper::add<hooks::send_session_detail_msg>("SSDM", g_pointers->m_gta.m_send_session_detail_msg);
|
2024-05-13 17:01:47 +00:00
|
|
|
|
2024-05-21 21:28:52 +00:00
|
|
|
detour_hook_helper::add<hooks::write_node_data>("WND", g_pointers->m_gta.m_write_node_data);
|
|
|
|
detour_hook_helper::add<hooks::can_send_node_to_player>("CSNTP", g_pointers->m_gta.m_can_send_node_to_player);
|
|
|
|
detour_hook_helper::add<hooks::write_node>("WN", g_pointers->m_gta.m_write_node);
|
2024-06-27 08:32:17 +00:00
|
|
|
|
|
|
|
detour_hook_helper::add<hooks::get_dlc_hash>("GDLCH", g_pointers->m_gta.m_get_dlc_hash);
|
|
|
|
|
|
|
|
detour_hook_helper::add<hooks::add_gamer_to_session>("AGTS", g_pointers->m_gta.m_add_gamer_to_session);
|
|
|
|
|
|
|
|
detour_hook_helper::add<hooks::create_pool_item>("CPI", g_pointers->m_gta.m_create_pool_item);
|
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
g_hooking = this;
|
|
|
|
}
|
|
|
|
|
|
|
|
hooking::~hooking()
|
|
|
|
{
|
|
|
|
if (m_enabled)
|
2022-10-30 19:32:51 +01:00
|
|
|
{
|
2019-03-21 20:18:31 +01:00
|
|
|
disable();
|
2022-10-30 19:32:51 +01:00
|
|
|
}
|
2019-03-21 20:18:31 +01:00
|
|
|
|
|
|
|
g_hooking = nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void hooking::enable()
|
|
|
|
{
|
|
|
|
m_swapchain_hook.enable();
|
2023-08-19 11:01:08 +00:00
|
|
|
m_sync_data_reader_hook.enable();
|
2024-06-27 08:32:17 +00:00
|
|
|
m_error_packet_memmove_hook.enable();
|
2022-07-05 16:54:45 -04:00
|
|
|
m_og_wndproc = WNDPROC(SetWindowLongPtrW(g_pointers->m_hwnd, GWLP_WNDPROC, LONG_PTR(&hooks::wndproc)));
|
2019-03-21 20:18:31 +01:00
|
|
|
|
2023-07-24 09:40:28 +02:00
|
|
|
for (auto& detour_hook_helper : m_detour_hook_helpers)
|
2022-10-30 19:32:51 +01:00
|
|
|
{
|
2023-07-24 09:40:28 +02:00
|
|
|
detour_hook_helper.m_detour_hook->enable();
|
2022-10-30 19:32:51 +01:00
|
|
|
}
|
2022-05-23 00:31:21 +02:00
|
|
|
|
2022-08-09 14:39:55 -04:00
|
|
|
MH_ApplyQueued();
|
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
m_enabled = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void hooking::disable()
|
|
|
|
{
|
|
|
|
m_enabled = false;
|
|
|
|
|
2023-07-24 09:40:28 +02:00
|
|
|
for (auto& detour_hook_helper : m_detour_hook_helpers)
|
2022-10-30 19:32:51 +01:00
|
|
|
{
|
2023-07-24 09:40:28 +02:00
|
|
|
detour_hook_helper.m_detour_hook->disable();
|
2022-10-30 19:32:51 +01:00
|
|
|
}
|
2022-08-09 14:39:55 -04:00
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
SetWindowLongPtrW(g_pointers->m_hwnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(m_og_wndproc));
|
2024-06-27 08:32:17 +00:00
|
|
|
m_error_packet_memmove_hook.disable();
|
2023-08-19 11:01:08 +00:00
|
|
|
m_sync_data_reader_hook.disable();
|
2019-03-21 20:18:31 +01:00
|
|
|
m_swapchain_hook.disable();
|
2022-10-30 19:32:51 +01:00
|
|
|
|
|
|
|
MH_ApplyQueued();
|
|
|
|
|
|
|
|
m_detour_hook_helpers.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
hooking::detour_hook_helper::~detour_hook_helper()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void hooking::detour_hook_helper::enable_hook_if_hooking_is_already_running()
|
|
|
|
{
|
|
|
|
if (g_hooking && g_hooking->m_enabled)
|
|
|
|
{
|
|
|
|
if (m_on_hooking_available)
|
|
|
|
{
|
|
|
|
m_detour_hook->set_target_and_create_hook(m_on_hooking_available());
|
|
|
|
}
|
|
|
|
|
|
|
|
m_detour_hook->enable();
|
|
|
|
MH_ApplyQueued();
|
|
|
|
}
|
2019-03-21 20:18:31 +01:00
|
|
|
}
|
|
|
|
}
|