mirror of
https://github.com/Mr-X-GTA/GTAV-Classes-1.git
synced 2024-12-22 14:37:31 +08:00
Update to 1.67 (#117)
This commit is contained in:
parent
14adf08cac
commit
9d951d0e32
@ -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)
|
@ -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);
|
@ -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)
|
||||
|
@ -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)
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
@ -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);
|
@ -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
@ -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);
|
@ -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);
|
||||
static_assert(sizeof(GAMER_HANDLE) == 13 * 8);
|
||||
|
||||
#define NUM_CONTACTS 80
|
Loading…
Reference in New Issue
Block a user