diff --git a/network/CMsgJoinRequest.hpp b/network/CMsgJoinRequest.hpp index 150b809..1702c81 100644 --- a/network/CMsgJoinRequest.hpp +++ b/network/CMsgJoinRequest.hpp @@ -17,9 +17,10 @@ public: std::uint32_t m_dlc_hash; std::uint32_t m_timeout_time; std::uint32_t dword10C; - bool m_no_handle; + bool m_has_gamer_handle; rage::rlGamerHandle m_gamer_handle; CNetGamePlayerDataMsg m_player_data_msg; + uint64_t m_gamer_handle_hash; }; -static_assert(sizeof(CMsgJoinRequest) == 0x190); +static_assert(sizeof(CMsgJoinRequest) == 0x230); #pragma pack(pop) \ No newline at end of file diff --git a/network/CNetGamePlayerDataMsg.hpp b/network/CNetGamePlayerDataMsg.hpp index 29c7ab2..f397e2f 100644 --- a/network/CNetGamePlayerDataMsg.hpp +++ b/network/CNetGamePlayerDataMsg.hpp @@ -2,6 +2,8 @@ #include +#include "PlatformAccountId.hpp" + class datBitBuffer; #pragma pack(push, 8) @@ -25,15 +27,17 @@ class CNetGamePlayerDataMsg : public rage::playerDataMsg { public: int32_t m_account_id; //0x0010 - uint32_t m_player_type; //0x0014 - uint32_t m_matchmaking_group; //0x0018 - uint32_t m_flags; //0x001C - int32_t m_team; //0x0020 - int64_t m_crew_id; //0x0028 - int32_t m_aim_preference; //0x0030 - uint16_t m_rank; //0x0034 - uint16_t m_rating; //0x0036 - uint32_t m_region; //0x0038 -}; //Size: 0x0040 -static_assert(sizeof(CNetGamePlayerDataMsg) == 0x40); + int64_t m_rockstar_id; //0x0018 + PlatformAccountId m_platform_account_id; //0x0020 + uint32_t m_player_type; //0x00B0 + uint32_t m_matchmaking_group; //0x00B4 + uint32_t m_flags; //0x00B8 + int32_t m_team; //0x00BC + int64_t m_crew_id; //0x00C0 + int32_t m_aim_preference; //0x00C8 + uint16_t m_rank; //0x00CC + uint16_t m_rating; //0x00CE + uint32_t m_region; //0x00D0 +}; //Size: 0x00D8 +static_assert(sizeof(CNetGamePlayerDataMsg) == 0xD8); #pragma pack(pop) \ No newline at end of file diff --git a/network/Network.hpp b/network/Network.hpp index e0f2f73..6ba48fc 100644 --- a/network/Network.hpp +++ b/network/Network.hpp @@ -152,10 +152,10 @@ class RemotePlayerData { public: class rage::netGamePlayerData m_data[32]; //0x0000 - uint32_t m_count; //0x0600 - char pad_0604[4]; //0x0604 -}; //Size: 0x0608 -static_assert(sizeof(RemotePlayerData) == 0x608); + uint32_t m_count; //0x1C00 + char pad_0604[4]; //0x1C04 +}; //Size: 0x1C08 +static_assert(sizeof(RemotePlayerData) == 0x1C08); class InvitedGamer { @@ -210,7 +210,7 @@ public: class rage::rlSessionInfo m_unk_session_info; //0xB408 char pad_B4D8[643]; //0xB4D8 bool m_need_host_change; //0xB753 - char pad_B754[76644]; //0xB754 + char pad_B754[76652]; //0xB754 class rage::rlSessionDetail m_joining_session_detail; //0x1D9A0 class SessionInfoBackup m_last_joined_session; //0x1DE18 char pad_1DEF4[40]; //0x1DEF4 @@ -245,7 +245,7 @@ public: char pad_309E0[28]; uint32_t unk_309FC; uint32_t unk_30A00; // added b3407 - char pad_30A04[10468]; + char pad_30A04[10484]; class CNetBlacklist m_blacklist; //0x31050 char pad_32E90[648]; //0x31308 class InvitedGamers m_game_invited_gamers; //0x31310 @@ -288,7 +288,7 @@ public: uint32_t m_follower_count; //0x49EE0 char pad_49EE4[632]; //0x49EE4 - char pad[2492]; + char pad[3252]; }; //Size: 0x38650 -static_assert(sizeof(Network) == 0x4C628); +static_assert(sizeof(Network) == 0x4DFE8); #pragma pack(pop) \ No newline at end of file diff --git a/network/PlatformAccountId.hpp b/network/PlatformAccountId.hpp new file mode 100644 index 0000000..73e77f5 --- /dev/null +++ b/network/PlatformAccountId.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +struct PlatformAccountId +{ + enum Platform : uint8_t + { + PLATFORM_INVALID = 0, + PLATFORM_XBOX = 1, + PLATFORM_STEAM = 10, + PLATFORM_EPIC = 15 + }; + + union + { + uint64_t m_xbox_user_id; //0x0000 + uint64_t m_steam_id; + char m_epic_account_id[128 + 1]; + char m_pad[136]; + }; + + Platform m_platform; //0x0088 +}; +static_assert(sizeof(PlatformAccountId) == 0x90); \ No newline at end of file diff --git a/network/netPlayer.hpp b/network/netPlayer.hpp index 0f66eb7..de0886f 100644 --- a/network/netPlayer.hpp +++ b/network/netPlayer.hpp @@ -2,6 +2,7 @@ #include "../rage/rlGamerInfo.hpp" #include "../player/CNonPhysicalPlayerData.hpp" +#include "PlatformAccountId.hpp" namespace rage { @@ -27,7 +28,7 @@ namespace rage int m_account_id; //0x0008 -- added b3504 int64_t m_rockstar_id; //0x0010 -- added b3504 - char new_0018[0x90]; //0x0018 -- added b3504 + PlatformAccountId m_platform_account_id; //0x0018 -- added b3504 uint32_t m_player_type; //0x00A8 CNonPhysicalPlayerData* m_non_physical_player; //0x00B0 uint32_t m_msg_id; //0x00B8 diff --git a/network/snSession.hpp b/network/snSession.hpp index aa580f1..4b2e58e 100644 --- a/network/snSession.hpp +++ b/network/snSession.hpp @@ -99,24 +99,31 @@ namespace rage char pad_37C8[168]; //0x37C8 }; //Size: 0x3870 static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x43B0); +#pragma pack(pop) +#pragma pack(push, 8) class netGamePlayerData { public: - class rlGamerHandle m_handle; - bool m_is_activity_spectator; //0x0010 - char pad_0011[7]; //0x0011 - uint64_t m_crew_id; //0x0018 - uint16_t m_rank; //0x0020 - uint16_t m_debug_unk; //0x0022 - char pad_0024[4]; //0x0024 - uint32_t m_nat_type; //0x0028 - bool m_is_rockstar_dev; //0x002C - char pad_002D[3]; //0x002D - }; //Size: 0x0030 - static_assert(sizeof(rage::netGamePlayerData) == 0x30); - + class rlGamerHandle m_handle; //0x0000 + char m_name[17]; //0x0010 + bool m_is_activity_spectator; //0x0021 + uint64_t m_crew_id; //0x0028 + uint16_t m_rank; //0x0030 + uint16_t m_rating; //0x0032 + bool unk_0034; //0x0034 + uint32_t m_nat_type; //0x0038 + bool m_is_rockstar_dev; //0x003C + bool unk_003D; //0x003D + bool m_is_boss; //0x003E + int m_account_id; //0x0040 + int64_t m_rockstar_id; //0x0048 + PlatformAccountId m_platform_account_id; //0x0050 + }; //Size: 0x00E0 + static_assert(sizeof(rage::netGamePlayerData) == 0xE0); +#pragma pack(pop) +#pragma pack(push, 1) class snSession { public: