Fix session data

This commit is contained in:
quaK 2025-05-04 01:16:45 +03:00
parent f772604bb2
commit 4d7f901371
3 changed files with 26 additions and 14 deletions

View File

@ -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);

View File

@ -460,8 +460,6 @@ namespace party
memset(&*reinterpret_cast<__int64*>(0x144E3A490 + 8), 0, 0x78680ui64 - 8);
}
}
utils::hook::invoke<void>(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<const char*>(0x1409B2850, 0); // CL_MainMP_GetUserInfoString
auto cmd = utils::string::va("userinfo \"%s\"", userinfostring);
utils::hook::invoke<void>(0x140341430, 0, cmd); // CL_Main_AddReliableCommand
utils::hook::invoke<void>(0x1409B3EB0, 0); // CL_MainMP_SendUserInfoCmd
}
void cl_initialize_gamestate_stub(int local_client_num)
@ -492,6 +488,23 @@ namespace party
utils::hook::invoke<void>(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<char*>(xnaddrString), &client->remoteAddress);
}
console::info("Setting client %i XUID to %s\n", clientNum, xuidString);
sv_set_player_info_string_hook.invoke<void>(clientNum, xuidString, xnaddrString, natTypeString, npIdString, partyIpString);
}
}
void start_map(const std::string& mapname, bool dev)
@ -712,13 +725,7 @@ namespace party
utils::hook::set<uint8_t>(0x140B5377E, 0xEB);
utils::hook::call(0x1409B70A1, cl_initialize_gamestate_stub);
command::add("senduserinfo", []()
{
auto userinfostring = utils::hook::invoke<const char*>(0x1409B2850, 0); // CL_MainMP_GetUserInfoString
auto cmd = utils::string::va("userinfo \"%s\"", userinfostring);
utils::hook::invoke<void>(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)
{

View File

@ -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<std::uint64_t(const SessionData* session, std::uint64_t xuid)> Session_FindRegisteredUser{ 0x140C72A00 };
WEAK symbol<std::uint64_t(int localControllerIndex, const SessionData* session, std::uint64_t xuid, bool privateSlot, int clientNum,
const int natType, char* xnaddr, const netadr_s* addr)> Session_RegisterRemotePlayer{ 0x140C733E0 };
WEAK symbol<std::uint64_t(const void* session, const int clientNum)> Session_GetXuid{ 0x140C72AB0 };
WEAK symbol<bool(const SessionData* session, const int memberIndex)> Session_IsHost{ 0x140D9B470 };
@ -273,6 +277,7 @@ namespace game
WEAK symbol<void()> SV_CmdsSP_FastRestart_f{ 0x140C12AF0 };
WEAK symbol<int (int clientNum)> SV_ClientMP_GetClientPing{ 0x140C507D0 };
WEAK symbol<char* (int entNum)> SV_GameMP_GetGuid{ 0x140C12410 };
WEAK symbol<int ()> SV_GameMP_GetAgentCount{ 0x140C124A0 };
WEAK symbol<void()> SV_MainMP_KillLocalServer{ 0x140C58DF0 };
WEAK symbol<SessionData* ()> SV_MainMP_GetServerLobby{ 0x140C58DA0 };
WEAK symbol<void(int clientNum, svscmd_type type, const char* text)> SV_GameSendServerCommand{ 0x140C54780 };