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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,29 +9,29 @@
namespace rage
{
#pragma pack(push, 8)
class netPlayerMgrBase
{
public:
virtual ~netPlayerMgrBase() = default;
virtual void Initialize() = 0;
virtual void Shutdown() = 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 void RemovePlayer(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;
class netPlayerMgrBase
{
public:
virtual ~netPlayerMgrBase() = default;
virtual void Initialize() = 0;
virtual void Shutdown() = 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 void RemovePlayer(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;
char pad_0008[8]; //0x0008
uint64_t *m_network_bandwidth_manager; //0x0010
char pad_0018[208]; //0x0018
CNetGamePlayer *m_local_net_player; //0x00E8
char pad_00F0[144]; //0x00F0
CNetGamePlayer *m_player_list[32]; //0x0180
uint16_t m_player_limit; //0x0280
char pad_0282[10]; //0x0282
uint16_t m_player_count; //0x028C
char pad_0290[1618]; //0x0290
}; //Size: 0x08E0
static_assert(sizeof(netPlayerMgrBase) == 0x8E0);
char pad_0008[8]; //0x0008
uint64_t* m_network_bandwidth_manager; //0x0010
char pad_0018[216]; //0x0018
CNetGamePlayer* m_local_net_player; //0x00E8
char pad_00F0[144]; //0x00F0
CNetGamePlayer* m_player_list[32]; //0x0180
uint16_t m_player_limit; //0x0280
char pad_0282[10]; //0x0282
uint16_t m_player_count; //0x028C
char pad_0290[1618]; //0x0290
}; //Size: 0x08E0
static_assert(sizeof(netPlayerMgrBase) == 0x8E8);
#pragma pack(pop)
}

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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