From 4d7f90137124cc55b2a855ba46d16a6f2fbb8840 Mon Sep 17 00:00:00 2001 From: quaK Date: Sun, 4 May 2025 01:16:45 +0300 Subject: [PATCH] Fix session data --- src/client/component/network.cpp | 4 ++-- src/client/component/party.cpp | 31 +++++++++++++++++++------------ src/client/game/symbols.hpp | 5 +++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp index 3ef7b452..b34230a5 100644 --- a/src/client/component/network.cpp +++ b/src/client/component/network.cpp @@ -312,8 +312,8 @@ namespace network utils::hook::call(0x1403572B7, cl_dispatch_connectionless_packet_stub); // handle xuid without secure connection - utils::hook::nop(0x140C53315, 2); - utils::hook::nop(0x140C55EC7, 6); + //utils::hook::nop(0x140C53315, 2); + //utils::hook::nop(0x140C55EC7, 6); utils::hook::jump(game::NET_CompareAdr, net_compare_address); utils::hook::jump(game::NET_CompareBaseAdr, net_compare_address); diff --git a/src/client/component/party.cpp b/src/client/component/party.cpp index 1ea0d9b6..368579d2 100644 --- a/src/client/component/party.cpp +++ b/src/client/component/party.cpp @@ -460,8 +460,6 @@ namespace party memset(&*reinterpret_cast<__int64*>(0x144E3A490 + 8), 0, 0x78680ui64 - 8); } } - - utils::hook::invoke(0x140C55DF0); // SV_InitMP_SetXUIDConfigStrings } void reset_mem_stuff_stub(utils::hook::assembler& a) @@ -478,9 +476,7 @@ namespace party void send_user_info() { - auto userinfostring = utils::hook::invoke(0x1409B2850, 0); // CL_MainMP_GetUserInfoString - auto cmd = utils::string::va("userinfo \"%s\"", userinfostring); - utils::hook::invoke(0x140341430, 0, cmd); // CL_Main_AddReliableCommand + utils::hook::invoke(0x1409B3EB0, 0); // CL_MainMP_SendUserInfoCmd } void cl_initialize_gamestate_stub(int local_client_num) @@ -492,6 +488,23 @@ namespace party utils::hook::invoke(0x1409B2FA0, local_client_num); } + + utils::hook::detour sv_set_player_info_string_hook; + void sv_set_player_info_string_stub(int clientNum, const char* xuidString, const char* xnaddrString, const char* natTypeString, const char* npIdString, const char* partyIpString) + { + uint64_t xuid64{}; + game::StringToXUID(xuidString, &xuid64); + const auto lobby = game::SV_MainMP_GetServerLobby(); + if (game::Session_FindRegisteredUser(lobby, xuid64) == 0xFFFFFFFFui64) + { + const auto client = game::svs_clients[clientNum]; + const auto privateSlot = clientNum < game::SV_GameMP_GetAgentCount(); + game::Session_RegisterRemotePlayer(0, lobby, xuid64, privateSlot, clientNum, std::atoi(natTypeString), const_cast(xnaddrString), &client->remoteAddress); + } + + console::info("Setting client %i XUID to %s\n", clientNum, xuidString); + sv_set_player_info_string_hook.invoke(clientNum, xuidString, xnaddrString, natTypeString, npIdString, partyIpString); + } } void start_map(const std::string& mapname, bool dev) @@ -712,13 +725,7 @@ namespace party utils::hook::set(0x140B5377E, 0xEB); utils::hook::call(0x1409B70A1, cl_initialize_gamestate_stub); - - command::add("senduserinfo", []() - { - auto userinfostring = utils::hook::invoke(0x1409B2850, 0); // CL_MainMP_GetUserInfoString - auto cmd = utils::string::va("userinfo \"%s\"", userinfostring); - utils::hook::invoke(0x140341430, 0, cmd); // CL_Main_AddReliableCommand - }); + sv_set_player_info_string_hook.create(0x140C57360, sv_set_player_info_string_stub); command::add("map", [](const command::params& args) { diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index 827d71a1..9e352c5e 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -207,6 +207,10 @@ namespace game #define R_AddCmdDrawTextWithCursor(TXT, MC, F, UNK, X, Y, XS, YS, R, C, S, CP, CC) \ AddBaseDrawTextCmd(TXT, MC, F, game::R_GetFontHeight(F), X, Y, XS, YS, R, C, CP, CC, game::R_Font_GetLegacyFontStyle(S), 0, 0, 0, 0) + WEAK symbol Session_FindRegisteredUser{ 0x140C72A00 }; + WEAK symbol Session_RegisterRemotePlayer{ 0x140C733E0 }; + WEAK symbol Session_GetXuid{ 0x140C72AB0 }; WEAK symbol Session_IsHost{ 0x140D9B470 }; @@ -273,6 +277,7 @@ namespace game WEAK symbol SV_CmdsSP_FastRestart_f{ 0x140C12AF0 }; WEAK symbol SV_ClientMP_GetClientPing{ 0x140C507D0 }; WEAK symbol SV_GameMP_GetGuid{ 0x140C12410 }; + WEAK symbol SV_GameMP_GetAgentCount{ 0x140C124A0 }; WEAK symbol SV_MainMP_KillLocalServer{ 0x140C58DF0 }; WEAK symbol SV_MainMP_GetServerLobby{ 0x140C58DA0 }; WEAK symbol SV_GameSendServerCommand{ 0x140C54780 };