diff --git a/src/Components/Modules/Bans.cpp b/src/Components/Modules/Bans.cpp index 7fdef6cb..d3f5d306 100644 --- a/src/Components/Modules/Bans.cpp +++ b/src/Components/Modules/Bans.cpp @@ -181,9 +181,9 @@ namespace Components Game::client_t* client = &Game::svs_clients[num]; SteamID guid; - guid.bits = client->steamid; + guid.bits = client->steamID; - Bans::InsertBan({ guid, client->addr.ip }); + Bans::InsertBan({ guid, client->netchan.remoteAddress.ip }); Game::SV_KickClientError(client, reason); } diff --git a/src/Components/Modules/Bots.cpp b/src/Components/Modules/Bots.cpp index 4cbbde53..7e0f16ba 100644 --- a/src/Components/Modules/Bots.cpp +++ b/src/Components/Modules/Bots.cpp @@ -437,7 +437,7 @@ namespace Components ucmd.rightmove = g_botai[i].right; ucmd.weapon = g_botai[i].weapon; - client->deltaMessage = client->outgoingSequence - 1; + client->deltaMessage = client->netchan.outgoingSequence - 1; Game::SV_ClientThink(client, &ucmd); } diff --git a/src/Components/Modules/Client.cpp b/src/Components/Modules/Client.cpp index 0f3e991f..4f5f9770 100644 --- a/src/Components/Modules/Client.cpp +++ b/src/Components/Modules/Client.cpp @@ -134,7 +134,7 @@ namespace Components if (client->state >= 3) { - std::string ip = Game::NET_AdrToString(client->addr); + std::string ip = Game::NET_AdrToString(client->netchan.remoteAddress); if (ip.find_first_of(":") != std::string::npos) ip.erase(ip.begin() + ip.find_first_of(":"), ip.end()); // erase port Game::Scr_AddString(ip.data()); diff --git a/src/Components/Modules/Dedicated.cpp b/src/Components/Modules/Dedicated.cpp index 8df55851..f19cae05 100644 --- a/src/Components/Modules/Dedicated.cpp +++ b/src/Components/Modules/Dedicated.cpp @@ -177,7 +177,7 @@ namespace Components { if (Game::svs_clients[i].state >= 3) { - list.append(Utils::String::VA(" %llX", Game::svs_clients[i].steamid)); + list.append(Utils::String::VA(" %llX", Game::svs_clients[i].steamID)); Utils::InfoString info(Game::svs_clients[i].connectInfoString); list.append(Utils::String::VA(" %llX", strtoull(info.get("realsteamId").data(), nullptr, 16))); diff --git a/src/Components/Modules/Download.cpp b/src/Components/Modules/Download.cpp index f4c25566..d2bb9649 100644 --- a/src/Components/Modules/Download.cpp +++ b/src/Components/Modules/Download.cpp @@ -387,7 +387,7 @@ namespace Components if (client->state >= 3) { - if (address.getIP().full == Network::Address(client->addr).getIP().full) + if (address.getIP().full == Network::Address(client->netchan.remoteAddress).getIP().full) { return client; } diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index 34455097..0fa394af 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -610,7 +610,7 @@ namespace Game { if (client->state < 5) { - Components::Network::SendCommand(client->addr, "error", reason); + Components::Network::SendCommand(client->netchan.remoteAddress, "error", reason); } SV_KickClient(client, reason.data()); diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index 8e6ae687..51e71428 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -4215,6 +4215,35 @@ namespace Game char ipx[10]; }; + struct netProfileInfo_t + { + char __pad0[0x5E0]; + }; + + static_assert(sizeof(netProfileInfo_t) == 0x5E0); + + struct netchan_t + { + int outgoingSequence; + netsrc_t sock; + int dropped; + int incomingSequence; + netadr_t remoteAddress; + int qport; + int fragmentSequence; + int fragmentLength; + char* fragmentBuffer; + int fragmentBufferSize; + int unsentFragments; + int unsentFragmentStart; + int unsentLength; + char* unsentBuffer; + int unsentBufferSize; + netProfileInfo_t prof; + }; + + static_assert(sizeof(netchan_t) == 0x62C); + struct FxEditorElemAtlas { int behavior; @@ -4621,50 +4650,34 @@ namespace Game #pragma pack(push, 1) typedef struct client_s { - // 0 - clientstate_t state; - // 4 - char _pad[4]; - // 8 - int deltaMessage; - // 12 - char __pad[12]; - // 24 - int outgoingSequence; - // 28 - char pad[12]; - // 40 - netadr_t addr; - // 60 - char pad1[1568]; - // 1628 - char connectInfoString[1024]; - // 2652 - char pad2[133192]; - // 135844 - char name[16]; - // 135860 - char pad3[12]; - // 135872 - int snapNum; - // 135876 - int pad4; - // 135880 - short ping; - // 135882 - //char pad5[142390]; - char pad5[133158]; - // 269040 - int isBot; - // 269044 - char pad6[9228]; - // 278272 - unsigned __int64 steamid; - // 278280 - char pad7[403592]; + clientstate_t state; // 0 + char __pad0[4]; // 4 + int deltaMessage; // 8 + char __pad1[12]; // 12 + netchan_t netchan; // 24 + char __pad2[20]; // 1604 + const char* delayDropReason; // 1624 + char connectInfoString[1024]; // 1628 + char __pad3[132096]; // 2652 + int reliableSequence; // 134748 + int reliableAcknowledge; // 134752 + int reliableSent; // 134756 + char __pad4[1084]; // 134760 + char name[16]; // 135844 + char __pad5[12]; // 135860 + int snapNum; // 135872 + int __pad6; // 135876 + short ping; // 135880 + char __pad7[133158]; // 135882 + int isBot; // 269040 + char __pad8[9228]; // 269044 + unsigned __int64 steamID; // 278272 + char __pad9[403592]; // 278280 } client_t; #pragma pack(pop) + static_assert(sizeof(client_t) == 0xA6790); + struct CModelAllocData { void* mainArray;