Update to 1.67 (#117)

This commit is contained in:
maybegreat48 2023-06-14 20:16:19 +00:00 committed by GitHub
parent 14adf08cac
commit 9d951d0e32
15 changed files with 1862 additions and 1857 deletions

View File

@ -9,25 +9,25 @@ public:
class rage::rlGamerInfo m_gamer_info; //0x0000 class rage::rlGamerInfo m_gamer_info; //0x0000
char pad_0098[40]; //0x00F8 char pad_0098[40]; //0x00F8
}; //Size: 0x00C0 }; //Size: 0x00C0
static_assert(sizeof(CVoiceConnection) == 0x120); static_assert(sizeof(CVoiceConnection) == 0x118);
class CVoice class CVoice
{ {
public: public:
class CVoiceConnection m_connection_storage[32]; //0x0000 class CVoiceConnection m_connection_storage[32]; //0x0000
char pad_1800[8]; //0x1800 char pad_2300[8]; //0x2300
class CVoiceConnection* m_connections[32]; //0x1808 class CVoiceConnection* m_connections[32]; //0x2308
uint32_t m_connection_count; //0x1908 uint32_t m_connection_count; //0x2408
char pad_190C[3508]; //0x190C char pad_240C[3508]; //0x240C
}; //Size: 0x1978 }; //Size: 0x31C0
static_assert(sizeof(CVoice) == 0x32C0); static_assert(sizeof(CVoice) == 0x31C0);
class CCommunications class CCommunications
{ {
public: public:
char pad_0000[48]; //0x0000 char pad_0000[48]; //0x0000
class CVoice m_voice; //0x0030 class CVoice m_voice; //0x0030
char pad_26F0[280300]; //0x26F0 char pad_31F0[280300]; //0x31F0
}; //Size: 0x46DE4 }; //Size: 0x478DC
static_assert(sizeof(CCommunications) == 0x479DC); static_assert(sizeof(CCommunications) == 0x478DC);
#pragma pack(pop) #pragma pack(pop)

View File

@ -4,67 +4,67 @@
class CNetRemoteComplaint class CNetRemoteComplaint
{ {
public: public:
uint64_t m_complainer_token; //0x0000 uint64_t m_complainer_token; //0x0000
uint64_t m_complainee_token; //0x0008 uint64_t m_complainee_token; //0x0008
uint32_t m_flags; //0x0010 uint32_t m_flags; //0x0010
uint32_t m_time; //0x0014 uint32_t m_time; //0x0014
}; //Size: 0x0018 }; //Size: 0x0018
static_assert(sizeof(CNetRemoteComplaint) == 0x18); static_assert(sizeof(CNetRemoteComplaint) == 0x18);
class CNetComplaintMgr class CNetComplaintMgr
{ {
public: public:
uint64_t m_host_token; //0x0000 uint64_t m_host_token; //0x0000
uint32_t m_host_peer_id; //0x0008 uint32_t m_host_peer_id; //0x0008
char pad_000C[4]; //0x000C char pad_000C[4]; //0x000C
void* m_net_connection_mgr; //0x0010 void* m_net_connection_mgr; //0x0010
char pad_0018[64]; //0x0018 char pad_0018[64]; //0x0018
uint64_t m_host_tokens_in_scope[64]; //0x0058 class rage::rlGamerHandle m_handles_in_scope[64]; //0x0058
uint32_t m_num_tokens_in_scope; //0x0258 uint32_t m_num_handles_in_scope; //0x0458
char pad_025C[4]; //0x025C char pad_045C[4]; //0x045C
class CNetRemoteComplaint m_remote_complaints[64]; //0x0260 class CNetRemoteComplaint m_remote_complaints[64]; //0x0460
uint32_t m_num_remote_complaints; //0x0860 uint32_t m_num_remote_complaints; //0x0A60
char pad_0864[4]; //0x0864 char pad_0A64[4]; //0x0A64
uint64_t m_host_tokens_complained[64]; //0x0868 uint64_t m_host_tokens_complained[64]; //0x0A68
uint32_t m_num_tokens_complained; //0x0A68 uint32_t m_num_tokens_complained; //0x0C68
char pad_0A6C[520]; //0x0A6C char pad_0C6C[520]; //0x0C6C
uint32_t m_connection_identifier; //0x0C74 uint32_t m_connection_identifier; //0x0E74
uint32_t m_last_resend_time; //0x0C78 uint32_t m_last_resend_time; //0x0E78
char pad_0C7C[4]; //0x0C7C char pad_0E7C[4]; //0x0E7C
uint32_t m_time_to_resend; //0x0C80 uint32_t m_time_to_resend; //0x0E80
uint32_t m_flags; //0x0C84 uint32_t m_flags; //0x0E84
char pad_0C88[16]; //0x0C88 char pad_0E88[16]; //0x0E88
inline bool has_local_complaint(uint64_t host_token) inline bool has_local_complaint(uint64_t host_token)
{ {
for (std::uint32_t i = 0; i < m_num_tokens_complained; i++) for (std::uint32_t i = 0; i < m_num_tokens_complained; i++)
if (m_host_tokens_complained[i] == host_token) if (m_host_tokens_complained[i] == host_token)
return true; return true;
return false; return false;
} }
inline void raise_complaint(uint64_t host_token) inline void raise_complaint(uint64_t host_token)
{ {
if (has_local_complaint(host_token)) if (has_local_complaint(host_token))
return; return;
m_host_tokens_complained[m_num_tokens_complained++] = host_token; m_host_tokens_complained[m_num_tokens_complained++] = host_token;
// big::g_pointers->m_raise_network_complaint(this, host_token); // big::g_pointers->m_raise_network_complaint(this, host_token);
} }
inline void remove_complaint(uint64_t host_token) inline void remove_complaint(uint64_t host_token)
{ {
if (!has_local_complaint(host_token)) if (!has_local_complaint(host_token))
return; return;
for (std::uint32_t i = 0; i < m_num_tokens_complained; i++) for (std::uint32_t i = 0; i < m_num_tokens_complained; i++)
if (m_host_tokens_complained[i] == host_token) if (m_host_tokens_complained[i] == host_token)
m_host_tokens_complained[i] = m_host_tokens_complained[m_num_tokens_complained - 1]; m_host_tokens_complained[i] = m_host_tokens_complained[m_num_tokens_complained - 1];
m_num_tokens_complained--; m_num_tokens_complained--;
} }
}; //Size: 0x0C98 }; //Size: 0x0C98
static_assert(sizeof(CNetComplaintMgr) == 0xC98); static_assert(sizeof(CNetComplaintMgr) == 0xE98);

View File

@ -10,25 +10,25 @@
class CNetworkPlayerMgr : public rage::netPlayerMgrBase class CNetworkPlayerMgr : public rage::netPlayerMgrBase
{ {
public: public:
CNetGamePlayer m_net_players[32]; //0x08E0 CNetGamePlayer m_net_players[32]; //0x08E0
uint64_t unk_60E0; //0x60E0 uint64_t unk_60E0; //0x60E0
uint64_t unk_60E8; //0x60E8 uint64_t unk_60E8; //0x60E8
uint64_t unk_60F0; //0x60F0 uint64_t unk_60F0; //0x60F0
uint64_t unk_60F8; //0x60F8 uint64_t unk_60F8; //0x60F8
CNetGamePlayer m_net_players_2[32]; //0x6100 CNetGamePlayer m_net_players_2[32]; //0x6100
uint64_t unk_B900; //0xB900 uint64_t unk_B900; //0xB900
uint64_t unk_B908; //0xB908 uint64_t unk_B908; //0xB908
uint64_t unk_B910; //0xB910 uint64_t unk_B910; //0xB910
uint64_t unk_B918; //0xB918 uint64_t unk_B918; //0xB918
uint64_t unk_B920; //0xB920 uint64_t unk_B920; //0xB920
uint64_t unk_B928; //0xB928 uint64_t unk_B928; //0xB928
uint64_t unk_B930; //0xB930 uint64_t unk_B930; //0xB930
uint32_t unk_B938; //0xB938 uint32_t unk_B938; //0xB938
char pad_B93C[3]; //0xB93C char pad_B93C[3]; //0xB93C
bool unk_B93F; //0xB93F bool unk_B93F; //0xB93F
uint32_t unk_B940; //0xB940 uint32_t unk_B940; //0xB940
uint32_t unk_B944; //0xB944 uint32_t unk_B944; //0xB944
uint16_t unk_B948; //0xB948 uint16_t unk_B948; //0xB948
}; //Size: 0xB94A }; //Size: 0xB94A
static_assert(sizeof(CNetworkPlayerMgr) == 0xD14A); static_assert(sizeof(CNetworkPlayerMgr) == 0xD152);
#pragma pack(pop) #pragma pack(pop)

View File

@ -10,276 +10,279 @@
class MetricSessionMigrated : public rage::rlMetric class MetricSessionMigrated : public rage::rlMetric
{ {
public: public:
char pad_0008[828]; //0x0008 char pad_0008[828]; //0x0008
uint32_t m_num_players; //0x0344 uint32_t m_num_players; //0x0344
}; //Size: 0x0348 }; //Size: 0x0348
static_assert(sizeof(MetricSessionMigrated) == 0x348); static_assert(sizeof(MetricSessionMigrated) == 0x348);
class NetworkGameConfig class NetworkGameConfig
{ {
public: public:
char pad_0000[48]; //0x0000 char pad_0000[48]; //0x0000
uint32_t m_public_slots; //0x0030 uint32_t m_public_slots; //0x0030
uint32_t m_private_slots; //0x0034 uint32_t m_private_slots; //0x0034
char pad_0038[272]; //0x0038 char pad_0038[272]; //0x0038
}; //Size: 0x0148 }; //Size: 0x0148
static_assert(sizeof(NetworkGameConfig) == 0x148); static_assert(sizeof(NetworkGameConfig) == 0x148);
class NetworkGameFilterMatchmakingComponent class NetworkGameFilterMatchmakingComponent
{ {
public: public:
// do not use for actual network filters, this will break things // do not use for actual network filters, this will break things
inline void SetParameter(const char* name, int index, int value) inline void SetParameter(const char* name, int index, int value)
{ {
std::strcpy(m_param_names[index], name); std::strcpy(m_param_names[index], name);
m_param_mappings[index] = index; m_param_mappings[index] = index;
m_param_values[index] = value; m_param_values[index] = value;
m_enabled_params_bitset |= (1 << index); m_enabled_params_bitset |= (1 << index);
if (m_num_parameters <= (uint32_t)index) if (m_num_parameters <= (uint32_t)index)
m_num_parameters++; m_num_parameters++;
} }
uint32_t m_filter_type; //0x0000 uint32_t m_filter_type; //0x0000
char m_filter_name[24]; //0x0004 char m_filter_name[24]; //0x0004
uint32_t m_num_parameters; //0x001C uint32_t m_num_parameters; //0x001C
uint16_t m_game_mode; //0x0020 uint16_t m_game_mode; //0x0020
uint16_t m_session_type; //0x0022 uint16_t m_session_type; //0x0022
uint32_t m_param_unk[8]; //0x0024 uint32_t m_param_unk[8]; //0x0024
char m_param_names[8][24]; //0x0044 char m_param_names[8][24]; //0x0044
char pad_0104[4]; //0x0104 char pad_0104[4]; //0x0104
uint32_t m_param_mappings[8]; //0x0108 uint32_t m_param_mappings[8]; //0x0108
char pad_0128[352]; //0x0128 char pad_0128[352]; //0x0128
uint32_t m_param_values[8]; //0x0288 uint32_t m_param_values[8]; //0x0288
char pad_02A8[96]; //0x02A8 char pad_02A8[96]; //0x02A8
uint32_t m_enabled_params_bitset; //0x0308 uint32_t m_enabled_params_bitset; //0x0308
char pad_030C[8]; //0x030C char pad_030C[8]; //0x030C
}; //Size: 0x0314 }; //Size: 0x0314
static_assert(sizeof(NetworkGameFilterMatchmakingComponent) == 0x314); static_assert(sizeof(NetworkGameFilterMatchmakingComponent) == 0x314);
class MatchmakingAttributes class MatchmakingAttributes
{ {
public: public:
uint32_t m_game_mode; //0x0000 uint32_t m_game_mode; //0x0000
uint32_t m_num_params; //0x0004 uint32_t m_num_params; //0x0004
uint32_t m_param_unk[8]; //0x0008 uint32_t m_param_unk[8]; //0x0008
char m_param_names[8][24]; //0x0028 char m_param_names[8][24]; //0x0028
uint32_t m_param_values[8]; //0x00E8 uint32_t m_param_values[8]; //0x00E8
uint32_t m_params_bitset; //0x0108 uint32_t m_params_bitset; //0x0108
}; //Size: 0x010C }; //Size: 0x010C
static_assert(sizeof(MatchmakingAttributes) == 0x10C); static_assert(sizeof(MatchmakingAttributes) == 0x10C);
class NetworkGameFilter class NetworkGameFilter
{ {
public: public:
virtual ~NetworkGameFilter() = default; virtual ~NetworkGameFilter() = default;
virtual void Reset() {}; virtual void Reset() {};
uint32_t m_build_type; //0x0008 uint32_t m_build_type; //0x0008
uint32_t m_discriminator; //0x000C uint32_t m_discriminator; //0x000C
uint32_t m_discriminator_mapping; //0x0010 uint32_t m_discriminator_mapping; //0x0010
uint32_t m_region_mapping; //0x0014 uint32_t m_region_mapping; //0x0014
uint32_t m_language_mapping; //0x0018 uint32_t m_language_mapping; //0x0018
uint32_t m_mm_group_1_mapping; //0x001C uint32_t m_mm_group_1_mapping; //0x001C
uint32_t m_mm_group_2_mapping; //0x0020 uint32_t m_mm_group_2_mapping; //0x0020
uint32_t m_activity_type_mapping; //0x0024 uint32_t m_activity_type_mapping; //0x0024
uint32_t m_activity_id_mapping; //0x0028 uint32_t m_activity_id_mapping; //0x0028
uint32_t m_activity_players_mapping; //0x002C uint32_t m_activity_players_mapping; //0x002C
class NetworkGameFilterMatchmakingComponent m_matchmaking_component; //0x0030 class NetworkGameFilterMatchmakingComponent m_matchmaking_component; //0x0030
}; //Size: 0x0344 }; //Size: 0x0344
static_assert(sizeof(NetworkGameFilter) == 0x344); static_assert(sizeof(NetworkGameFilter) == 0x344);
class SessionInfoBackup class SessionInfoBackup
{ {
public: public:
class rage::rlSessionInfo m_session_info; class rage::rlSessionInfo m_session_info;
uint32_t m_unk; //0x0070 uint32_t m_unk; //0x0070
char pad_0074[4]; //0x0074 char pad_0074[4]; //0x0074
uint32_t m_flags; //0x0078 uint32_t m_flags; //0x0078
}; //Size: 0x007C }; //Size: 0x007C
static_assert(sizeof(SessionInfoBackup) == 0xDC); static_assert(sizeof(SessionInfoBackup) == 0xDC);
class MatchmakingSessionResult class MatchmakingSessionResult
{ {
public: public:
class rage::rlSessionDetail m_detail; class rage::rlSessionDetail m_detail;
char pad_03B8[24]; //0x03B8 char pad_03B8[24]; //0x03B8
}; //Size: 0x03D0 }; //Size: 0x03D0
static_assert(sizeof(MatchmakingSessionResult) == 0x490); static_assert(sizeof(MatchmakingSessionResult) == 0x490);
class PlayerNameMapNode class PlayerNameMapNode
{ {
public: public:
char m_name[24]; //0x0000 char m_name[16]; //0x0000
class rage::rlGamerHandle m_handle; //0x0018 class rage::rlGamerHandle m_handle; //0x0010
class PlayerNameMapNode* m_next; //0x0028 class PlayerNameMapNode* m_next; //0x0020
class PlayerNameMapNode* m_prev; //0x0030 class PlayerNameMapNode* m_prev; //0x0028
}; //Size: 0x0038 }; //Size: 0x0030
static_assert(sizeof(PlayerNameMapNode) == 0x38); static_assert(sizeof(PlayerNameMapNode) == 0x30);
class JoiningPlayerNameMap class JoiningPlayerNameMap
{ {
public: public:
class PlayerNameMapNode m_names[100]; //0x0000 class PlayerNameMapNode m_names[100]; //0x0000
char pad_15E0[40]; //0x15E0 char pad_12C0[40]; //0x12C0
uint32_t m_num_name_nodes; //0x1608 uint32_t m_num_name_nodes; //0x12E8
char pad_160C[796]; //0x160C char pad_12EC[796]; //0x12EC
}; //Size: 0x1928 }; //Size: 0x1608
static_assert(sizeof(JoiningPlayerNameMap) == 0x1928); static_assert(sizeof(JoiningPlayerNameMap) == 0x1608);
class CNetBlacklistNode class CNetBlacklistNode
{ {
public: public:
class rage::rlGamerHandle m_handle; //0x0000 class rage::rlGamerHandle m_handle; //0x0000
bool m_block_rejoin; //0x0010 bool m_block_rejoin; //0x0010
char pad_0011[3]; //0x0011 char pad_0011[3]; //0x0011
uint32_t m_added_time; //0x0014 uint32_t m_added_time; //0x0014
class CNetBlacklistNode* m_next; //0x0018 class CNetBlacklistNode* m_next; //0x0018
class CNetBlacklistNode* m_prev; //0x0020 class CNetBlacklistNode* m_prev; //0x0020
}; //Size: 0x0028 }; //Size: 0x0028
static_assert(sizeof(CNetBlacklistNode) == 0x28); static_assert(sizeof(CNetBlacklistNode) == 0x28);
class CNetBlacklist class CNetBlacklist
{ {
public: public:
class CNetBlacklistNode m_nodes[16]; //0x0000 class CNetBlacklistNode m_nodes[16]; //0x0000
class CNetBlacklistNode* m_head; //0x0280 class CNetBlacklistNode* m_head; //0x0280
class CNetBlacklistNode* m_tail; //0x0288 class CNetBlacklistNode* m_tail; //0x0288
uint32_t m_free_nodes; //0x0290 uint32_t m_free_nodes; //0x0290
char pad_0294[4]; //0x0294 char pad_0294[4]; //0x0294
class CNetBlacklistNode* m_start; //0x0298 class CNetBlacklistNode* m_start; //0x0298
char pad_02A0[24]; //0x02A0 char pad_02A0[24]; //0x02A0
}; //Size: 0x02B8 }; //Size: 0x02B8
static_assert(sizeof(CNetBlacklist) == 0x2B8); static_assert(sizeof(CNetBlacklist) == 0x2B8);
class RemotePlayerData class RemotePlayerData
{ {
public: public:
class rage::netGamePlayerData m_data[32]; //0x0000 class rage::netGamePlayerData m_data[32]; //0x0000
uint32_t m_count; //0x0600 uint32_t m_count; //0x0600
char pad_0604[4]; //0x0604 char pad_0604[4]; //0x0604
}; //Size: 0x0608 }; //Size: 0x0608
static_assert(sizeof(RemotePlayerData) == 0x608); static_assert(sizeof(RemotePlayerData) == 0x608);
class InvitedGamer class InvitedGamer
{ {
public: public:
class rage::rlGamerHandle m_handle; class rage::rlGamerHandle m_handle;
char pad_0010[12]; //0x0010 char pad_0010[12]; //0x0010
uint32_t m_flags; //0x001C uint32_t m_flags; //0x001C
}; //Size: 0x0020 }; //Size: 0x0020
static_assert(sizeof(InvitedGamer) == 0x20); static_assert(sizeof(InvitedGamer) == 0x20);
class InvitedGamers class InvitedGamers
{ {
public: public:
class InvitedGamer m_invited_gamers[100]; //0x0000 class InvitedGamer m_invited_gamers[100]; //0x0000
uint32_t m_num_invited_gamers; //0x0C80 uint32_t m_num_invited_gamers; //0x0C80
char pad_0C84[4]; //0x0C84 char pad_0C84[4]; //0x0C84
}; //Size: 0x0C88 }; //Size: 0x0C88
static_assert(sizeof(InvitedGamers) == 0xC88); static_assert(sizeof(InvitedGamers) == 0xC88);
class Network class Network
{ {
public: public:
rage::rlSessionInfo m_steam_unk_session; //0x0000 rage::rlSessionInfo m_steam_unk_session; //0x0000
rage::Obf32 m_num_dinput8_instances; //0x0070 rage::Obf32 m_num_dinput8_instances; //0x0070
rage::Obf32 m_last_time_dinput8_checked; //0x0080 rage::Obf32 m_last_time_dinput8_checked; //0x0080
class rage::snSession* m_game_session_ptr; //0x0090 class rage::snSession m_game_session; //0x00F0
class rage::snSession* m_transition_session_ptr; //0x0098 class rage::snSession m_transition_session; //0x5578
char pad_00A0[24]; //0x00A0 char pad_AA00[16]; //0xAA00
class rage::snSession m_game_session; //0x00B8 class rage::snSession* m_game_session_ptr_2; //0xAA10
class rage::snSession m_transition_session; //0x3F28 class rage::snSession* m_transition_session_ptr_2; //0xAA18
char pad_7D98[16]; //0x7D98 char pad_AA20[16]; //0xAA20
class NetworkGameConfig m_network_game_config; //0xAC48 class rage::snSession* m_game_session_ptr; //0xAA30
class NetworkGameConfig m_network_transition_config; //0xAD90 class rage::snSession* m_transition_session_ptr; //0xAA38
bool m_session_attributes_dirty; //0xAED8 char pad_AA40[24]; //0xAA40
char pad_AED9[19]; //0xAED9 class NetworkGameConfig m_network_game_config; //0xAA58
uint32_t m_session_visibility_flags; //0xAEEC class NetworkGameConfig m_network_transition_config; //0xABA0
uint32_t m_transition_visibility_flags; //0xAEF0 bool m_session_attributes_dirty; //0xACE8
char pad_AEF4[60]; //0xAEF4 char pad_ACE9[19]; //0xACE9
class MetricSessionMigrated m_metric_session_migrated; //0xAF30 uint32_t m_session_visibility_flags; //0xACFC
bool m_migrated_metric_enabled; //0xB278 uint32_t m_transition_visibility_flags; //0xAD00
char pad_B279[3]; //0xB279 char pad_AD04[68]; //0xAD04
uint32_t m_game_session_state; //0xB27C class MetricSessionMigrated m_metric_session_migrated; //0xAD48
class NetworkGameFilter m_network_game_filter; //0xB280 bool m_migrated_metric_enabled; //0xB090
char pad_B5C4[33]; //0xB5C4 char pad_B091[3]; //0xB091
bool m_was_invited; //0xB5E5 uint32_t m_game_session_state; //0xB094
char pad_B5E6[10]; //0xB5E6 class NetworkGameFilter m_network_game_filter; //0xB098
class rage::rlSessionInfo m_unk_session_info; //0xB5F0 char pad_B3DC[33]; //0xB3DC
char pad_B6C0[635]; //0xB6C0 bool m_was_invited; //0xB3FD
bool m_need_host_change; //0xB93B char pad_B3FE[10]; //0xB3FE
char pad_B93C[2628]; //0xB93C class rage::rlSessionInfo m_unk_session_info; //0xB408
class rage::rlSessionDetail m_joining_session_detail; //0xC380 char pad_B4D8[635]; //0xB4D8
class SessionInfoBackup m_last_joined_session; //0xC7F8 bool m_need_host_change; //0xB753
char pad_C8D4[40]; //0xC8D4 char pad_B754[74316]; //0xB754
uint32_t m_current_matchmaking_group; //0xC8FC class rage::rlSessionDetail m_joining_session_detail; //0x1D9A0
uint32_t m_matchmaking_group_max_players[5]; //0xC900 class SessionInfoBackup m_last_joined_session; //0x1DE18
uint32_t m_num_active_matchmaking_groups; //0xC914 char pad_1DEF4[40]; //0x1DEF4
char pad_C918[8]; //0xC918 uint32_t m_current_matchmaking_group; //0x1DF1C
uint8_t m_matchmaking_property_id; //0xC920 uint32_t m_matchmaking_group_max_players[5]; //0x1DF20
uint8_t m_matchmaking_mental_state; //0xC921 uint32_t m_num_active_matchmaking_groups; //0x1DF34
char pad_C922[366]; //0xC922 char pad_1DF38[8]; //0x1DF38
class rage::rlMatchmakingFindResult m_game_session_matchmaking[3]; //0xCA90 uint8_t m_matchmaking_property_id; //0x1DF40
char pad_195A0[40]; //0x195A0 uint8_t m_matchmaking_mental_state; //0x1DF41
class MatchmakingSessionResult m_game_matchmaking_session_results[10]; //0x195C8 char pad_1DF42[366]; //0x1DF42
char pad_1C368[308]; //0x1C368 class rage::rlMatchmakingFindResult m_game_session_matchmaking[3]; //0x1E0B0
uint32_t m_num_bosses; //0x1C49C char pad_2ABC0[40]; //0x2ABC0
bool m_num_bosses_set; //0x1C4A0 class MatchmakingSessionResult m_game_matchmaking_session_results[10]; //0x2ABE8
char pad_1C4A1[7]; //0x1C4A1 char pad_2D988[308]; //0x2D988
class rage::rlGamerHandle m_transition_creator_handle; //0x1C4A8 uint32_t m_num_bosses; //0x2DABC
char pad_1C4B8[12]; //0x1C4B8 bool m_num_bosses_set; //0x2DAC0
bool m_is_waiting_async; //0x1C4C4 char pad_2DAC1[7]; //0x2DAC1
bool m_is_preferred_activity; //0x1C4C5 class rage::rlGamerHandle m_transition_creator_handle; //0x2DAC8
char pad_1C4C6[2]; //0x1C4C6 char pad_2DAD8[12]; //0x2DAD8
uint32_t m_in_progress_finish_time; //0x1C4C8 bool m_is_waiting_async; //0x2DAE4
char pad_1C4CC[4]; //0x1C4CC bool m_is_preferred_activity; //0x2DAE5
bool m_local_player_info_dirty; //0x1C4D0 char pad_2DAE6[2]; //0x2DAE6
char pad_1C4D1[495]; //0x1C4D1 uint32_t m_in_progress_finish_time; //0x2DAE8
class rage::rlGamerHandle m_inviter_handle; //0x1C6C0 char pad_2DAEC[4]; //0x2DAEC
class CNetComplaintMgr m_game_complaint_mgr; //0x1C6D0 bool m_local_player_info_dirty; //0x2DAF0
class CNetComplaintMgr m_transition_complaint_mgr; //0x1D368 char pad_2DAF1[495]; //0x2DAF1
char pad_1E000[32]; //0x1E000 class rage::rlGamerHandle m_inviter_handle; //0x2DCE0
class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x1E020 class CNetComplaintMgr m_game_complaint_mgr; //0x2DCF0
char pad_1F948[8]; //0x1F948 class CNetComplaintMgr m_transition_complaint_mgr; //0x2EB88
class CNetBlacklist m_blacklist; //0x1F950 char pad_2FA20[32]; //0x2FA20
char pad_1FC08[8]; //0x1FC08 class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x2FA40
class InvitedGamers m_game_invited_gamers; //0x1FC10 char pad_31048[8]; //0x31048
char pad_20898[4864]; //0x20898 class CNetBlacklist m_blacklist; //0x31050
class SessionInfoBackup m_last_joined_transition; //0x21B98 char pad_31308[8]; //0x31308
uint32_t m_activity_max_players; //0x21C74 class InvitedGamers m_game_invited_gamers; //0x31310
uint32_t m_activity_max_spectators; //0x21C78 char pad_31F98[5888]; //0x31F98
char pad_21C7C[48]; //0x21C7C class SessionInfoBackup m_last_joined_transition; //0x33698
bool m_do_not_launch_from_join_as_migrated_host; //0x21CAC uint32_t m_activity_max_players; //0x33774
char pad_21CAD[7]; //0x21CAD uint32_t m_activity_max_spectators; //0x33778
bool m_is_activity_session; //0x21CB4 char pad_3377C[48]; //0x3377C
char pad_21CB5[35]; //0x21CB5 bool m_do_not_launch_from_join_as_migrated_host; //0x337AC
class RemotePlayerData m_remote_player_data; //0x21CD8 char pad_337AD[7]; //0x337AD
char pad_222E0[8]; //0x222E0 bool m_is_activity_session; //0x337B4
class rage::netGamePlayerData m_local_net_game_player_data; //0x222E8 char pad_337B5[35]; //0x337B5
char pad_22318[608]; //0x22318 class RemotePlayerData m_remote_player_data; //0x337D8
class rage::rlMatchmakingFindResult m_transition_matchmaking[4]; //0x22578 char pad_33DE0[8]; //0x33DE0
class NetworkGameFilter m_transition_filters[4]; //0x33438 class rage::netGamePlayerData m_local_net_game_player_data; //0x33DE8
char pad_34148[20]; //0x34148 char pad_33E18[608]; //0x33E18
uint32_t m_transition_quickmatch_group_handle_count; //0x3415C class rage::rlMatchmakingFindResult m_transition_matchmaking[4]; //0x34078
class rage::rlGamerHandle m_transition_quickmatch_group_handles[32]; //0x34160 class NetworkGameFilter m_transition_filters[4]; //0x44F38
bool m_retain_activity_group; //0x34360 char pad_45C48[20]; //0x45C48
char pad_34361[7]; //0x34361 uint32_t m_transition_quickmatch_group_handle_count; //0x45C5C
class rage::rlSessionInfo m_transition_to_activity_session_info; //0x34368 class rage::rlGamerHandle m_transition_quickmatch_group_handles[32]; //0x45C60
char pad_34438[48]; //0x34438 bool m_retain_activity_group; //0x45E60
class MatchmakingSessionResult m_transition_matchmaking_session_results[10]; //0x34468 char pad_45E61[7]; //0x45E61
char pad_37208[8]; //0x37208 class rage::rlSessionInfo m_transition_to_activity_session_info; //0x45E68
class InvitedGamers m_transition_invited_gamers; //0x37210 char pad_45F38[48]; //0x45F38
char pad_37E98[16]; //0x37E98 class MatchmakingSessionResult m_transition_matchmaking_session_results[10]; //0x45F68
class rage::rlGamerHandle m_transition_to_game_handle; //0x37EA8 char pad_48D08[8]; //0x48D08
class rage::rlSessionInfo m_transition_to_game_session_info; //0x37EB8 class InvitedGamers m_transition_invited_gamers; //0x48D10
char pad_37F88[4]; //0x37F88 char pad_49998[16]; //0x49998
uint32_t m_transition_to_game_session_participant_count; //0x37F8C class rage::rlGamerHandle m_transition_to_game_handle; //0x499A8
class rage::rlGamerHandle m_transition_to_game_session_participants[32]; //0x37F90 class rage::rlSessionInfo m_transition_to_game_session_info; //0x499B8
char pad_38190[72]; //0x38190 char pad_49A88[4]; //0x49A88
class rage::rlGamerHandle m_follower_handles[32]; //0x381D8 uint32_t m_transition_to_game_session_participant_count; //0x49A8C
uint32_t m_follower_count; //0x383D8 class rage::rlGamerHandle m_transition_to_game_session_participants[32]; //0x49A90
char pad_383DC[628]; //0x383DC char pad_49C90[80]; //0x49C90
class rage::rlGamerHandle m_follower_handles[32]; //0x49CE0
uint32_t m_follower_count; //0x49EE0
char pad_49EE4[628]; //0x49EE4
}; //Size: 0x38650 }; //Size: 0x38650
static_assert(sizeof(Network) == 0x38650); static_assert(sizeof(Network) == 0x4A158);
#pragma pack(pop) #pragma pack(pop)

View File

@ -31,5 +31,5 @@ public:
uint32_t m_num_handles; //0x02C8 uint32_t m_num_handles; //0x02C8
class rage::rlGamerHandle m_handles[32]; //0x02D0 class rage::rlGamerHandle m_handles[32]; //0x02D0
}; //Size: 0x04D0 }; //Size: 0x04D0
static_assert(sizeof(RemoteGamerInfoMsg) == 0x530); static_assert(sizeof(RemoteGamerInfoMsg) == 0x528);
#pragma pack(pop) #pragma pack(pop)

View File

@ -9,29 +9,29 @@
namespace rage namespace rage
{ {
#pragma pack(push, 8) #pragma pack(push, 8)
class netPlayerMgrBase class netPlayerMgrBase
{ {
public: public:
virtual ~netPlayerMgrBase() = default; virtual ~netPlayerMgrBase() = default;
virtual void Initialize() = 0; virtual void Initialize() = 0;
virtual void Shutdown() = 0; virtual void Shutdown() = 0;
virtual void unk_0x18() = 0; virtual void unk_0x18() = 0;
virtual CNetGamePlayer* AddPlayer_raw(rage::rlGamerInfo* gamer_info, uint32_t a2, CNetGamePlayerDataMsg* player_data, CNonPhysicalPlayerData* non_physical_player_data) = 0; virtual CNetGamePlayer* AddPlayer_raw(rage::rlGamerInfo* gamer_info, uint32_t a2, CNetGamePlayerDataMsg* player_data, CNonPhysicalPlayerData* non_physical_player_data) = 0;
virtual void RemovePlayer(CNetGamePlayer* net_game_player) = 0; virtual void RemovePlayer(CNetGamePlayer* net_game_player) = 0;
virtual void UpdatePlayerListsForPlayer(CNetGamePlayer* net_game_player) = 0; virtual void UpdatePlayerListsForPlayer(CNetGamePlayer* net_game_player) = 0;
virtual CNetGamePlayer* AddPlayer(rage::rlGamerInfo* gamer_info, uint32_t a3, CNetGamePlayerDataMsg* player_data, CNonPhysicalPlayerData* non_physical_player_data) = 0; virtual CNetGamePlayer* AddPlayer(rage::rlGamerInfo* gamer_info, uint32_t a3, CNetGamePlayerDataMsg* player_data, CNonPhysicalPlayerData* non_physical_player_data) = 0;
char pad_0008[8]; //0x0008 char pad_0008[8]; //0x0008
uint64_t *m_network_bandwidth_manager; //0x0010 uint64_t* m_network_bandwidth_manager; //0x0010
char pad_0018[208]; //0x0018 char pad_0018[216]; //0x0018
CNetGamePlayer *m_local_net_player; //0x00E8 CNetGamePlayer* m_local_net_player; //0x00E8
char pad_00F0[144]; //0x00F0 char pad_00F0[144]; //0x00F0
CNetGamePlayer *m_player_list[32]; //0x0180 CNetGamePlayer* m_player_list[32]; //0x0180
uint16_t m_player_limit; //0x0280 uint16_t m_player_limit; //0x0280
char pad_0282[10]; //0x0282 char pad_0282[10]; //0x0282
uint16_t m_player_count; //0x028C uint16_t m_player_count; //0x028C
char pad_0290[1618]; //0x0290 char pad_0290[1618]; //0x0290
}; //Size: 0x08E0 }; //Size: 0x08E0
static_assert(sizeof(netPlayerMgrBase) == 0x8E0); static_assert(sizeof(netPlayerMgrBase) == 0x8E8);
#pragma pack(pop) #pragma pack(pop)
} }

View File

@ -6,188 +6,190 @@
#pragma pack(push, 1) #pragma pack(push, 1)
namespace rage namespace rage
{ {
class netConnectionManager; class netConnectionManager;
class sysMemAllocator; class sysMemAllocator;
class snPlayer class snPlayer
{ {
public: public:
uint64_t m_msg_id; //0x0000 uint64_t m_msg_id; //0x0000
class rage::rlGamerInfo m_player_data; //0x0008 class rage::rlGamerInfo m_player_data; //0x0008
}; //Size: 0x00A0 char pad_00F8[8]; //0x00F8
static_assert(sizeof(rage::snPlayer) == 0x100); }; //Size: 0x0100
static_assert(sizeof(rage::snPlayer) == 0x100);
class snPeer class snPeer
{ {
public: public:
class rage::rlGamerInfo m_peer_data; //0x0000 class rage::rlGamerInfo m_peer_data; //0x0000
char pad_0098[40]; //0x0098 char pad_0098[40]; //0x0098
}; //Size: 0x00C0 }; //Size: 0x00C0
static_assert(sizeof(rage::snPeer) == 0x120); static_assert(sizeof(rage::snPeer) == 0x118);
class rlRemoteGamer class rlRemoteGamer
{ {
public: public:
rage::rlGamerHandle m_handle; rage::rlGamerHandle m_handle;
char pad_0010[4]; //0x0010 char pad_0010[4]; //0x0010
uint32_t m_timeout_time; //0x0014 uint32_t m_timeout_time; //0x0014
uint32_t m_time_unk; //0x0018 uint32_t m_time_unk; //0x0018
char pad_001C[4]; //0x001C char pad_001C[4]; //0x001C
}; //Size: 0x0020 }; //Size: 0x0020
static_assert(sizeof(rage::rlRemoteGamer) == 0x20); static_assert(sizeof(rage::rlRemoteGamer) == 0x20);
class rlSession class rlSession
{ {
public: public:
char pad_0008[264]; //0x0008 char pad_0008[248]; //0x0008
class rage::rlSessionInfo m_session_info; //0x0110 class rage::rlSessionInfo m_session_info; //0x0100
char pad_01E0[288]; //0x01E0 char pad_01D0[296]; //0x01D0
uint64_t m_session_id; //0x0300 uint64_t m_session_id; //0x02F8
char pad_0308[1136]; //0x0308 char pad_0300[1136]; //0x0300
virtual ~rlSession() = default; virtual ~rlSession() = default;
}; //Size: 0x0778 }; //Size: 0x0770
static_assert(sizeof(rage::rlSession) == 0x778); static_assert(sizeof(rage::rlSession) == 0x770);
class rlSessionDetail class rlSessionDetail
{ {
public: public:
class rage::rlGamerInfoBase m_base_gamer_info; class rage::rlGamerInfoBase m_base_gamer_info;
char pad_0060[8]; //0x0060 char pad_0060[8]; //0x0060
class rage::rlSessionInfo m_session_info; //0x0068 class rage::rlSessionInfo m_session_info; //0x0068
char pad_00D8[14]; //0x00D8 char pad_00D8[14]; //0x00D8
uint16_t m_session_type; //0x00E6 uint16_t m_session_type; //0x00E6
char pad_00E8[324]; //0x00E8 char pad_00E8[324]; //0x00E8
uint32_t m_player_count; //0x022C uint32_t m_player_count; //0x022C
uint32_t m_unk_player_count; //0x0230 uint32_t m_unk_player_count; //0x0230
char pad_0234[2]; //0x0234 char pad_0234[2]; //0x0234
int16_t m_unk_pos_x; //0x0236 int16_t m_unk_pos_x; //0x0236
int16_t m_unk_pos_y; //0x0238 int16_t m_unk_pos_y; //0x0238
int16_t m_unk_pos_z; //0x023A int16_t m_unk_pos_z; //0x023A
uint8_t m_matchmaking_property_ids[32]; //0x023C uint8_t m_matchmaking_property_ids[32]; //0x023C
char pad_025C[2]; //0x025C char pad_025C[2]; //0x025C
uint16_t m_rank; //0x025E uint16_t m_rank; //0x025E
char pad_0260[1]; //0x0260 char pad_0260[1]; //0x0260
uint8_t m_mental_state; //0x0261 uint8_t m_mental_state; //0x0261
char pad_0262[21]; //0x0262 char pad_0262[21]; //0x0262
uint8_t m_population_density; //0x0277 uint8_t m_population_density; //0x0277
char pad_0278[320]; //0x0278 char pad_0278[320]; //0x0278
}; //Size: 0x03CA }; //Size: 0x03CA
static_assert(sizeof(rlSessionDetail) == 0x478); static_assert(sizeof(rlSessionDetail) == 0x478);
class rlMatchmakingFindResult class rlMatchmakingFindResult
{ {
public: public:
class rage::rlSessionDetail m_result_session_details[15]; //0x0000 class rage::rlSessionDetail m_result_session_details[15]; //0x0000
char pad_37C8[168]; //0x37C8 char pad_37C8[168]; //0x37C8
}; //Size: 0x3870 }; //Size: 0x3870
static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x43B0); static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x43B0);
class netGamePlayerData class netGamePlayerData
{ {
public: public:
class rlGamerHandle m_handle; class rlGamerHandle m_handle;
bool m_is_activity_spectator; //0x0010 bool m_is_activity_spectator; //0x0010
char pad_0011[7]; //0x0011 char pad_0011[7]; //0x0011
uint64_t m_crew_id; //0x0018 uint64_t m_crew_id; //0x0018
uint16_t m_rank; //0x0020 uint16_t m_rank; //0x0020
uint16_t m_debug_unk; //0x0022 uint16_t m_debug_unk; //0x0022
char pad_0024[4]; //0x0024 char pad_0024[4]; //0x0024
uint32_t m_nat_type; //0x0028 uint32_t m_nat_type; //0x0028
bool m_is_rockstar_dev; //0x002C bool m_is_rockstar_dev; //0x002C
char pad_002D[3]; //0x002D char pad_002D[3]; //0x002D
}; //Size: 0x0030 }; //Size: 0x0030
static_assert(sizeof(rage::netGamePlayerData) == 0x30); static_assert(sizeof(rage::netGamePlayerData) == 0x30);
class snSession class snSession
{ {
public: public:
rage::sysMemAllocator* m_memory_allocator; //0x0000 uint64_t m_memory_allocator; //0x0000
char pad_0008[64]; //0x0008 char pad_0008[64]; //0x0008
rage::netConnectionManager* m_net_connection_mgr; //0x0048 rage::netConnectionManager* m_net_connection_mgr; //0x0048
char pad_0050[48]; //0x0050 char pad_0050[48]; //0x0050
class rage::rlSession m_rline_session; //0x0080 class rage::rlSession m_rline_session; //0x0080
class rage::snPlayer m_local_player; //0x0938 class rage::snPlayer m_local_player; //0x07F0
uint64_t m_host_token; //0x09D8 uint64_t m_host_token; //0x08F0
char pad_09E0[144]; //0x09E0 char pad_08F8[144]; //0x08F8
class rage::snPeer m_peer_storage[32]; //0x0A70 class rage::snPeer m_peer_storage[32]; //0x0988
char pad_2270[24]; //0x2270 char pad_2C88[24]; //0x2C88
class rage::snPeer* m_peers[32]; //0x2288 class rage::snPeer* m_peers[32]; //0x2CA0
uint32_t m_peer_count; //0x2388 uint32_t m_peer_count; //0x2DA0
char pad_238C[4]; //0x238C char pad_2DA4[4]; //0x2DA4
class rage::snPlayer m_player_storage[32]; //0x2390 class rage::snPlayer m_player_storage[32]; //0x2DA8
char pad_3790[24]; //0x3790 char pad_4DA8[24]; //0x4DA8
class rage::snPlayer* m_players[32]; //0x37A8 class rage::snPlayer* m_players[32]; //0x4DC0
uint32_t m_player_count; //0x38A8 int32_t m_player_count; //0x4EC0
char pad_38AC[4]; //0x38AC char pad_4EC4[4]; //0x4EC4
class rage::rlRemoteGamer m_remote_gamers[32]; //0x38B0 class rage::rlRemoteGamer m_remote_gamers[32]; //0x4EC8
uint32_t m_num_remote_gamers; //0x3CB0 uint32_t m_num_remote_gamers; //0x52C8
bool m_player_joining; //0x3CB4 bool m_player_joining; //0x52CC
char pad_3CB5[107]; //0x3CB5 char pad_52CD[107]; //0x52CD
uint32_t m_connection_identifier; //0x3D20 uint32_t m_connection_identifier; //0x5338
char pad_3D24[8]; //0x3D24 char pad_533C[4]; //0x533C
char m_token_key[64]; //0x3D2C uint32_t m_profile_index; //0x5340
char m_id_key[64]; //0x3D6C char m_token_key[64]; //0x5344
char m_info_key[64]; //0x3DAC char m_id_key[64]; //0x5384
char m_host_key[64]; //0x3DEC char m_info_key[64]; //0x53C4
char m_join_key[64]; //0x3E2C char m_host_key[64]; //0x5404
char pad_3E6C[4]; //0x3E6C char m_join_key[64]; //0x5444
char pad_5484[4]; //0x5484
inline bool is_host() inline bool is_host()
{ {
return m_local_player.m_player_data.m_host_token == m_host_token; return m_local_player.m_player_data.m_host_token == m_host_token;
} }
inline snPlayer* get_player_by_token(uint64_t token) inline snPlayer* get_player_by_token(uint64_t token)
{ {
for (std::uint32_t i = 0; i < m_player_count; i++) for (std::uint32_t i = 0; i < m_player_count; i++)
{ {
if (m_players[i]->m_player_data.m_host_token == token) if (m_players[i]->m_player_data.m_host_token == token)
{ {
return m_players[i]; return m_players[i];
} }
} }
return nullptr; return nullptr;
} }
inline snPeer* get_peer_by_rockstar_id(uint64_t rid) inline snPeer* get_peer_by_rockstar_id(uint64_t rid)
{ {
for (uint32_t i = 0; i < m_peer_count; i++) for (uint32_t i = 0; i < m_peer_count; i++)
{ {
if (m_peers[i]->m_peer_data.m_gamer_handle_2.m_rockstar_id == rid) if (m_peers[i]->m_peer_data.m_gamer_handle_2.m_rockstar_id == rid)
{ {
return m_peers[i]; return m_peers[i];
} }
} }
return nullptr; return nullptr;
} }
}; //Size: 0x3E70 }; //Size: 0x3E70
static_assert(sizeof(rage::snSession) == 0x5590); static_assert(sizeof(rage::snSession) == 0x5488);
class snMsgRemoveGamersFromSessionCmd class snMsgRemoveGamersFromSessionCmd
{ {
public: public:
uint64_t m_session_id; //0x0000 uint64_t m_session_id; //0x0000
uint64_t m_peer_ids[32]; //0x0008 rage::rlGamerHandle m_handles[32]; //0x0008
int32_t m_unk = -1; //0x0108 int32_t m_unk = -1; //0x208
uint32_t m_num_peers; //0x010C uint32_t m_num_peers; //0x20C
}; //Size: 0x0110 }; //Size: 0x0110
static_assert(sizeof(rage::snMsgRemoveGamersFromSessionCmd) == 0x110); static_assert(sizeof(rage::snMsgRemoveGamersFromSessionCmd) == 0x210);
} }
class SessionSortEntry class SessionSortEntry
{ {
public: public:
class rage::rlSessionDetail* m_session_detail; //0x0000 class rage::rlSessionDetail* m_session_detail; //0x0000
char pad_0008[4]; //0x0008 char pad_0008[4]; //0x0008
float m_score; //0x000C float m_score; //0x000C
char pad_0010[8]; //0x0010 char pad_0010[8]; //0x0010
}; //Size: 0x0018 }; //Size: 0x0018
static_assert(sizeof(SessionSortEntry) == 0x18); static_assert(sizeof(SessionSortEntry) == 0x18);
#pragma pack(pop) #pragma pack(pop)

View File

@ -6,60 +6,56 @@
enum class eGameState : int32_t enum class eGameState : int32_t
{ {
Invalid = -1, Invalid = -1,
Playing, Playing,
Died, Died,
Arrested, Arrested,
FailedMission, FailedMission,
LeftGame, LeftGame,
Respawn, Respawn,
InMPCutscene InMPCutscene
}; };
#pragma pack(push, 4) #pragma pack(push, 4)
class CPlayerInfo class CPlayerInfo
{ {
public: public:
char pad_0000[32]; //0x0000 char pad_0000[32]; //0x0000
class rage::rlGamerInfo m_net_player_data; //0x0020 class rage::rlGamerInfo m_net_player_data; //0x0020
char pad_00B8[184]; //0x00B8 char pad_0110[184]; //0x0110
float m_swim_speed; //0x0170 float m_swim_speed; //0x01C8
char pad_0174[20]; //0x0174 char pad_01CC[20]; //0x01CC
uint32_t m_water_proof; //0x0188 uint32_t m_water_proof; //0x01E0
char pad_018C[76]; //0x018C char pad_01E4[76]; //0x01E4
eGameState m_game_state; //0x01D8 eGameState m_game_state; //0x0230
char pad_01DC[12]; //0x01DC char pad_0234[12]; //0x0234
class CPed *m_ped; //0x01E8 class CPed* m_ped; //0x0240
char pad_01F0[40]; //0x01F0 char pad_0248[40]; //0x0248
uint32_t m_frame_flags; //0x0218 uint32_t m_frame_flags; //0x0270
char pad_021C[52]; //0x021C char pad_0274[52]; //0x0274
uint32_t m_player_controls; //0x0250 uint32_t m_player_controls; //0x02A8
char pad_0254[1256]; //0x0254 char pad_02AC[1248]; //0x02AC
float m_wanted_can_change; //0x073C float m_wanted_can_change; //0x078C
char pad_0740[144]; //0x0740 char pad_0790[304]; //0x0790
float m_wanted_level_difficulty; //0x07D0 min:-1 max:1 uint32_t m_npc_ignore; //0x08C0
char pad_07D4[52]; //0x07D4 char pad_08C4[12]; //0x08C4
float m_wanted_level_multiplier; //0x0808 min:0 max:1 bool m_is_wanted; //0x08D0
char pad_080C[100]; //0x080C char pad_08D1[7]; //0x08D1
uint32_t m_npc_ignore; //0x0870 uint32_t m_wanted_level; //0x08D8
char pad_0874[12]; //0x0874 uint32_t m_wanted_level_display; //0x08DC
bool m_is_wanted; //0x0880 char pad_08E0[1120]; //0x08E0
char pad_0881[7]; //0x0881 float m_run_speed; //0x0D40
uint32_t m_wanted_level; //0x0888 float m_stamina; //0x0D44
uint32_t m_wanted_level_display; //0x088C float m_stamina_regen; //0x0D48
char pad_0890[1120]; //0x0890 char pad_0D4C[16]; //0x0D4C
float m_run_speed; //0x0CF0 float m_weapon_damage_mult; //0x0D5C
float m_stamina; //0x0CF4 float m_weapon_defence_mult; //0x0D60
float m_stamina_regen; //0x0CF8 char pad_0D64[4]; //0x0D64
char pad_0CFC[16]; //0x0CFC float m_melee_weapon_damage_mult; //0x0D68
float m_weapon_damage_mult; //0x0D0C float m_melee_damage_mult; //0x0D6C
float m_weapon_defence_mult; //0x0D10 float m_melee_defence_mult; //0x0D70
char pad_0D14[4]; //0x0D14 char pad_0D74[8]; //0x0D74
float m_melee_weapon_damage_mult; //0x0D18 float m_melee_weapon_defence_mult; //0x0D7C
float m_melee_damage_mult; //0x0D1C }; //Size: 0x0D80
float m_melee_defence_mult; //0x0D20 static_assert(sizeof(CPlayerInfo) == 0xD80);
char pad_0D24[8]; //0x0D24
float m_melee_weapon_defence_mult; //0x0D2C
}; //Size: 0x0D30
static_assert(sizeof(CPlayerInfo) == 0xD90);
#pragma pack(pop) #pragma pack(pop)

View File

@ -6,15 +6,20 @@
namespace rage namespace rage
{ {
#pragma pack(push,8) #pragma pack(push,8)
class rlGamerInfo : public rlGamerInfoBase class rlGamerInfo : public rlGamerInfoBase
{ {
public: public:
uint64_t m_host_token; uint64_t m_host_token;
uint64_t m_peer_id_2;
rlGamerHandle m_gamer_handle_2; union
uint32_t m_ros_privilege; {
char m_name[17]; rlGamerHandle m_gamer_handle_2;
}; //Size: 0x0098 uint32_t m_peer_id_2; // not found in all instances
static_assert(sizeof(rlGamerInfo) == 0xF8); };
uint32_t m_ros_privilege;
char m_name[17];
}; //Size: 0x0098
static_assert(sizeof(rlGamerInfo) == 0xF0);
#pragma pack(pop) #pragma pack(pop)
} }

File diff suppressed because it is too large Load Diff

View File

@ -6,352 +6,352 @@
enum class eActivityType enum class eActivityType
{ {
HeistPrep = 233, HeistPrep = 233,
Gunrunning = 180, Gunrunning = 180,
Sightseer = 142, Sightseer = 142,
HeadHunter = 166, HeadHunter = 166,
BuySpecialCargo = 167, BuySpecialCargo = 167,
SellSpecialCargo = 168, SellSpecialCargo = 168,
DefendSpecialCargo = 169, DefendSpecialCargo = 169,
StealVehicle = 178, StealVehicle = 178,
ExportVehicle = 188, ExportVehicle = 188,
Gunrunning2 = 225, Gunrunning2 = 225,
GunrunningSell = 226, GunrunningSell = 226,
GunrunningDefend = 227, GunrunningDefend = 227,
BikerSell = 190, BikerSell = 190,
BikerDefend = 191, BikerDefend = 191,
BusinessResupply = 192, BusinessResupply = 192,
Survival = 3, Survival = 3,
Darts = 14, Darts = 14,
ArmWresling = 15, ArmWresling = 15,
GangAttack = 6, GangAttack = 6,
PilotSchool = 122, PilotSchool = 122,
Golf = 11, Golf = 11,
ShootingRange = 13, ShootingRange = 13,
Tennis = 12, Tennis = 12,
BaseJump = 8, BaseJump = 8,
Deathmatch = 1, Deathmatch = 1,
ImpromptuDeathmatch = 5, ImpromptuDeathmatch = 5,
Mission = 0, Mission = 0,
Race = 2, Race = 2,
ExecutiveDeathmatch = 148, ExecutiveDeathmatch = 148,
MarkedForDeath = 151, MarkedForDeath = 151,
PiracyPrevention = 152, PiracyPrevention = 152,
MostWanted = 153, MostWanted = 153,
AssetRecovery = 157, AssetRecovery = 157,
HostileTakeover = 159, HostileTakeover = 159,
Point2Point = 162, Point2Point = 162,
AmphibiousAssault = 216, AmphibiousAssault = 216,
Velocity = 219, Velocity = 219,
GunsForHire = 185, GunsForHire = 185,
ByThePound = 182, ByThePound = 182,
RippingItUp = 194, RippingItUp = 194,
RaceToPoint = 189, RaceToPoint = 189,
HitAndRide = 193, HitAndRide = 193,
CriminalMischief = 205, CriminalMischief = 205,
WeaponOfChoice = 186, WeaponOfChoice = 186,
FragileGoods = 207, FragileGoods = 207,
Torched = 208, Torched = 208,
Outrider = 209, Outrider = 209,
WheelieRider = 210, WheelieRider = 210,
POW = 183, POW = 183,
ExecutiveSearch = 199, ExecutiveSearch = 199,
StandYourGround = 201, StandYourGround = 201,
AutoBuyout = 163, AutoBuyout = 163,
DueDiligence = 160, DueDiligence = 160,
MarketManipulation = 154, MarketManipulation = 154,
CourierService = 155, CourierService = 155,
Skydive = 267 Skydive = 267
}; };
enum class eBossGoonFlags enum class eBossGoonFlags
{ {
kOneOnOneDM = 4, kOneOnOneDM = 4,
kJoinSuccess = 7, kJoinSuccess = 7,
kJoinFail = 8, kJoinFail = 8,
kSpectating = 24 kSpectating = 24
}; };
enum class eGoonInviteType enum class eGoonInviteType
{ {
DEBUG, DEBUG,
NEARBY, NEARBY,
FRIENDS, FRIENDS,
CREW, CREW,
INDIVIDUAL, INDIVIDUAL,
LOOKING_FOR_WORK LOOKING_FOR_WORK
}; };
enum class eBossVehicleState enum class eBossVehicleState
{ {
NONE, NONE,
SPAWNED, SPAWNED,
DESTROYED = 3 DESTROYED = 3
}; };
enum class eMCRole enum class eMCRole
{ {
PROSPECT = -1, PROSPECT = -1,
VICE_PRESIDENT, VICE_PRESIDENT,
ROAD_CAPTAIN, ROAD_CAPTAIN,
SERGEANT_IN_ARMS, SERGEANT_IN_ARMS,
ENFORCER ENFORCER
}; };
enum class eClubhouseActivity enum class eClubhouseActivity
{ {
NONE = -1, NONE = -1,
DARTS, DARTS,
ARM_WRESTLING ARM_WRESTLING
}; };
struct MC_STYLE struct MC_STYLE
{ {
SCR_BOOL Enabled; SCR_BOOL Enabled;
SCR_INT BossOutfitType; SCR_INT BossOutfitType;
SCR_INT GoonOutfitType; SCR_INT GoonOutfitType;
SCR_ARRAY<uint64_t, 7> GoonOutfitIndices; // one outfit for each goon, size is 7 instead of 8 for some reason SCR_ARRAY<uint64_t, 7> GoonOutfitIndices; // one outfit for each goon, size is 7 instead of 8 for some reason
SCR_ARRAY<uint64_t, 7> GoonOutfitIndicesOverride; SCR_ARRAY<uint64_t, 7> GoonOutfitIndicesOverride;
SCR_INT PAD_0019; SCR_INT PAD_0019;
SCR_BOOL HeadgearEnabled; SCR_BOOL HeadgearEnabled;
SCR_BOOL EmblemEnabled; SCR_BOOL EmblemEnabled;
}; };
static_assert(sizeof(MC_STYLE) == 22 * 8); static_assert(sizeof(MC_STYLE) == 22 * 8);
struct VEHICLE_EXPORT struct VEHICLE_EXPORT
{ {
SCR_ARRAY<uint64_t, 4> SellingVehicleIndices; SCR_ARRAY<uint64_t, 4> SellingVehicleIndices;
SCR_INT PAD_0005; // this is set to zero in all export scripts and never read SCR_INT PAD_0005; // this is set to zero in all export scripts and never read
}; };
static_assert(sizeof(VEHICLE_EXPORT) == 6 * 8); static_assert(sizeof(VEHICLE_EXPORT) == 6 * 8);
struct HANGAR_CARGO struct HANGAR_CARGO
{ {
SCR_INT PAD_0000; // unused? SCR_INT PAD_0000; // unused?
SCR_ARRAY<uint64_t, 20> DeliverableTypes; SCR_ARRAY<uint64_t, 20> DeliverableTypes;
SCR_INT CargoType; SCR_INT CargoType;
}; };
static_assert(sizeof(HANGAR_CARGO) == 23 * 8); static_assert(sizeof(HANGAR_CARGO) == 23 * 8);
struct CASINO_HEIST_PREP struct CASINO_HEIST_PREP
{ {
SCR_INT PrepIndex; SCR_INT PrepIndex;
SCR_INT SupportCrewMemberIndex; // only set on preps 1 through 3 SCR_INT SupportCrewMemberIndex; // only set on preps 1 through 3
SCR_INT LoadoutIndex; // only set on prep 1 and 2 SCR_INT LoadoutIndex; // only set on prep 1 and 2
}; };
static_assert(sizeof(CASINO_HEIST_PREP) == 3 * 8); static_assert(sizeof(CASINO_HEIST_PREP) == 3 * 8);
struct LEAVE_IN_HELI struct LEAVE_IN_HELI
{ {
SCR_INT Flags; SCR_INT Flags;
PLAYER_INDEX Owner; PLAYER_INDEX Owner;
SCR_INT SeatIndex; SCR_INT SeatIndex;
}; };
static_assert(sizeof(LEAVE_IN_HELI) == 3 * 8); static_assert(sizeof(LEAVE_IN_HELI) == 3 * 8);
struct BOSS_GOON struct BOSS_GOON
{ {
PLAYER_INDEX Boss; // leader of CEO/MC PLAYER_INDEX Boss; // leader of CEO/MC
SCR_INT TimeBecameBoss; SCR_INT TimeBecameBoss;
SCR_INT TimeBecameGoon; SCR_INT TimeBecameGoon;
SCR_INT LastPayTime; SCR_INT LastPayTime;
SCR_BITSET<eBossGoonFlags> Flags; SCR_BITSET<eBossGoonFlags> Flags;
SCR_INT Flags2; // TODO SCR_INT Flags2; // TODO
SCR_INT Flags3; // TODO SCR_INT Flags3; // TODO
SCR_INT TotalBossGoonTime; SCR_INT TotalBossGoonTime;
SCR_ARRAY<uint64_t, 2> BossGoonUUID; SCR_ARRAY<uint64_t, 2> BossGoonUUID;
SCR_ARRAY<uint64_t, 8> Goons; SCR_ARRAY<uint64_t, 8> Goons;
SCR_INT GoonsRequestingJoin; // bitset SCR_INT GoonsRequestingJoin; // bitset
SCR_INT PayGrade; SCR_INT PayGrade;
SCR_INT InvitesByBosses; // bitset SCR_INT InvitesByBosses; // bitset
SCR_INT TransitionBossPersistanceStage; SCR_INT TransitionBossPersistanceStage;
SCR_INT EndBeingGoonReason; SCR_INT EndBeingGoonReason;
SCR_INT PAD_0025; // TODO SCR_INT PAD_0025; // TODO
PLAYER_INDEX JoiningBoss; PLAYER_INDEX JoiningBoss;
alignas(8) eGoonInviteType JoinedInviteType; alignas(8) eGoonInviteType JoinedInviteType;
SCR_INT NumBossDeathsSinceLastPay; SCR_INT NumBossDeathsSinceLastPay;
SCR_VEC3 PAD_0029; // TODO SCR_VEC3 PAD_0029; // TODO
alignas(8) eActivityType UnkActivity; alignas(8) eActivityType UnkActivity;
alignas(8) eActivityType CurrentActivity; alignas(8) eActivityType CurrentActivity;
PLAYER_INDEX JoustTarget; PLAYER_INDEX JoustTarget;
PLAYER_INDEX ExecutiveDeathmatchTarget; PLAYER_INDEX ExecutiveDeathmatchTarget;
MP_SCRIPT_DATA ActiveScript; MP_SCRIPT_DATA ActiveScript;
PLAYER_INDEX PAD_0057; PLAYER_INDEX PAD_0057;
PLAYER_INDEX PAD_0058; PLAYER_INDEX PAD_0058;
alignas(8) eBossVehicleState BossVehicleState; alignas(8) eBossVehicleState BossVehicleState;
SCR_INT BossVehicleSpawnState; SCR_INT BossVehicleSpawnState;
PLAYER_INDEX PlayerInsideBossVehicle; PLAYER_INDEX PlayerInsideBossVehicle;
SCR_HASH BossVehicleModel; SCR_HASH BossVehicleModel;
TIMER LastBossVehicleSpawnTimer; TIMER LastBossVehicleSpawnTimer;
TIMER BossVehicleInvincibleTimer; TIMER BossVehicleInvincibleTimer;
SCR_VEC3 BossVehicleSpawnedPosition; SCR_VEC3 BossVehicleSpawnedPosition;
alignas(8) HudColor BossVehicleHudColor; alignas(8) HudColor BossVehicleHudColor;
TEXT_LABEL_15 BossVehicleTextLabel; TEXT_LABEL_15 BossVehicleTextLabel;
SCR_INT BossVehicleNetId; SCR_INT BossVehicleNetId;
MC_STYLE MCStyle; MC_STYLE MCStyle;
uint64_t PAD_0098[3]; // unused uint64_t PAD_0098[3]; // unused
SCR_INT FriendlyFireDisabledPlayers; SCR_INT FriendlyFireDisabledPlayers;
SCR_INT PiracyPreventionYachtIndex; // not used by the scripts SCR_INT PiracyPreventionYachtIndex; // not used by the scripts
SCR_INT BossGoonMissionLaunchState; SCR_INT BossGoonMissionLaunchState;
SCR_INT ColorSlot; SCR_INT ColorSlot;
TEXT_LABEL_63 MCName; TEXT_LABEL_63 MCName;
SCR_INT Language; // can be used to get the system language of player SCR_INT Language; // can be used to get the system language of player
SCR_INT SpawnableBossVehicles; SCR_INT SpawnableBossVehicles;
SCR_INT AutoBuyoutDeliveryLocationIndex; SCR_INT AutoBuyoutDeliveryLocationIndex;
SCR_INT AutoBuyoutDeliveryLocationSubIndex; SCR_INT AutoBuyoutDeliveryLocationSubIndex;
SCR_INT PAD_0125; // unused SCR_INT PAD_0125; // unused
SCR_ARRAY<SCR_VEC3, 8> PAD_0126; // TODO SCR_ARRAY<SCR_VEC3, 8> PAD_0126; // TODO
SCR_ARRAY<SCR_VEC3, 8> ContrabandPositions; // positions of cargo used to notify players to destroy them when they get near SCR_ARRAY<SCR_VEC3, 8> ContrabandPositions; // positions of cargo used to notify players to destroy them when they get near
SCR_HASH ContrabandPickupModel; SCR_HASH ContrabandPickupModel;
PLAYER_INDEX StealingContrabandVehiclePlayerIndex; PLAYER_INDEX StealingContrabandVehiclePlayerIndex;
SCR_INT PAD_0178; // TODO SCR_INT PAD_0178; // TODO
SCR_HASH ContrabandPickupModel2; SCR_HASH ContrabandPickupModel2;
SCR_BOOL DestroyedCargo; SCR_BOOL DestroyedCargo;
SCR_INT VIPGameplayDisabledTimer; SCR_INT VIPGameplayDisabledTimer; // @181 as of 1.67
SCR_INT SettingUpBusiness; SCR_INT SettingUpBusiness;
uint64_t PAD_0183[4]; // TODO some unknown contraband struct uint64_t PAD_0183[4]; // TODO some unknown contraband struct
VEHICLE_EXPORT VehicleExport; VEHICLE_EXPORT VehicleExport;
uint64_t PAD_0193[12]; // TODO uint64_t PAD_0193[12]; // TODO
SCR_ARRAY<uint64_t, 6> ActiveFreemodeEvents; // force thunder SCR_ARRAY<uint64_t, 7> ActiveFreemodeEvents; // force thunder
uint64_t PAD_0212[22]; // I'm not even going to bother with this one uint64_t PAD_0212[22]; // I'm not even going to bother with this one
HANGAR_CARGO HangarCargo; HANGAR_CARGO HangarCargo;
uint64_t PAD_0236[23]; // not going to bother with this one either uint64_t PAD_0236[23]; // not going to bother with this one either
SCR_ARRAY<uint64_t, 20> CasinoDeliverables; SCR_ARRAY<uint64_t, 20> CasinoDeliverables;
SCR_INT CasinoLimoDestination; SCR_INT CasinoLimoDestination;
SCR_BOOL CasinoLimoActive; SCR_BOOL CasinoLimoActive;
SCR_BOOL CasinoLuxuryCarActive; SCR_BOOL CasinoLuxuryCarActive;
SCR_HASH CasinoLuxuryCarModel; SCR_HASH CasinoLuxuryCarModel;
CASINO_HEIST_PREP CasinoHeistPrep; CASINO_HEIST_PREP CasinoHeistPrep;
SCR_INT CayoPrepIndex; SCR_INT CayoPrepIndex;
SCR_INT CompanySUVDestination; SCR_INT CompanySUVDestination;
SCR_BOOL CompanySUVActive; SCR_BOOL CompanySUVActive;
SCR_ARRAY<uint64_t, 8> ContrabandIndices; // type of selling cargo SCR_ARRAY<uint64_t, 8> ContrabandIndices; // type of selling cargo
SCR_ARRAY<uint64_t, 10> VehicleExportIndices; // not sure what this is SCR_ARRAY<uint64_t, 10> VehicleExportIndices; // not sure what this is
SCR_INT VehicleExportMissionType; // valid range is 2000 to 2010, 2000 = 0, 2001 = 1 etc SCR_INT VehicleExportMissionType; // valid range is 2000 to 2010, 2000 = 0, 2001 = 1 etc
SCR_ARRAY<uint64_t, 4> VehicleExportSellingIndices; SCR_ARRAY<uint64_t, 4> VehicleExportSellingIndices;
SCR_BOOL PAD_0337; // TODO SCR_BOOL PAD_0337; // TODO
TEXT_LABEL_63 GangName; // CEO Name TEXT_LABEL_63 GangName; // CEO Name
TEXT_LABEL_63 ClubhouseName; // cut content? TEXT_LABEL_63 ClubhouseName; // cut content?
SCR_INT SourcingContrabandType; SCR_INT SourcingContrabandType;
SCR_INT FragileGoodsMissionType; SCR_INT FragileGoodsMissionType;
SCR_INT SalvageMissionType; SCR_INT SalvageMissionType;
SCR_INT DoomsdayPrepIndex; SCR_INT DoomsdayPrepIndex;
SCR_INT VehicleExportIndex; // another one... SCR_INT VehicleExportIndex; // another one...
SCR_INT PAD_0375; // unused SCR_INT PAD_0375; // unused
SCR_INT BunkerSourceIndex; // check gb_gunrunning func_1540 SCR_INT BunkerSourceIndex; // check gb_gunrunning func_1540
SCR_ARRAY<uint64_t, 8> BunkerCargoIndices; SCR_ARRAY<uint64_t, 8> BunkerCargoIndices;
uint64_t PAD_0386[5]; uint64_t PAD_0386[5];
uint64_t PAD_0391[2]; // unused uint64_t PAD_0391[2]; // unused
uint64_t PAD_0393[15]; // smuggler data uint64_t PAD_0393[15]; // smuggler data
SCR_INT LastBossWorkTime; // seconds since epoch SCR_INT LastBossWorkTime; // seconds since epoch
uint64_t PAD_0409[19]; uint64_t PAD_0409[19];
SCR_BOOL IsMC; SCR_BOOL IsMC;
alignas(8) eMCRole MCRole; // applies to goons only, boss is always the MC president alignas(8) eMCRole MCRole; // applies to goons only, boss is always the MC president
SCR_BOOL FormationFlyingAssist; SCR_BOOL FormationFlyingAssist;
SCR_INT PAD_0431; // always set to zero and not read SCR_INT PAD_0431; // always set to zero and not read
SCR_BOOL MCFormationActive; SCR_BOOL MCFormationActive;
SCR_BOOL MCFormationHelpShown; SCR_BOOL MCFormationHelpShown;
TIMER MCFormationHealthBonusTimer; TIMER MCFormationHealthBonusTimer;
TIMER MCFormationLastHealthBonusTimer; TIMER MCFormationLastHealthBonusTimer;
TIMER MCFormationBreakTimer; TIMER MCFormationBreakTimer;
SCR_INT PAD_0440; // unused SCR_INT PAD_0440; // unused
SCR_BOOL MCFormationAssist; SCR_BOOL MCFormationAssist;
SCR_BOOL MCRidingStyleRelaxed; SCR_BOOL MCRidingStyleRelaxed;
SCR_FLOAT PAD_0443; // set from a tunable SCR_FLOAT PAD_0443; // set from a tunable
SCR_FLOAT PAD_0444; // set from a tunable SCR_FLOAT PAD_0444; // set from a tunable
uint64_t PAD_0445[16]; // somewhat unused, a few fields are accessed in the business battle script uint64_t PAD_0445[16]; // somewhat unused, a few fields are accessed in the business battle script
SCR_INT ClothingValue; // total value of equipped clothing used by criminal damage SCR_INT ClothingValue; // total value of equipped clothing used by criminal damage
PLAYER_INDEX Adversary; // for common adversary calculations? PLAYER_INDEX Adversary; // for common adversary calculations?
SCR_HASH ContrabandType; // unknown HASH_ENUM SCR_HASH ContrabandType; // unknown HASH_ENUM
SCR_INT HitAndRideGangType; SCR_INT HitAndRideGangType;
SCR_BOOL IsMC2; SCR_BOOL IsMC2;
SCR_INT BossGoonVersion; SCR_INT BossGoonVersion;
SCR_INT MCTotalContributionPoints; SCR_INT MCTotalContributionPoints;
SCR_INT MCContributionPoints; SCR_INT MCContributionPoints;
SCR_INT FavoriteBikeStyle; // not read by the scripts SCR_INT FavoriteBikeStyle; // not read by the scripts
SCR_INT GreatestFormationTimeIndex; SCR_INT GreatestFormationTimeIndex;
SCR_INT FormationTime; SCR_INT FormationTime;
SCR_BOOL RidingFavoriteMotorcycle; SCR_BOOL RidingFavoriteMotorcycle;
SCR_INT ContrabandSellLocation; SCR_INT ContrabandSellLocation;
SCR_INT BusinessBattleType; SCR_INT BusinessBattleType;
SCR_INT PAD_0475; SCR_INT PAD_0475;
SCR_INT NightclubMissionIndex; SCR_INT NightclubMissionIndex;
SCR_INT NightclubDefendMissionIndex; SCR_INT NightclubDefendMissionIndex;
uint64_t PAD_0478[18]; // TODO uint64_t PAD_0478[18]; // TODO
SCR_BOOL DoubleActionCacheLocationRevealed; SCR_BOOL DoubleActionCacheLocationRevealed;
}; };
static_assert(sizeof(BOSS_GOON) == 497 * 8); static_assert(sizeof(BOSS_GOON) == 498 * 8);
struct MC_STATS struct MC_STATS
{ {
SCR_INT FormationTime0; SCR_INT FormationTime0;
SCR_INT FormationTime1; SCR_INT FormationTime1;
SCR_INT FormationTime2; SCR_INT FormationTime2;
SCR_INT FormationTime3; SCR_INT FormationTime3;
SCR_INT MembersMarkedForDeath; SCR_INT MembersMarkedForDeath;
SCR_INT MCKills; SCR_INT MCKills;
SCR_INT MCDeaths; SCR_INT MCDeaths;
SCR_INT RivalPresidentKills; SCR_INT RivalPresidentKills;
SCR_INT RivalCEOAndVIPKills; SCR_INT RivalCEOAndVIPKills;
SCR_INT MeleeKills; SCR_INT MeleeKills;
SCR_INT ClubhouseContractsComplete; SCR_INT ClubhouseContractsComplete;
SCR_INT ClubhouseContractEarnings; SCR_INT ClubhouseContractEarnings;
SCR_INT ClubworkCompleted; SCR_INT ClubworkCompleted;
SCR_INT ClubChallengesCompleted; SCR_INT ClubChallengesCompleted;
SCR_INT MemberChallengesCompleted; SCR_INT MemberChallengesCompleted;
}; };
static_assert(sizeof(MC_STATS) == 15 * 8); static_assert(sizeof(MC_STATS) == 15 * 8);
struct GBPD_FM_3_Entry struct GBPD_FM_3_Entry
{ {
alignas(8) eActivityType CurrentActivity; // enum is outdated alignas(8) eActivityType CurrentActivity; // enum is outdated
SCR_INT Flags; // TODO SCR_INT Flags; // TODO
alignas(8) eActivityType CurrentFreemodeActivity; // subset of CurrentActivity alignas(8) eActivityType CurrentFreemodeActivity; // subset of CurrentActivity
SCR_INT SeatingFlags; SCR_INT SeatingFlags;
SCR_VEC3 CurrentFreemodeActivityObjectivePosition; SCR_VEC3 CurrentFreemodeActivityObjectivePosition;
SCR_INT VehiclesNearbyActivityObjective; // only used by challenges and checkpoints SCR_INT VehiclesNearbyActivityObjective; // only used by challenges and checkpoints
SCR_BOOL PassiveMode; SCR_BOOL PassiveMode;
SCR_BOOL TimeTrialActive; // verify SCR_BOOL TimeTrialActive; // verify
BOSS_GOON BossGoon; BOSS_GOON BossGoon;
uint64_t PAD_507[3]; // unused uint64_t PAD_507[3]; // unused
SCR_INT ScriptEventReplayProtectionCounter; SCR_INT ScriptEventReplayProtectionCounter;
TIMER CoronaForcedLaunchTimer; TIMER CoronaForcedLaunchTimer;
LEAVE_IN_HELI LeaveInHeli; LEAVE_IN_HELI LeaveInHeli;
SCR_INT OfficeDesktopFlags; // bit 0 -> login, bit 1 -> map SCR_INT OfficeDesktopFlags; // bit 0 -> login, bit 1 -> map
uint64_t PAD_514[8]; // some IE stuff, most of it is unused uint64_t PAD_514[8]; // some IE stuff, most of it is unused
SCR_INT IlluminatedClothingState; SCR_INT IlluminatedClothingState;
SCR_INT MatchHistoryId1; // used for telemetry SCR_INT MatchHistoryId1; // used for telemetry
SCR_INT MatchHistoryId2; SCR_INT MatchHistoryId2;
alignas(8) eClubhouseActivity ClubhouseActivity; alignas(8) eClubhouseActivity ClubhouseActivity;
SCR_INT ClubhouseFont; SCR_INT ClubhouseFont;
SCR_INT ClubhouseColor; SCR_INT ClubhouseColor;
SCR_INT ClubhouseEmblem; SCR_INT ClubhouseEmblem;
SCR_BOOL ClubhouseHideSignage; SCR_BOOL ClubhouseHideSignage;
uint64_t PAD_0533[2]; // facility exit uint64_t PAD_0533[2]; // facility exit
uint64_t PAD_0535[6]; // no clue what this is uint64_t PAD_0535[6]; // no clue what this is
MC_STATS MCStats; MC_STATS MCStats;
uint64_t PAD_0556[29]; uint64_t PAD_0556[29];
SCR_HASH ForcedWeapon; SCR_HASH ForcedWeapon;
SCR_INT HangarCargoMissionLocationIndex; SCR_INT HangarCargoMissionLocationIndex;
SCR_VEC3 AvengerPosition; SCR_VEC3 AvengerPosition;
SCR_VEC3 TerrorbytePosition; SCR_VEC3 TerrorbytePosition;
SCR_VEC3 AcidLabPosition; SCR_VEC3 AcidLabPosition;
PLAYER_INDEX DeliveringExportVehicleOwner; PLAYER_INDEX DeliveringExportVehicleOwner;
uint64_t PAD_0597[2]; // TODO uint64_t PAD_0597[2]; // TODO
SCR_INT BountyAmount; // values above 10000 will prevent payout SCR_INT BountyAmount; // values above 10000 will prevent payout
PLAYER_INDEX BountyPlacedBy; PLAYER_INDEX BountyPlacedBy;
SCR_INT PAD_0601; // unused, set to -1 by business_battles_sell and never read SCR_INT PAD_0601; // unused, set to -1 by business_battles_sell and never read
SCR_INT CurrentlyUsingArenaTurretIndex; // works similar to the vars found in GlobalPlayerBD SCR_INT CurrentlyUsingArenaTurretIndex; // works similar to the vars found in GlobalPlayerBD
SCR_INT CurrentlyUsingArenaTurretActivatedTime; SCR_INT CurrentlyUsingArenaTurretActivatedTime;
SCR_INT CasinoStoryProgress; SCR_INT CasinoStoryProgress;
SCR_INT CasinoFlowProgress; SCR_INT CasinoFlowProgress;
SCR_ARRAY<uint64_t, 1> DailyObjectiveFlags; SCR_ARRAY<uint64_t, 1> DailyObjectiveFlags; // @607 as of 1.67
}; };
static_assert(sizeof(GBPD_FM_3_Entry) == 608 * 8); static_assert(sizeof(GBPD_FM_3_Entry) == 609 * 8);
struct GPBD_FM_3 struct GPBD_FM_3
{ {
SCR_ARRAY<GBPD_FM_3_Entry, 32> Entries; SCR_ARRAY<GBPD_FM_3_Entry, 32> Entries;
}; };
static_assert(sizeof(GPBD_FM_3) == 19457 * 8); static_assert(sizeof(GPBD_FM_3) == 19489 * 8);

View File

@ -49,9 +49,9 @@ struct GSBD_FM
SCR_ARRAY<uint64_t, 2> MuggingPlayers; // 0 = mugger, 1 = merryweather mercs SCR_ARRAY<uint64_t, 2> MuggingPlayers; // 0 = mugger, 1 = merryweather mercs
SCR_ARRAY<uint64_t, 2> MuggedPlayers; SCR_ARRAY<uint64_t, 2> MuggedPlayers;
uint64_t PAD_0112[4]; // unused uint64_t PAD_0112[4]; // unused
SCR_ARRAY<uint64_t, 60> PAD_0116; // TODO SCR_ARRAY<uint64_t, 61> PAD_0116; // TODO
SCR_INT ShopProcessingBitset; SCR_INT ShopProcessingBitset;
SCR_ARRAY<uint64_t, 79> ActiveContactServiceBitsets; SCR_ARRAY<uint64_t, NUM_CONTACTS> ActiveContactServiceBitsets;
SCR_ARRAY<ACTIVE_CONTACT_SERVICE, 32> ActiveContactServices; SCR_ARRAY<ACTIVE_CONTACT_SERVICE, 32> ActiveContactServices;
PLAYER_INDEX SpectatorTVWantedPlayer; PLAYER_INDEX SpectatorTVWantedPlayer;
SCR_BOOL SpectatorTVWantedClosing; SCR_BOOL SpectatorTVWantedClosing;
@ -63,4 +63,4 @@ struct GSBD_FM
BIKER_CONTRACTS_SERVER BikerContracts; BIKER_CONTRACTS_SERVER BikerContracts;
SCR_ARRAY<uint64_t, 32> DoubleActionCacheLocationRevealed; SCR_ARRAY<uint64_t, 32> DoubleActionCacheLocationRevealed;
}; };
static_assert(sizeof(GSBD_FM) == 574 * 8); static_assert(sizeof(GSBD_FM) == 576 * 8);

File diff suppressed because it is too large Load Diff

View File

@ -4,13 +4,13 @@
struct g_AMC_playerBD_Entry struct g_AMC_playerBD_Entry
{ {
SCR_ARRAY<TIMER, 79> UsedContactServicesTimer; // only index 2 (mugger) is actually used by the scripts. the rest is just a waste of bandwidth SCR_ARRAY<TIMER, NUM_CONTACTS> UsedContactServicesTimer; // only index 2 (mugger) is actually used by the scripts. the rest is just a waste of bandwidth
SCR_ARRAY<uint64_t, 79> ContactServiceCooldowns; // same as above SCR_ARRAY<uint64_t, NUM_CONTACTS> ContactServiceCooldowns; // same as above
}; };
static_assert(sizeof(g_AMC_playerBD_Entry) == 239 * 8); static_assert(sizeof(g_AMC_playerBD_Entry) == 242 * 8);
struct g_AMC_playerBD struct g_AMC_playerBD
{ {
SCR_ARRAY<g_AMC_playerBD_Entry, 32> Entries; SCR_ARRAY<g_AMC_playerBD_Entry, 32> Entries;
}; };
static_assert(sizeof(g_AMC_playerBD) == 7649 * 8); static_assert(sizeof(g_AMC_playerBD) == 7745 * 8);

View File

@ -39,11 +39,11 @@ using Vector3 = rage::scrVector;
template <int SIZE> template <int SIZE>
struct SCR_TEXT_LABEL struct SCR_TEXT_LABEL
{ {
alignas(8) char Data[SIZE]; alignas(8) char Data[SIZE];
private: private:
alignas(8) char _PAD[SIZE]; alignas(8) char _PAD[SIZE];
public: public:
operator char* () { return Data; } operator char* () { return Data; }
}; };
#define TEXT_LABEL_15 SCR_TEXT_LABEL<16> #define TEXT_LABEL_15 SCR_TEXT_LABEL<16>
@ -54,41 +54,41 @@ public:
template <typename T, int SIZE> template <typename T, int SIZE>
struct SCR_ARRAY struct SCR_ARRAY
{ {
SCR_INT Size; SCR_INT Size;
alignas(8) T Data[SIZE]; alignas(8) T Data[SIZE];
T& operator [](int index) T& operator [](int index)
{ {
return Data[index]; return Data[index];
} }
}; };
template <typename T> template <typename T>
struct SCR_BITSET struct SCR_BITSET
{ {
alignas(8) int Value; alignas(8) int Value;
bool IsSet(T val) bool IsSet(T val)
{ {
return Value & (1 << (int)val); return Value & (1 << (int)val);
} }
void Set(T val) void Set(T val)
{ {
Value |= (1 << (int)val); Value |= (1 << (int)val);
} }
void Clear(T val) void Clear(T val)
{ {
Value &= ~(1 << (int)val); Value &= ~(1 << (int)val);
} }
}; };
struct Color3 struct Color3
{ {
SCR_INT R; SCR_INT R;
SCR_INT G; SCR_INT G;
SCR_INT B; SCR_INT B;
}; };
static_assert(sizeof(Color3) == 3 * 8); static_assert(sizeof(Color3) == 3 * 8);
@ -96,6 +96,8 @@ static_assert(sizeof(Color3) == 3 * 8);
struct GAMER_HANDLE struct GAMER_HANDLE
{ {
private: private:
uint64_t Data[13]; uint64_t Data[13];
}; };
static_assert(sizeof(GAMER_HANDLE) == 13 * 8); static_assert(sizeof(GAMER_HANDLE) == 13 * 8);
#define NUM_CONTACTS 80