use different hook for some detours
This commit is contained in:
parent
71ef00d29c
commit
699cf54010
@ -18,8 +18,6 @@ namespace fov
|
|||||||
game::dvar_t* cg_fovScale;
|
game::dvar_t* cg_fovScale;
|
||||||
game::dvar_t* cg_use_fov_comp;
|
game::dvar_t* cg_use_fov_comp;
|
||||||
|
|
||||||
utils::hook::detour cg_view_calc_fov_compensation_hook;
|
|
||||||
|
|
||||||
float cg_view_calc_fov_compensation_stub(game::cg_s* blob)
|
float cg_view_calc_fov_compensation_stub(game::cg_s* blob)
|
||||||
{
|
{
|
||||||
if (!cg_use_fov_comp->current.enabled)
|
if (!cg_use_fov_comp->current.enabled)
|
||||||
@ -27,7 +25,7 @@ namespace fov
|
|||||||
return 0.0f;
|
return 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cg_view_calc_fov_compensation_hook.invoke<float>(blob);
|
return utils::hook::invoke<float>(0x140889B60, blob);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +61,8 @@ namespace fov
|
|||||||
|
|
||||||
// disable FOV compensation by default
|
// disable FOV compensation by default
|
||||||
cg_use_fov_comp = game::Dvar_RegisterBool("cg_use_fov_comp", false, game::DVAR_FLAG_SAVED, "Use FOV offset compensation for the viewmodel");
|
cg_use_fov_comp = game::Dvar_RegisterBool("cg_use_fov_comp", false, game::DVAR_FLAG_SAVED, "Use FOV offset compensation for the viewmodel");
|
||||||
cg_view_calc_fov_compensation_hook.create(0x140889B60, cg_view_calc_fov_compensation_stub);
|
utils::hook::call(0x140186FC4, cg_view_calc_fov_compensation_stub);
|
||||||
|
utils::hook::call(0x1408D5940, cg_view_calc_fov_compensation_stub);
|
||||||
|
|
||||||
// patch max fov values
|
// patch max fov values
|
||||||
utils::hook::inject(0x14087E08B + 4, &max_fov);
|
utils::hook::inject(0x14087E08B + 4, &max_fov);
|
||||||
|
@ -16,13 +16,11 @@ namespace gameplay
|
|||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::hook::detour stuck_in_client_hook;
|
|
||||||
|
|
||||||
void stuck_in_client_stub(void* entity)
|
void stuck_in_client_stub(void* entity)
|
||||||
{
|
{
|
||||||
if (dvars::bg_playerEjection->current.enabled)
|
if (dvars::bg_playerEjection->current.enabled)
|
||||||
{
|
{
|
||||||
stuck_in_client_hook.invoke<void>(entity);
|
utils::hook::invoke<void>(0x140AFD9B0, entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +142,7 @@ namespace gameplay
|
|||||||
{
|
{
|
||||||
// Implement ejection dvar
|
// Implement ejection dvar
|
||||||
dvars::bg_playerEjection = game::Dvar_RegisterBool("bg_playerEjection", true, game::DVAR_FLAG_REPLICATED, "Flag whether player ejection is on or off");
|
dvars::bg_playerEjection = game::Dvar_RegisterBool("bg_playerEjection", true, game::DVAR_FLAG_REPLICATED, "Flag whether player ejection is on or off");
|
||||||
stuck_in_client_hook.create(0x140AFD9B0, stuck_in_client_stub);
|
utils::hook::call(0x140AFA739, stuck_in_client_stub);
|
||||||
|
|
||||||
// Implement bounces dvar
|
// Implement bounces dvar
|
||||||
dvars::bg_bounces = game::Dvar_RegisterBool("bg_bounces", false, game::DVAR_FLAG_REPLICATED, "Enables bounces");
|
dvars::bg_bounces = game::Dvar_RegisterBool("bg_bounces", false, game::DVAR_FLAG_REPLICATED, "Enables bounces");
|
||||||
|
@ -9,8 +9,6 @@ namespace intro
|
|||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::hook::detour cinematic_start_playback_hook;
|
|
||||||
|
|
||||||
void cinematic_start_playback(const char* name, const int playbackFlags, const int startOffsetMsec,
|
void cinematic_start_playback(const char* name, const int playbackFlags, const int startOffsetMsec,
|
||||||
const bool fillerBink, const int pauseState)
|
const bool fillerBink, const int pauseState)
|
||||||
{
|
{
|
||||||
@ -26,7 +24,7 @@ namespace intro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cinematic_start_playback_hook.invoke(name, playbackFlags, startOffsetMsec, fillerBink, pauseState);
|
utils::hook::invoke<void>(0x140DD6A10, name, playbackFlags, startOffsetMsec, fillerBink, pauseState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,7 +33,8 @@ namespace intro
|
|||||||
public:
|
public:
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
cinematic_start_playback_hook.create(0x140DD6A10, cinematic_start_playback);
|
utils::hook::call(0x140DD69FF, cinematic_start_playback);
|
||||||
|
utils::hook::call(0x140DD69CF, cinematic_start_playback);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,6 @@ namespace network
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::hook::detour cl_dispatch_connectionless_packet_hook;
|
|
||||||
bool cl_dispatch_connectionless_packet_stub(int client_num, game::netadr_s* from, game::msg_t* msg, int time)
|
bool cl_dispatch_connectionless_packet_stub(int client_num, game::netadr_s* from, game::msg_t* msg, int time)
|
||||||
{
|
{
|
||||||
if (handle_command(from, game::Cmd_Argv(0), msg))
|
if (handle_command(from, game::Cmd_Argv(0), msg))
|
||||||
@ -66,7 +65,7 @@ namespace network
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cl_dispatch_connectionless_packet_hook.invoke<bool>(client_num, from, msg, time);
|
return utils::hook::invoke<bool>(0x1409B2250, client_num, from, msg, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
int dw_send_to_stub(const int length, const char* data, game::netadr_s* to)
|
int dw_send_to_stub(const int length, const char* data, game::netadr_s* to)
|
||||||
@ -310,7 +309,7 @@ namespace network
|
|||||||
utils::hook::jump(0x140D93D70, dw_recv_from_stub);
|
utils::hook::jump(0x140D93D70, dw_recv_from_stub);
|
||||||
|
|
||||||
// intercept command handling
|
// intercept command handling
|
||||||
cl_dispatch_connectionless_packet_hook.create(0x1409B2250, cl_dispatch_connectionless_packet_stub);
|
utils::hook::call(0x1403572B7, cl_dispatch_connectionless_packet_stub);
|
||||||
|
|
||||||
// handle xuid without secure connection
|
// handle xuid without secure connection
|
||||||
utils::hook::nop(0x140C53315, 2);
|
utils::hook::nop(0x140C53315, 2);
|
||||||
|
@ -483,13 +483,6 @@ namespace party
|
|||||||
utils::hook::invoke<void>(0x140341430, 0, cmd); // CL_Main_AddReliableCommand
|
utils::hook::invoke<void>(0x140341430, 0, cmd); // CL_Main_AddReliableCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::hook::detour cl_prepare_for_map_restart_hook;
|
|
||||||
void cl_prepare_for_map_restart_stub(const char* mapname, const char* gametype)
|
|
||||||
{
|
|
||||||
cl_prepare_for_map_restart_hook.invoke<void>(mapname, gametype);
|
|
||||||
}
|
|
||||||
|
|
||||||
utils::hook::detour cl_initialize_gamestate_hook;
|
|
||||||
void cl_initialize_gamestate_stub(int local_client_num)
|
void cl_initialize_gamestate_stub(int local_client_num)
|
||||||
{
|
{
|
||||||
if (!game::Com_IsAnyLocalServerRunning())
|
if (!game::Com_IsAnyLocalServerRunning())
|
||||||
@ -497,7 +490,7 @@ namespace party
|
|||||||
send_user_info();
|
send_user_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
cl_initialize_gamestate_hook.invoke<void>(local_client_num);
|
utils::hook::invoke<void>(0x1409B2FA0, local_client_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -718,8 +711,7 @@ namespace party
|
|||||||
// enable custom kick reason in GScr_KickPlayer
|
// enable custom kick reason in GScr_KickPlayer
|
||||||
utils::hook::set<uint8_t>(0x140B5377E, 0xEB);
|
utils::hook::set<uint8_t>(0x140B5377E, 0xEB);
|
||||||
|
|
||||||
cl_prepare_for_map_restart_hook.create(0x1409B3FE0, cl_prepare_for_map_restart_stub);
|
utils::hook::call(0x1409B70A1, cl_initialize_gamestate_stub);
|
||||||
cl_initialize_gamestate_hook.create(0x1409B2FA0, cl_initialize_gamestate_stub);
|
|
||||||
|
|
||||||
command::add("senduserinfo", []()
|
command::add("senduserinfo", []()
|
||||||
{
|
{
|
||||||
|
@ -17,10 +17,8 @@ namespace patches
|
|||||||
{
|
{
|
||||||
utils::hook::detour com_register_common_dvars_hook;
|
utils::hook::detour com_register_common_dvars_hook;
|
||||||
utils::hook::detour com_game_mode_supports_feature_hook;
|
utils::hook::detour com_game_mode_supports_feature_hook;
|
||||||
utils::hook::detour cg_set_client_dvar_from_server_hook;
|
|
||||||
utils::hook::detour live_get_map_index_hook;
|
utils::hook::detour live_get_map_index_hook;
|
||||||
utils::hook::detour content_do_we_have_content_pack_hook;
|
utils::hook::detour content_do_we_have_content_pack_hook;
|
||||||
utils::hook::detour init_network_dvars_hook;
|
|
||||||
|
|
||||||
std::string get_login_username()
|
std::string get_login_username()
|
||||||
{
|
{
|
||||||
@ -168,7 +166,7 @@ namespace patches
|
|||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
std::string index_str = std::to_string(index);
|
std::string index_str = std::to_string(index);
|
||||||
return cg_set_client_dvar_from_server_hook.invoke<void>(client_num, cgame_glob, index_str.data(), value);
|
return utils::hook::invoke<void>(0x140856D70, client_num, cgame_glob, index_str.data(), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,7 +250,7 @@ namespace patches
|
|||||||
content_do_we_have_content_pack_hook.create(0x140CE8550, content_do_we_have_content_pack_stub);
|
content_do_we_have_content_pack_hook.create(0x140CE8550, content_do_we_have_content_pack_stub);
|
||||||
|
|
||||||
// make setclientdvar behave like older games
|
// make setclientdvar behave like older games
|
||||||
cg_set_client_dvar_from_server_hook.create(0x140856D70, cg_set_client_dvar_from_server_stub);
|
utils::hook::call(0x14084A136, cg_set_client_dvar_from_server_stub);
|
||||||
utils::hook::call(0x140B0A9BB, get_client_dvar_checksum); // setclientdvar
|
utils::hook::call(0x140B0A9BB, get_client_dvar_checksum); // setclientdvar
|
||||||
utils::hook::call(0x140B0ACD7, get_client_dvar_checksum); // setclientdvars
|
utils::hook::call(0x140B0ACD7, get_client_dvar_checksum); // setclientdvars
|
||||||
utils::hook::call(0x140B0A984, get_client_dvar); // setclientdvar
|
utils::hook::call(0x140B0A984, get_client_dvar); // setclientdvar
|
||||||
@ -266,7 +264,7 @@ namespace patches
|
|||||||
utils::hook::call(0x140B7CF11, cbuf_execute_buffer_internal_stub);
|
utils::hook::call(0x140B7CF11, cbuf_execute_buffer_internal_stub);
|
||||||
|
|
||||||
// don't register every replicated dvar as a network dvar
|
// don't register every replicated dvar as a network dvar
|
||||||
init_network_dvars_hook.create(0x140B7A920, init_network_dvars_stub);
|
utils::hook::jump(0x140B7A920, init_network_dvars_stub);
|
||||||
|
|
||||||
// some [data validation] anti tamper thing that kills performance
|
// some [data validation] anti tamper thing that kills performance
|
||||||
dvars::override::register_int("dvl", 0, 0, 0, game::DVAR_FLAG_READ);
|
dvars::override::register_int("dvl", 0, 0, 0, game::DVAR_FLAG_READ);
|
||||||
|
@ -207,22 +207,11 @@ namespace profile_infos
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
utils::hook::detour session_unregister_remote_player_hook;
|
|
||||||
void session_unregister_remote_player_stub(game::SessionData* session, const int slot)
|
|
||||||
{
|
|
||||||
session_unregister_remote_player_hook.invoke<void>(session, slot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class component final : public component_interface
|
class component final : public component_interface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
session_unregister_remote_player_hook.create(0x140C73970, session_unregister_remote_player_stub);
|
|
||||||
|
|
||||||
//dvars::override::register_int("playercard_cache_validity_life", 5000, 0, 3600000, 0x0); // 5sec
|
//dvars::override::register_int("playercard_cache_validity_life", 5000, 0, 3600000, 0x0); // 5sec
|
||||||
|
|
||||||
network::on("profileInfo", [](const game::netadr_s& client_addr, const std::string_view& data)
|
network::on("profileInfo", [](const game::netadr_s& client_addr, const std::string_view& data)
|
||||||
|
@ -13,7 +13,6 @@ namespace renderer
|
|||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::hook::detour r_init_draw_method_hook;
|
utils::hook::detour r_init_draw_method_hook;
|
||||||
utils::hook::detour r_update_front_end_dvar_options_hook;
|
|
||||||
|
|
||||||
int get_fullbright_technique()
|
int get_fullbright_technique()
|
||||||
{
|
{
|
||||||
@ -49,7 +48,7 @@ namespace renderer
|
|||||||
gfxdrawmethod();
|
gfxdrawmethod();
|
||||||
}
|
}
|
||||||
|
|
||||||
return r_update_front_end_dvar_options_hook.invoke<bool>();
|
return utils::hook::invoke<bool>(0x140E28B60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,8 +64,8 @@ namespace renderer
|
|||||||
|
|
||||||
dvars::r_fullbright = game::Dvar_RegisterInt("r_fullbright", 0, 0, 2, game::DVAR_FLAG_SAVED, "Toggles rendering without lighting");
|
dvars::r_fullbright = game::Dvar_RegisterInt("r_fullbright", 0, 0, 2, game::DVAR_FLAG_SAVED, "Toggles rendering without lighting");
|
||||||
|
|
||||||
r_init_draw_method_hook.create(0x140DE9260, &r_init_draw_method_stub);
|
r_init_draw_method_hook.create(0x140DE9260, r_init_draw_method_stub);
|
||||||
r_update_front_end_dvar_options_hook.create(0x140E28B60, &r_update_front_end_dvar_options_stub);
|
utils::hook::call(0x140E264B3, r_update_front_end_dvar_options_stub);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -86,10 +86,6 @@ namespace scheduler
|
|||||||
volatile bool kill = false;
|
volatile bool kill = false;
|
||||||
std::thread thread;
|
std::thread thread;
|
||||||
task_pipeline pipelines[pipeline::count];
|
task_pipeline pipelines[pipeline::count];
|
||||||
utils::hook::detour r_end_frame_hook;
|
|
||||||
utils::hook::detour g_run_frame_hook;
|
|
||||||
utils::hook::detour main_frame_hook;
|
|
||||||
utils::hook::detour hks_frame_hook;
|
|
||||||
|
|
||||||
void execute(const pipeline type)
|
void execute(const pipeline type)
|
||||||
{
|
{
|
||||||
@ -100,12 +96,12 @@ namespace scheduler
|
|||||||
void r_end_frame_stub()
|
void r_end_frame_stub()
|
||||||
{
|
{
|
||||||
execute(pipeline::renderer);
|
execute(pipeline::renderer);
|
||||||
r_end_frame_hook.invoke<void>();
|
utils::hook::invoke<void>(0x140E267B0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void server_frame_stub()
|
void server_frame_stub()
|
||||||
{
|
{
|
||||||
g_run_frame_hook.invoke<void>();
|
utils::hook::invoke<void>(0x140B15E20);
|
||||||
execute(pipeline::server);
|
execute(pipeline::server);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +112,7 @@ namespace scheduler
|
|||||||
execute(pipeline::main);
|
execute(pipeline::main);
|
||||||
});
|
});
|
||||||
|
|
||||||
return main_frame_hook.invoke<void*>();
|
return utils::hook::invoke<void*>(0x140B8E2D0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hks_frame_stub()
|
void hks_frame_stub()
|
||||||
@ -126,7 +122,7 @@ namespace scheduler
|
|||||||
{
|
{
|
||||||
execute(pipeline::lui);
|
execute(pipeline::lui);
|
||||||
}
|
}
|
||||||
hks_frame_hook.invoke<bool>();
|
utils::hook::invoke<bool>(0x140613440);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,10 +192,11 @@ namespace scheduler
|
|||||||
|
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
r_end_frame_hook.create(0x140E267B0, scheduler::r_end_frame_stub);
|
utils::hook::call(0x14034728C, scheduler::r_end_frame_stub);
|
||||||
g_run_frame_hook.create(0x140B15E20, scheduler::server_frame_stub);
|
utils::hook::call(0x14048A7B9, scheduler::server_frame_stub); // sp call
|
||||||
main_frame_hook.create(0x140B8E2D0, scheduler::main_frame_stub);
|
utils::hook::call(0x140B21941, scheduler::server_frame_stub); // mp call
|
||||||
hks_frame_hook.create(0x140613440, scheduler::hks_frame_stub);
|
utils::hook::call(0x140B8E272, scheduler::main_frame_stub);
|
||||||
|
utils::hook::call(0x1406173C2, scheduler::hks_frame_stub);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pre_destroy() override
|
void pre_destroy() override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user