diff --git a/src/client/component/colors.cpp b/src/client/component/colors.cpp index 02443de9..7016caf5 100644 --- a/src/client/component/colors.cpp +++ b/src/client/component/colors.cpp @@ -150,23 +150,7 @@ namespace colors utils::hook::jump(0x5AEDF0_b, com_clean_name_stub, true); // don't apply colors to overhead names - /*utils::hook::jump(0xF7B6A_b, utils::hook::assemble([](utils::hook::assembler& a) - { - a.lea(rax, qword_ptr(rbp, -0x10)); - a.mov(dword_ptr(rsp, 0x28), 0xB); - a.mov(r9d, 0x20); - a.mov(qword_ptr(rsp, 0x20), rax); - a.lea(r8, qword_ptr(rbp)); - - a.push(rax); - a.pushad64(); - a.call_aligned(get_client_name_stub); - a.mov(qword_ptr(rsp, 0x80), rax); - a.popad64(); - a.pop(rax); - - a.jmp(0xF7B8A_b); - }), true);*/ + utils::hook::call(0xF7B85_b, get_client_name_stub); // patch I_CleanStr utils::hook::jump(0x5AF2E0_b, i_clean_str_stub, true); diff --git a/src/client/component/party.cpp b/src/client/component/party.cpp index 4a851012..320aaa79 100644 --- a/src/client/component/party.cpp +++ b/src/client/component/party.cpp @@ -111,15 +111,16 @@ namespace party return false; } - void didyouknow_stub(const char* dvar_name, const char* string) + const char* get_didyouknow_stub(void* a1, int a2, int a3) { - if (!party::sv_motd.empty()) + if (party::sv_motd.empty()) { - string = party::sv_motd.data(); + return utils::hook::invoke(0x5A0AC0_b, a1, a2, a3); + } + else + { + return utils::string::va("%s", party::sv_motd.data()); } - - // This function either does Dvar_SetString or Dvar_RegisterString for the given dvar - utils::hook::invoke(0x1404FB210, dvar_name, string); } void disconnect() @@ -146,13 +147,6 @@ namespace party cl_disconnect_hook.invoke(a1); } - const auto drop_reason_stub = utils::hook::assemble([](utils::hook::assembler& a) - { - a.mov(rdx, rsi); - a.mov(ecx, 2); - a.jmp(0x12EF27_b); - }); - void menu_error(const std::string& error) { utils::hook::invoke(0x17D770_b, error.data(), "MENU_NOTICE"); @@ -334,8 +328,13 @@ namespace party if (game::environment::is_mp()) { // show custom drop reason - // utils::hook::nop(0x12EF4E_b, 13); - // utils::hook::jump(0x12EF4E_b, drop_reason_stub, true); + utils::hook::nop(0x12EF4E_b, 13); + utils::hook::jump(0x12EF4E_b, utils::hook::assemble([](utils::hook::assembler& a) + { + a.mov(rdx, rsi); + a.mov(ecx, 2); + a.jmp(0x12EF27_b); + }), true); command::add("disconnect", disconnect); } @@ -343,6 +342,9 @@ namespace party // enable custom kick reason in GScr_KickPlayer utils::hook::set(0xE423D_b, 0xEB); + // allow custom didyouknow based on sv_motd + utils::hook::call(0x1A8A3A_b, get_didyouknow_stub); + command::add("map", [](const command::params& argument) { if (argument.size() != 2) @@ -557,8 +559,6 @@ namespace party printf("%s\n", message.data()); }); - // utils::hook::call(0x1404C6E8D, didyouknow_stub); // allow custom didyouknow based on sv_motd - network::on("getInfo", [](const game::netadr_s& target, const std::string_view& data) { utils::info_string info{}; diff --git a/src/client/component/patches.cpp b/src/client/component/patches.cpp index d720802e..0d737448 100644 --- a/src/client/component/patches.cpp +++ b/src/client/component/patches.cpp @@ -121,7 +121,6 @@ namespace patches return; } - command::params_sv params{}; const auto menu_id = atoi(params.get(1)); const auto client = &svs_clients[ent->s.entityNum]; @@ -152,21 +151,12 @@ namespace patches void aim_assist_add_to_target_list(void* a1, void* a2) { if (!dvars::aimassist_enabled->current.enabled) + { return; + } game::AimAssist_AddToTargetList(a1, a2); } - - void* sub_5BB990_stub() - { - auto v0 = !utils::hook::invoke(0x1B19E0_b, 0x3426D20_b); - auto result = *reinterpret_cast(0x3426D20_b); - if (v0) - { - result = reinterpret_cast(0xB807260_b); - } - return result; - } } class component final : public component_interface @@ -200,7 +190,7 @@ namespace patches utils::hook::nop(SELECT_VALUE(0x1A9DDC_b, 0x13388F_b), 6); // Allow executing custom cfg files with the "exec" command - // utils::hook::jump(SELECT_VALUE(0x376EB5_b, 0x156D41_b), db_read_raw_file_stub); + utils::hook::call(SELECT_VALUE(0x376EB5_b, 0x156D41_b), db_read_raw_file_stub); if (!game::environment::is_sp()) { @@ -210,15 +200,7 @@ namespace patches static void patch_mp() { - // Use name dvar - utils::hook::nop(0x5BB990_b, 0x27); // clear function - // jmp from 0x5BB9C0 to 0x5BB9A2 (leave some space for far jmp above) - utils::hook::set(0x5BB9C0_b, 0xE0EB); - utils::hook::jump(0x5BB9A2_b, &live_get_local_client_name, true); - utils::hook::jump(0x5BB990_b, sub_5BB990_stub, true); // replace original function - - // Make name save - dvars::override::register_string("name", get_login_username().data(), game::DVAR_FLAG_SAVED); + utils::hook::jump(0x5BB9C0_b, &live_get_local_client_name); // Disable data validation error popup dvars::override::register_int("data_validation_allow_drop", 0, 0, 0, game::DVAR_FLAG_NONE); @@ -230,20 +212,16 @@ namespace patches utils::hook::set(0x54CFF0_b, 0xC3); // client side aim assist dvar - /*dvars::aimassist_enabled = dvars::register_bool("aimassist_enabled", true, + dvars::aimassist_enabled = dvars::register_bool("aimassist_enabled", true, game::DvarFlags::DVAR_FLAG_SAVED, "Enables aim assist for controllers"); - utils::hook::call(0xE857F_b, aim_assist_add_to_target_list);*/ + utils::hook::call(0xE857F_b, aim_assist_add_to_target_list); // patch "Couldn't find the bsp for this map." error to not be fatal in mp - // utils::hook::jump(0x39465B_b, bsp_sys_error_stub); + utils::hook::call(0x39465B_b, bsp_sys_error_stub); // isProfanity - utils::hook::set(0x361AA0_b, 0xC3C033); // inlined? - - /*// disable emblems - dvars::override::register_int("emblems_active", 0, 0, 0, game::DVAR_FLAG_NONE); - utils::hook::set(0x140479590, 0xC3); // don't register commands*/ + utils::hook::set(0x361AA0_b, 0xC3C033); // disable elite_clan dvars::override::register_int("elite_clan_active", 0, 0, 0, game::DVAR_FLAG_NONE); @@ -256,7 +234,7 @@ namespace patches utils::hook::nop(0x47408E_b, 5); // dvar_foreach // patch "Server is different version" to show the server client version - //utils::hook::inject(0x54DCE5_b, VERSION); // we can't inject + utils::hook::inject(0x54DCE5_b, VERSION); // prevent servers overriding our fov set_client_dvar_from_server_hook.create(0x11AA90_b, set_client_dvar_from_server_stub); @@ -268,8 +246,8 @@ namespace patches dvars::override::register_int("dvl", 0, 0, 0, game::DVAR_FLAG_READ); // unlock safeArea_* - /*utils::hook::jump(0x1402624F5, 0x140262503); - utils::hook::jump(0x14026251C, 0x140262547);*/ + utils::hook::jump(0x347BC9_b, 0x347BD3_b); + utils::hook::jump(0x347BF0_b, 0x347C17_b); dvars::override::register_float("safeArea_adjusted_horizontal", 1, 0, 1, game::DVAR_FLAG_SAVED); dvars::override::register_float("safeArea_adjusted_vertical", 1, 0, 1, game::DVAR_FLAG_SAVED); dvars::override::register_float("safeArea_horizontal", 1, 0, 1, game::DVAR_FLAG_SAVED); @@ -294,7 +272,7 @@ namespace patches cmd_lui_notify_server_hook.create(0x412D50_b, cmd_lui_notify_server_stub); // Prevent clients from sending invalid reliableAcknowledge - // utils::hook::jump(0x1CBD06_b, sv_execute_client_message_stub); + utils::hook::call(0x1CBD06_b, sv_execute_client_message_stub); // "fix" for rare 'Out of memory error' error if (utils::flags::has_flag("memoryfix")) diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index 1ba6d465..c6ca7b87 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -197,7 +197,7 @@ namespace game WEAK symbol SV_SendServerCommand{0x0, 0x1CC040}; WEAK symbol Sys_ShowConsole{0x0, 0x0}; - WEAK symbol Sys_Error{0x0, 0x0}; + WEAK symbol Sys_Error{0x0, 0x1D8710}; WEAK symbol Sys_BuildAbsPath{0x42C330, 0x0}; WEAK symbol Sys_Milliseconds{0x462B30, 0x5BDDF0};