Update for b3258 (#179)

This commit is contained in:
maybegreat48 2024-07-03 20:45:15 +00:00 committed by GitHub
parent 68551ec2e5
commit 3d41688e9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 157 additions and 139 deletions

View File

@ -29,6 +29,7 @@ public:
uint16_t m_mount_id; //0x0142 uint16_t m_mount_id; //0x0142
uint16_t m_custodian_id; //0x0144 uint16_t m_custodian_id; //0x0144
uint16_t unk_0146; // 0x0146 uint16_t unk_0146; // 0x0146
uint8_t new_014C;
bool m_tint_index; //0x0148 bool m_tint_index; //0x0148
char pad_0149; //0x0149 char pad_0149; //0x0149
uint8_t unk_014A; // 0x014A uint8_t unk_014A; // 0x014A

View File

@ -99,9 +99,9 @@ class MatchmakingSessionResult
{ {
public: public:
class rage::rlSessionDetail m_detail; class rage::rlSessionDetail m_detail;
char pad_03B8[24]; //0x03B8 char pad_03B8[88]; //0x03B8
}; //Size: 0x03D0 }; //Size: 0x03D0
static_assert(sizeof(MatchmakingSessionResult) == 0x490); static_assert(sizeof(MatchmakingSessionResult) == 0x4D0);
class PlayerNameMapNode class PlayerNameMapNode
{ {
@ -178,6 +178,8 @@ static_assert(sizeof(InvitedGamers) == 0xC88);
class Network class Network
{ {
public: public:
bool m_unk;
char pad_0001[0x7];
rage::rlSessionInfo m_steam_unk_session; //0x0000 rage::rlSessionInfo m_steam_unk_session; //0x0000
rage::Obf32 m_num_dinput8_instances; //0x0070 rage::Obf32 m_num_dinput8_instances; //0x0070
rage::Obf32 m_last_time_dinput8_checked; //0x0080 rage::Obf32 m_last_time_dinput8_checked; //0x0080
@ -206,7 +208,7 @@ public:
bool m_was_invited; //0xB3FD bool m_was_invited; //0xB3FD
char pad_B3FE[26]; //0xB3FE TODO: the reclass file is broken char pad_B3FE[26]; //0xB3FE TODO: the reclass file is broken
class rage::rlSessionInfo m_unk_session_info; //0xB408 class rage::rlSessionInfo m_unk_session_info; //0xB408
char pad_B4D8[635]; //0xB4D8 char pad_B4D8[643]; //0xB4D8
bool m_need_host_change; //0xB753 bool m_need_host_change; //0xB753
char pad_B754[74316]; //0xB754 char pad_B754[74316]; //0xB754
class rage::rlSessionDetail m_joining_session_detail; //0x1D9A0 class rage::rlSessionDetail m_joining_session_detail; //0x1D9A0
@ -238,6 +240,9 @@ public:
class rage::rlGamerHandle m_inviter_handle; //0x2DCE0 class rage::rlGamerHandle m_inviter_handle; //0x2DCE0
class CNetComplaintMgr m_game_complaint_mgr; //0x2DCF0 class CNetComplaintMgr m_game_complaint_mgr; //0x2DCF0
class CNetComplaintMgr m_transition_complaint_mgr; //0x2EB88 class CNetComplaintMgr m_transition_complaint_mgr; //0x2EB88
// fields beyond this point are likely outdated!
char pad_2FA20[32]; //0x2FA20 char pad_2FA20[32]; //0x2FA20
class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x2FA40 class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x2FA40
char pad_31048[8]; //0x31048 char pad_31048[8]; //0x31048
@ -280,5 +285,5 @@ public:
uint32_t m_follower_count; //0x49EE0 uint32_t m_follower_count; //0x49EE0
char pad_49EE4[628]; //0x49EE4 char pad_49EE4[628]; //0x49EE4
}; //Size: 0x38650 }; //Size: 0x38650
static_assert(sizeof(Network) == 0x4A168); static_assert(sizeof(Network) == 0x4A678);
#pragma pack(pop) #pragma pack(pop)

View File

@ -19,10 +19,11 @@ namespace rage
virtual void reset(); virtual void reset();
virtual bool is_valid(); virtual bool is_valid();
virtual const char* get_name(); virtual const char* get_name();
virtual void _0x50(); virtual std::uint64_t get_host_token();
virtual void _0x58();
virtual bool is_host(); virtual bool is_host();
virtual rage::rlGamerInfo* get_net_data(); virtual rage::rlGamerInfo* get_net_data();
virtual void _0x68(); virtual void _0x70();
char pad_0008[8]; //0x0008 char pad_0008[8]; //0x0008
CNonPhysicalPlayerData* m_non_physical_player; //0x0010 CNonPhysicalPlayerData* m_non_physical_player; //0x0010

View File

@ -456,9 +456,16 @@ struct SALVAGE_YARD_DATA
}; };
static_assert(sizeof(SALVAGE_YARD_DATA) == 7 * 8); static_assert(sizeof(SALVAGE_YARD_DATA) == 7 * 8);
struct BAIL_SHOP_DATA
{
SCR_INT Index;
uint64_t PAD_0001[12];
};
static_assert(sizeof(BAIL_SHOP_DATA) == 13 * 8);
struct PROPERTY_DATA struct PROPERTY_DATA
{ {
SCR_ARRAY<uint64_t, 31> PropertyIds; // size 30 -> 31 b3095 SCR_ARRAY<uint64_t, 32> PropertyIds; // size 30 -> 31 b3095, size 31 -> 32 b3258
SCR_BITSET<ePropertyInteriorFlags>Flags; // I really don't want to indent everything again SCR_BITSET<ePropertyInteriorFlags>Flags; // I really don't want to indent everything again
SCR_INT RingingPlayers; // bitset of players requesting entry into property SCR_INT RingingPlayers; // bitset of players requesting entry into property
SCR_INT Index; // the value you pass to the send to apartment TSE SCR_INT Index; // the value you pass to the send to apartment TSE
@ -467,7 +474,7 @@ struct PROPERTY_DATA
PLAYER_INDEX ExteriorOwner; PLAYER_INDEX ExteriorOwner;
SCR_ARRAY<uint64_t, 32> RingingPlayersState; // 0 = ringing, 1 = accepted, 2 = denied SCR_ARRAY<uint64_t, 32> RingingPlayersState; // 0 = ringing, 1 = accepted, 2 = denied
GAMER_HANDLE OwnerHandle; // can be used to bypass RID spoofing when player is inside interior GAMER_HANDLE OwnerHandle; // can be used to bypass RID spoofing when player is inside interior
SCR_ARRAY<uint64_t, 31> EclipseTheme; // size 30 -> 31 b3095 SCR_ARRAY<uint64_t, 32> EclipseTheme; // size 30 -> 31 b3095, size 31 -> 32 b3258
SCR_INT ApartmentType; // normal vs stilt vs eclipse SCR_INT ApartmentType; // normal vs stilt vs eclipse
SCR_INT OwnerInstance; // same as Instance in most cases SCR_INT OwnerInstance; // same as Instance in most cases
SCR_ARRAY<EXEC_WAREHOUSE_INFO, 5> ExecutiveWarehouseInfos; SCR_ARRAY<EXEC_WAREHOUSE_INFO, 5> ExecutiveWarehouseInfos;
@ -540,8 +547,9 @@ struct PROPERTY_DATA
VEHICLE_INDEX CurrentlyModdingVehicleFixerHQ; VEHICLE_INDEX CurrentlyModdingVehicleFixerHQ;
MULTI_STOREY_GARAGE_DATA MultiStoreyGarageData; // @507 as of 1.67 MULTI_STOREY_GARAGE_DATA MultiStoreyGarageData; // @507 as of 1.67
SCR_INT FreakshopBits; // 0: has weapon workshop, 1: radio enabled SCR_INT FreakshopBits; // 0: has weapon workshop, 1: radio enabled
BAIL_SHOP_DATA BailShopData;
}; };
static_assert(sizeof(PROPERTY_DATA) == 523 * 8); static_assert(sizeof(PROPERTY_DATA) == 538 * 8);
struct BIKER_CONTRACTS struct BIKER_CONTRACTS
{ {
@ -585,6 +593,7 @@ struct GPBD_FM_Entry
TEXT_LABEL_63 JobName; TEXT_LABEL_63 JobName;
SCR_ARRAY<uint64_t, 2> ActiveGunRange; // this should have really been an enum lol SCR_ARRAY<uint64_t, 2> ActiveGunRange; // this should have really been an enum lol
MP_SCRIPT_DATA MissionScriptData; MP_SCRIPT_DATA MissionScriptData;
SCR_BOOL PAD_0057; // added b3258, some mission thing
JOB_SETTINGS JobSettings; JOB_SETTINGS JobSettings;
SCR_INT FMMCLauncherState; SCR_INT FMMCLauncherState;
VEHICLE_SELECTION VehicleSelection; VEHICLE_SELECTION VehicleSelection;
@ -643,17 +652,17 @@ struct GPBD_FM_Entry
SCR_INT PAD_0837; // some more aircraft flags SCR_INT PAD_0837; // some more aircraft flags
SCR_BOOL RespawningToPreviousCheckpoint; SCR_BOOL RespawningToPreviousCheckpoint;
NIGHTCLUB_SALE NightclubSale; NIGHTCLUB_SALE NightclubSale;
uint64_t PAD_844[11]; // unused, all of them uint64_t PAD_844;
SCR_INT SeatingIndex; SCR_INT SeatingIndex;
ARENA_WAR_DATA ArenaWarData; // @858 as of 1.67 ARENA_WAR_DATA ArenaWarData; // @858 as of 1.67
uint64_t PAD_0861[2]; uint64_t PAD_0861[2];
SCR_INT ApartmentEnterFlags; SCR_INT ApartmentEnterFlags;
SCR_VEC3 AvengerMissionStartPosition; SCR_VEC3 AvengerMissionStartPosition;
}; };
static_assert(sizeof(GPBD_FM_Entry) == 877 * 8); static_assert(sizeof(GPBD_FM_Entry) == 883 * 8);
struct GPBD_FM struct GPBD_FM
{ {
SCR_ARRAY<GPBD_FM_Entry, 32> Entries; SCR_ARRAY<GPBD_FM_Entry, 32> Entries;
}; };
static_assert(sizeof(GPBD_FM) == 28065 * 8); static_assert(sizeof(GPBD_FM) == 28257 * 8);

View File

@ -212,7 +212,7 @@ struct BOSS_GOON
uint64_t PAD_0183[4]; // TODO some unknown contraband struct uint64_t PAD_0183[4]; // TODO some unknown contraband struct
VEHICLE_EXPORT VehicleExport; VEHICLE_EXPORT VehicleExport;
uint64_t PAD_0193[12]; // TODO uint64_t PAD_0193[12]; // TODO
SCR_ARRAY<uint64_t, 7> ActiveFreemodeEvents; // force thunder SCR_ARRAY<uint64_t, 8> ActiveFreemodeEvents; // force thunder, size 7 -> 8 b3258
uint64_t PAD_0212[22]; // I'm not even going to bother with this one uint64_t PAD_0212[22]; // I'm not even going to bother with this one
HANGAR_CARGO HangarCargo; HANGAR_CARGO HangarCargo;
uint64_t PAD_0236[23]; // not going to bother with this one either uint64_t PAD_0236[23]; // not going to bother with this one either
@ -280,7 +280,7 @@ struct BOSS_GOON
uint64_t PAD_0478[18]; // TODO uint64_t PAD_0478[18]; // TODO
SCR_BOOL DoubleActionCacheLocationRevealed; SCR_BOOL DoubleActionCacheLocationRevealed;
}; };
static_assert(sizeof(BOSS_GOON) == 498 * 8); static_assert(sizeof(BOSS_GOON) == 499 * 8);
struct MC_STATS struct MC_STATS
{ {
@ -348,10 +348,10 @@ struct GBPD_FM_3_Entry
SCR_INT CasinoFlowProgress; SCR_INT CasinoFlowProgress;
SCR_ARRAY<uint64_t, 1> DailyObjectiveFlags; // @607 as of 1.67 SCR_ARRAY<uint64_t, 1> DailyObjectiveFlags; // @607 as of 1.67
}; };
static_assert(sizeof(GBPD_FM_3_Entry) == 609 * 8); static_assert(sizeof(GBPD_FM_3_Entry) == 610 * 8);
struct GPBD_FM_3 struct GPBD_FM_3
{ {
SCR_ARRAY<GBPD_FM_3_Entry, 32> Entries; SCR_ARRAY<GBPD_FM_3_Entry, 32> Entries;
}; };
static_assert(sizeof(GPBD_FM_3) == 19489 * 8); static_assert(sizeof(GPBD_FM_3) == 19521 * 8);

View File

@ -63,4 +63,4 @@ struct GSBD_FM
BIKER_CONTRACTS_SERVER BikerContracts; BIKER_CONTRACTS_SERVER BikerContracts;
SCR_ARRAY<uint64_t, 32> DoubleActionCacheLocationRevealed; SCR_ARRAY<uint64_t, 32> DoubleActionCacheLocationRevealed;
}; };
static_assert(sizeof(GSBD_FM) == 642 * 8); static_assert(sizeof(GSBD_FM) == 643 * 8);

