2020-12-31 15:35:46 +03:00

283 lines
6.5 KiB
C++

#pragma once
#include <stdint.h>
#include <stddef.h>
namespace iw5mp_structs
{
static_assert(sizeof(uint32_t) == 4, "uint32_t is not 4?");
static_assert(sizeof(uint16_t) == 2, "uint16_t is not 2?");
static_assert(sizeof(uint8_t) == 1, "uint8_t is not 1?");
#pragma pack(push, 1)
struct NetDataStructure
{
uint32_t netaddresstype;
uint32_t dw_ip;
uint16_t w_port;
uint16_t field_A;
uint32_t field_C;
uint32_t field_10;
uint32_t index;
};
static_assert(sizeof(NetDataStructure) == 0x18, "NetDataStructure struct is not 0x18");
struct ipNport
{
uint8_t ip[4];
uint16_t port;
ipNport& operator=(const ipNport& data)
{
this->ip[0] = data.ip[0];
this->ip[1] = data.ip[1];
this->ip[2] = data.ip[2];
this->ip[3] = data.ip[3];
this->port = data.port;
return *this;
}
};
static_assert(sizeof(ipNport) == 6, "ipNport struct is not 6");
struct playerNetData
{
ipNport local;
ipNport route1;
ipNport route2;
ipNport external;
uint8_t isValid;
playerNetData& operator=(const playerNetData& data)
{
this->local = data.local;
this->route1 = data.route1;
this->route2 = data.route2;
this->external = data.external;
this->isValid = data.isValid;
return *this;
}
void SetData(const playerNetData* nd)
{
this->local = nd->local;
this->route1 = nd->route1;
this->route2 = nd->route2;
this->external = nd->external;
this->isValid = nd->isValid;
}
};
static_assert(sizeof(playerNetData) == 0x19, "playerNetData struct is not 0x19");
struct bdSecurityKeyMap_bdSecurityID
{
uint8_t id[8];
bdSecurityKeyMap_bdSecurityID& operator=(const bdSecurityKeyMap_bdSecurityID& data)
{
::memcpy(id, data.id, sizeof(id));
return *this;
}
void Init(uint8_t v)
{
::memset(this->id, v, sizeof(id));
}
void Set(bdSecurityKeyMap_bdSecurityID* res)
{
::memcpy(id, res->id, sizeof(id));
}
};
struct bdSecurityKeyMap_bdSecurityKey
{
uint8_t key[16];
};
struct hostInfo
{
uint8_t isValid;
bdSecurityKeyMap_bdSecurityID bdID;
playerNetData ND;
bdSecurityKeyMap_bdSecurityKey bdKey;
}; static_assert(sizeof(hostInfo) == 0x32, "hostInfo struct is not 0x32");
struct gamesession_unkstruct64b
{
uint8_t isValid;
uint8_t b1;
uint8_t b2;
uint8_t b3;
uint32_t x4;
uint64_t xuid;
uint8_t bi1;
uint8_t bi2;
uint8_t bi3;
uint8_t bi4;
NetDataStructure netdata;
uint32_t i5;
uint32_t i6;
uint8_t x34;
uint8_t x35;
uint8_t x36;
uint8_t x37;
uint32_t i7;
uint32_t i8;
};
static_assert(sizeof(gamesession_unkstruct64b) == 64, "gamesession_unkstruct64b struct is not 64");
struct gamesession_unkstruct24b
{
uint8_t isValid;
uint8_t b1;
uint8_t b2;
uint8_t b3;
uint32_t x4;
uint64_t xuid;
uint32_t x10;
uint32_t x14;
};
static_assert(sizeof(gamesession_unkstruct24b) == 0x18, "gamesession_unkstruct24b struct is not 24");
struct gameSession
{
uint32_t off_STRgameSession;
uint8_t b1;
uint8_t b2;
uint8_t b3;
uint8_t b4;
hostInfo serverinfo;
uint8_t x3A;
uint8_t x3B;
uint32_t x3C;
uint64_t fakexuid;
uint32_t privClients;
uint32_t totalNumSlots;
uint32_t mask;
uint32_t x54;
gamesession_unkstruct64b x18_64b[18];
uint32_t x4D8;
uint32_t IndexND;
uint32_t x4E0;
uint32_t x4E4;
gamesession_unkstruct24b x18_24b[18];
}; static_assert(sizeof(gameSession) == 0x698, "session struct is not 0x698");
struct snapshot_unkstruct13068
{
uint32_t f0;
uint32_t type;
uint32_t f8;
uint32_t fC;
uint32_t bytemask;
uint32_t f14;
uint32_t f18[78];
uint32_t index;
uint32_t arr[3181];
uint32_t end;
};
struct unkstruct256
{
uint8_t idk[256];
};
struct PlayerInfo_1
{
uint32_t id; // 4
uint32_t team; //0 - ffa, 1 - team1, 2 - team2, 3 - spectator // 8
uint8_t bytes[60]; // 68
uint8_t name[16]; // last byte should be null // 84
uint8_t abytes[4]; // 88
uint32_t level; // value - 1 = level // 92
uint32_t prestige; // 96
uint8_t cbytes[16]; //112
uint32_t emblem; //116
uint32_t _0x0000000B; //120
uint8_t bytez[4]; //124
uint32_t ec_usingTag; // bool value //128
uint32_t ec_usingTitle; // bool value //132
uint8_t ec_Title[24]; //156
uint32_t ec_TitleBg; //160
uint8_t ec_ClanTag[8]; // last byte should be null //168
};
struct cgameGlobstruct_snapshotEntry
{
snapshot_unkstruct13068 snapshot;
uint32_t f330C;
uint32_t f3310;
uint32_t f3314;
uint32_t number_structs256b;
uint32_t number_structs168b;
unkstruct256 x768_256b[768];
PlayerInfo_1 x18_PlayerInfo[18];
uint32_t end;
}; static_assert(sizeof(cgameGlobstruct_snapshotEntry) == 0x33EF4, "cgameGlobstruct_snapshotEntry struct is not 0x33EF4");
struct cgameGlob
{
uint32_t f0;
uint32_t field_4;
uint32_t field_8;
uint32_t field_C;
uint32_t field_10;
uint32_t field_14;
uint32_t field_18;
uint32_t field_1C;
uint32_t field_20;
uint32_t field_24;
uint32_t field_28;
uint32_t field_2C;
uint32_t field_30;
uint32_t field_34[3629];
uint32_t field_38E8;
uint32_t field_38EC;
uint32_t field_38F0[52827];
uint32_t field_3725C;
cgameGlobstruct_snapshotEntry snapshotEntry;
};
static_assert(offsetof(cgameGlob, snapshotEntry) == 0x3725C + 4, "cgameGlob has wrong offset for cgameGlobstruct_snapshotEntry");
namespace DTLS
{
struct InitPacket
{
uint8_t header_high;
uint8_t header_low;
uint32_t unknown;
uint16_t m_initTag;
iw5mp_structs::bdSecurityKeyMap_bdSecurityID bdSecurityID;
}; static_assert(sizeof(InitPacket) == 16, "InitPacket struct is not 16");
struct CookieAck
{
uint16_t m_localTag;
uint16_t localTag;
};
struct InitAck
{
uint8_t header_high;
uint8_t header_low;
uint32_t m_initTag;
uint32_t d_0;
uint32_t d_1;
CookieAck cookie;
uint32_t m_peerTag;
uint16_t _idk;
uint32_t client_ip;
uint16_t client_port;
iw5mp_structs::bdSecurityKeyMap_bdSecurityID bdSecurityID;
};
static_assert(sizeof(InitAck) == 38, "InitAck struct is not 38");
static_assert(offsetof(InitAck, cookie) == 14, "cookie offset is not 14");
struct CookieAckPacket
{
uint8_t header_high;
uint8_t header_low;
CookieAck cookie;
InitAck initack;
playerNetData pND;
iw5mp_structs::bdSecurityKeyMap_bdSecurityID bdSecurityID;
uint8_t ECCkey_exportkey[100];
};
static_assert(sizeof(CookieAckPacket) == 177, "CookieAckPacket struct is not 177");
static_assert(offsetof(CookieAckPacket, ECCkey_exportkey) == 77, "ECCkey_exportkey offset is not 77");
};
#pragma pack(pop)
};