View File

@ -479,6 +479,7 @@ struct SMPL_INTERIOR_DATA
SCR_INT Flags5; SCR_INT Flags5;
SCR_INT Flags6; SCR_INT Flags6;
SCR_INT Flags7; SCR_INT Flags7;
SCR_INT Flags8; // added b3258
alignas(8) eSimpleInteriorIndex Index; alignas(8) eSimpleInteriorIndex Index;
SCR_INT InstanceId; SCR_INT InstanceId;
SCR_INT AllowedGoons; SCR_INT AllowedGoons;
@ -496,7 +497,7 @@ struct SMPL_INTERIOR_DATA
SCR_INT MissionSpawnSimpleInteriorIndex; SCR_INT MissionSpawnSimpleInteriorIndex;
SCR_INT InteriorSubtype; // nightclub vs nightclub garage etc SCR_INT InteriorSubtype; // nightclub vs nightclub garage etc
}; };
static_assert(sizeof(SMPL_INTERIOR_DATA) == 29 * 8); static_assert(sizeof(SMPL_INTERIOR_DATA) == 30 * 8);
// yes there's a struct for leaving your clubhouse // yes there's a struct for leaving your clubhouse
struct LEAVE_CLUBHOUSE struct LEAVE_CLUBHOUSE
@ -546,6 +547,7 @@ struct GlobalPlayerBDEntry
NETWORK_INDEX DeliveryMechanicNetId4; // another one... NETWORK_INDEX DeliveryMechanicNetId4; // another one...
NETWORK_INDEX AcidLabNetId; NETWORK_INDEX AcidLabNetId;
NETWORK_INDEX DeliveryBikeNetId; NETWORK_INDEX DeliveryBikeNetId;
NETWORK_INDEX BountyTransporterNetId; // added b3258
SCR_BOOL PAD_0057; SCR_BOOL PAD_0057;
uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts
PLAYER_BLIP PlayerBlip; PLAYER_BLIP PlayerBlip;
@ -660,10 +662,10 @@ struct GlobalPlayerBDEntry
SCR_BOOL CanSpawnGunVan; SCR_BOOL CanSpawnGunVan;
}; };
static_assert(sizeof(GlobalPlayerBDEntry) == 463 * 8); static_assert(sizeof(GlobalPlayerBDEntry) == 465 * 8);
struct GlobalPlayerBD struct GlobalPlayerBD
{ {
SCR_ARRAY<GlobalPlayerBDEntry, 32> Entries; SCR_ARRAY<GlobalPlayerBDEntry, 32> Entries;
}; };
static_assert(sizeof(GlobalPlayerBD) == 14817 * 8); static_assert(sizeof(GlobalPlayerBD) == 14881 * 8);

View File

@ -1,16 +1,16 @@
#pragma once #pragma once
#include "../types.hpp" #include "../types.hpp"
#include "../Timer.hpp" #include "../Timer.hpp"
struct g_AMC_playerBD_Entry struct g_AMC_playerBD_Entry
{ {
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<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 SCR_ARRAY<uint64_t, NUM_CONTACTS> ContactServiceCooldowns; // same as above
}; };
static_assert(sizeof(g_AMC_playerBD_Entry) == 242 * 8); static_assert(sizeof(g_AMC_playerBD_Entry) == 245 * 8);
struct g_AMC_playerBD struct g_AMC_playerBD
{ {
SCR_ARRAY<g_AMC_playerBD_Entry, 32> Entries; SCR_ARRAY<g_AMC_playerBD_Entry, 32> Entries;
}; };
static_assert(sizeof(g_AMC_playerBD) == 7745 * 8); static_assert(sizeof(g_AMC_playerBD) == 7841 * 8);

View File

@ -1,103 +1,103 @@
#pragma once #pragma once
#include <cstdint> #include <cstdint>
#include "scrVector.hpp" #include "scrVector.hpp"
#ifndef BOOL #ifndef BOOL
#define BOOL int #define BOOL int
#endif #endif
using Void = void; using Void = void;
using Any = int; using Any = int;
using Hash = std::uint32_t; using Hash = std::uint32_t;
using Entity = std::int32_t; using Entity = std::int32_t;
using Player = std::int32_t; using Player = std::int32_t;
using FireId = std::int32_t; using FireId = std::int32_t;
using Interior = std::int32_t; using Interior = std::int32_t;
using Ped = Entity; using Ped = Entity;
using Vehicle = Entity; using Vehicle = Entity;
using Cam = std::int32_t; using Cam = std::int32_t;
using Object = Entity; using Object = Entity;
using Pickup = Object; using Pickup = Object;
using Blip = std::int32_t; using Blip = std::int32_t;
using Camera = Entity; using Camera = Entity;
using ScrHandle = Entity; using ScrHandle = Entity;
using Vector3 = rage::scrVector; using Vector3 = rage::scrVector;
#define PLAYER_INDEX alignas(8) Player #define PLAYER_INDEX alignas(8) Player
#define ENTITY_INDEX alignas(8) Entity #define ENTITY_INDEX alignas(8) Entity
#define PED_INDEX alignas(8) Ped #define PED_INDEX alignas(8) Ped
#define VEHICLE_INDEX alignas(8) Vehicle #define VEHICLE_INDEX alignas(8) Vehicle
#define INTERIOR_INDEX alignas(8) Interior #define INTERIOR_INDEX alignas(8) Interior
#define NETWORK_INDEX alignas(8) int #define NETWORK_INDEX alignas(8) int
#define SCR_HASH alignas(8) Hash #define SCR_HASH alignas(8) Hash
#define SCR_INT alignas(8) int #define SCR_INT alignas(8) int
#define SCR_BOOL alignas(8) BOOL #define SCR_BOOL alignas(8) BOOL
#define SCR_FLOAT alignas(8) float #define SCR_FLOAT alignas(8) float
#define SCR_VEC3 Vector3 #define SCR_VEC3 Vector3
template <int SIZE> template <int SIZE>
struct SCR_TEXT_LABEL struct SCR_TEXT_LABEL
{ {
alignas(8) char Data[SIZE]; alignas(8) char Data[SIZE];
private: private:
alignas(8) char _PAD[SIZE]; alignas(8) char _PAD[SIZE];
public: public:
operator char* () { return Data; } operator char* () { return Data; }
}; };
#define TEXT_LABEL_15 SCR_TEXT_LABEL<16> #define TEXT_LABEL_15 SCR_TEXT_LABEL<16>
#define TEXT_LABEL_23 SCR_TEXT_LABEL<24> #define TEXT_LABEL_23 SCR_TEXT_LABEL<24>
#define TEXT_LABEL_31 SCR_TEXT_LABEL<32> #define TEXT_LABEL_31 SCR_TEXT_LABEL<32>
#define TEXT_LABEL_63 SCR_TEXT_LABEL<64> #define TEXT_LABEL_63 SCR_TEXT_LABEL<64>
template <typename T, int SIZE> template <typename T, int SIZE>
struct SCR_ARRAY struct SCR_ARRAY
{ {
SCR_INT Size; SCR_INT Size;
alignas(8) T Data[SIZE]; alignas(8) T Data[SIZE];
T& operator [](int index) T& operator [](int index)
{ {
return Data[index]; return Data[index];
} }
}; };
template <typename T> template <typename T>
struct SCR_BITSET struct SCR_BITSET
{ {
alignas(8) int Value; alignas(8) int Value;
bool IsSet(T val) bool IsSet(T val)
{ {
return Value & (1 << (int)val); return Value & (1 << (int)val);
} }
void Set(T val) void Set(T val)
{ {
Value |= (1 << (int)val); Value |= (1 << (int)val);
} }
void Clear(T val) void Clear(T val)
{ {
Value &= ~(1 << (int)val); Value &= ~(1 << (int)val);
} }
}; };
struct Color3 struct Color3
{ {
SCR_INT R; SCR_INT R;
SCR_INT G; SCR_INT G;
SCR_INT B; SCR_INT B;
}; };
static_assert(sizeof(Color3) == 3 * 8); static_assert(sizeof(Color3) == 3 * 8);
// serialized bitbuffer data of rage::rlGamerHandle + some padding for last gen compatibility // serialized bitbuffer data of rage::rlGamerHandle + some padding for last gen compatibility
struct GAMER_HANDLE struct GAMER_HANDLE
{ {
private: private:
uint64_t Data[13]; uint64_t Data[13];
}; };
static_assert(sizeof(GAMER_HANDLE) == 13 * 8); static_assert(sizeof(GAMER_HANDLE) == 13 * 8);
#define NUM_CONTACTS 80 #define NUM_CONTACTS 81