Update for b3258 (#179)
This commit is contained in:
parent
68551ec2e5
commit
3d41688e9b
@ -29,6 +29,7 @@ public:
|
||||
uint16_t m_mount_id; //0x0142
|
||||
uint16_t m_custodian_id; //0x0144
|
||||
uint16_t unk_0146; // 0x0146
|
||||
uint8_t new_014C;
|
||||
bool m_tint_index; //0x0148
|
||||
char pad_0149; //0x0149
|
||||
uint8_t unk_014A; // 0x014A
|
||||
|
@ -99,9 +99,9 @@ class MatchmakingSessionResult
|
||||
{
|
||||
public:
|
||||
class rage::rlSessionDetail m_detail;
|
||||
char pad_03B8[24]; //0x03B8
|
||||
char pad_03B8[88]; //0x03B8
|
||||
}; //Size: 0x03D0
|
||||
static_assert(sizeof(MatchmakingSessionResult) == 0x490);
|
||||
static_assert(sizeof(MatchmakingSessionResult) == 0x4D0);
|
||||
|
||||
class PlayerNameMapNode
|
||||
{
|
||||
@ -178,6 +178,8 @@ static_assert(sizeof(InvitedGamers) == 0xC88);
|
||||
class Network
|
||||
{
|
||||
public:
|
||||
bool m_unk;
|
||||
char pad_0001[0x7];
|
||||
rage::rlSessionInfo m_steam_unk_session; //0x0000
|
||||
rage::Obf32 m_num_dinput8_instances; //0x0070
|
||||
rage::Obf32 m_last_time_dinput8_checked; //0x0080
|
||||
@ -206,7 +208,7 @@ public:
|
||||
bool m_was_invited; //0xB3FD
|
||||
char pad_B3FE[26]; //0xB3FE TODO: the reclass file is broken
|
||||
class rage::rlSessionInfo m_unk_session_info; //0xB408
|
||||
char pad_B4D8[635]; //0xB4D8
|
||||
char pad_B4D8[643]; //0xB4D8
|
||||
bool m_need_host_change; //0xB753
|
||||
char pad_B754[74316]; //0xB754
|
||||
class rage::rlSessionDetail m_joining_session_detail; //0x1D9A0
|
||||
@ -238,6 +240,9 @@ public:
|
||||
class rage::rlGamerHandle m_inviter_handle; //0x2DCE0
|
||||
class CNetComplaintMgr m_game_complaint_mgr; //0x2DCF0
|
||||
class CNetComplaintMgr m_transition_complaint_mgr; //0x2EB88
|
||||
|
||||
// fields beyond this point are likely outdated!
|
||||
|
||||
char pad_2FA20[32]; //0x2FA20
|
||||
class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x2FA40
|
||||
char pad_31048[8]; //0x31048
|
||||
@ -280,5 +285,5 @@ public:
|
||||
uint32_t m_follower_count; //0x49EE0
|
||||
char pad_49EE4[628]; //0x49EE4
|
||||
}; //Size: 0x38650
|
||||
static_assert(sizeof(Network) == 0x4A168);
|
||||
static_assert(sizeof(Network) == 0x4A678);
|
||||
#pragma pack(pop)
|
@ -19,10 +19,11 @@ namespace rage
|
||||
virtual void reset();
|
||||
virtual bool is_valid();
|
||||
virtual const char* get_name();
|
||||
virtual void _0x50();
|
||||
virtual std::uint64_t get_host_token();
|
||||
virtual void _0x58();
|
||||
virtual bool is_host();
|
||||
virtual rage::rlGamerInfo* get_net_data();
|
||||
virtual void _0x68();
|
||||
virtual void _0x70();
|
||||
|
||||
char pad_0008[8]; //0x0008
|
||||
CNonPhysicalPlayerData* m_non_physical_player; //0x0010
|
||||
|
@ -456,9 +456,16 @@ struct SALVAGE_YARD_DATA
|
||||
};
|
||||
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
|
||||
{
|
||||
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_INT RingingPlayers; // bitset of players requesting entry into property
|
||||
SCR_INT Index; // the value you pass to the send to apartment TSE
|
||||
@ -467,7 +474,7 @@ struct PROPERTY_DATA
|
||||
PLAYER_INDEX ExteriorOwner;
|
||||
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
|
||||
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 OwnerInstance; // same as Instance in most cases
|
||||
SCR_ARRAY<EXEC_WAREHOUSE_INFO, 5> ExecutiveWarehouseInfos;
|
||||
@ -540,8 +547,9 @@ struct PROPERTY_DATA
|
||||
VEHICLE_INDEX CurrentlyModdingVehicleFixerHQ;
|
||||
MULTI_STOREY_GARAGE_DATA MultiStoreyGarageData; // @507 as of 1.67
|
||||
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
|
||||
{
|
||||
@ -585,6 +593,7 @@ struct GPBD_FM_Entry
|
||||
TEXT_LABEL_63 JobName;
|
||||
SCR_ARRAY<uint64_t, 2> ActiveGunRange; // this should have really been an enum lol
|
||||
MP_SCRIPT_DATA MissionScriptData;
|
||||
SCR_BOOL PAD_0057; // added b3258, some mission thing
|
||||
JOB_SETTINGS JobSettings;
|
||||
SCR_INT FMMCLauncherState;
|
||||
VEHICLE_SELECTION VehicleSelection;
|
||||
@ -643,17 +652,17 @@ struct GPBD_FM_Entry
|
||||
SCR_INT PAD_0837; // some more aircraft flags
|
||||
SCR_BOOL RespawningToPreviousCheckpoint;
|
||||
NIGHTCLUB_SALE NightclubSale;
|
||||
uint64_t PAD_844[11]; // unused, all of them
|
||||
uint64_t PAD_844;
|
||||
SCR_INT SeatingIndex;
|
||||
ARENA_WAR_DATA ArenaWarData; // @858 as of 1.67
|
||||
uint64_t PAD_0861[2];
|
||||
SCR_INT ApartmentEnterFlags;
|
||||
SCR_VEC3 AvengerMissionStartPosition;
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM_Entry) == 877 * 8);
|
||||
static_assert(sizeof(GPBD_FM_Entry) == 883 * 8);
|
||||
|
||||
struct GPBD_FM
|
||||
{
|
||||
SCR_ARRAY<GPBD_FM_Entry, 32> Entries;
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM) == 28065 * 8);
|
||||
static_assert(sizeof(GPBD_FM) == 28257 * 8);
|
||||
|
@ -212,7 +212,7 @@ struct BOSS_GOON
|
||||
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
|
||||
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
|
||||
HANGAR_CARGO HangarCargo;
|
||||
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
|
||||
SCR_BOOL DoubleActionCacheLocationRevealed;
|
||||
};
|
||||
static_assert(sizeof(BOSS_GOON) == 498 * 8);
|
||||
static_assert(sizeof(BOSS_GOON) == 499 * 8);
|
||||
|
||||
struct MC_STATS
|
||||
{
|
||||
@ -348,10 +348,10 @@ struct GBPD_FM_3_Entry
|
||||
SCR_INT CasinoFlowProgress;
|
||||
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
|
||||
{
|
||||
SCR_ARRAY<GBPD_FM_3_Entry, 32> Entries;
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM_3) == 19489 * 8);
|
||||
static_assert(sizeof(GPBD_FM_3) == 19521 * 8);
|
@ -63,4 +63,4 @@ struct GSBD_FM
|
||||
BIKER_CONTRACTS_SERVER BikerContracts;
|
||||
SCR_ARRAY<uint64_t, 32> DoubleActionCacheLocationRevealed;
|
||||
};
|
||||
static_assert(sizeof(GSBD_FM) == 642 * 8);
|
||||
static_assert(sizeof(GSBD_FM) == 643 * 8);
|
@ -479,6 +479,7 @@ struct SMPL_INTERIOR_DATA
|
||||
SCR_INT Flags5;
|
||||
SCR_INT Flags6;
|
||||
SCR_INT Flags7;
|
||||
SCR_INT Flags8; // added b3258
|
||||
alignas(8) eSimpleInteriorIndex Index;
|
||||
SCR_INT InstanceId;
|
||||
SCR_INT AllowedGoons;
|
||||
@ -496,7 +497,7 @@ struct SMPL_INTERIOR_DATA
|
||||
SCR_INT MissionSpawnSimpleInteriorIndex;
|
||||
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
|
||||
struct LEAVE_CLUBHOUSE
|
||||
@ -546,6 +547,7 @@ struct GlobalPlayerBDEntry
|
||||
NETWORK_INDEX DeliveryMechanicNetId4; // another one...
|
||||
NETWORK_INDEX AcidLabNetId;
|
||||
NETWORK_INDEX DeliveryBikeNetId;
|
||||
NETWORK_INDEX BountyTransporterNetId; // added b3258
|
||||
SCR_BOOL PAD_0057;
|
||||
uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts
|
||||
PLAYER_BLIP PlayerBlip;
|
||||
@ -660,10 +662,10 @@ struct GlobalPlayerBDEntry
|
||||
SCR_BOOL CanSpawnGunVan;
|
||||
};
|
||||
|
||||
static_assert(sizeof(GlobalPlayerBDEntry) == 463 * 8);
|
||||
static_assert(sizeof(GlobalPlayerBDEntry) == 465 * 8);
|
||||
|
||||
struct GlobalPlayerBD
|
||||
{
|
||||
SCR_ARRAY<GlobalPlayerBDEntry, 32> Entries;
|
||||
};
|
||||
static_assert(sizeof(GlobalPlayerBD) == 14817 * 8);
|
||||
static_assert(sizeof(GlobalPlayerBD) == 14881 * 8);
|
@ -1,16 +1,16 @@
|
||||
#pragma once
|
||||
#include "../types.hpp"
|
||||
#include "../Timer.hpp"
|
||||
|
||||
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<uint64_t, NUM_CONTACTS> ContactServiceCooldowns; // same as above
|
||||
};
|
||||
static_assert(sizeof(g_AMC_playerBD_Entry) == 242 * 8);
|
||||
|
||||
struct g_AMC_playerBD
|
||||
{
|
||||
SCR_ARRAY<g_AMC_playerBD_Entry, 32> Entries;
|
||||
};
|
||||
static_assert(sizeof(g_AMC_playerBD) == 7745 * 8);
|
||||
#pragma once
|
||||
#include "../types.hpp"
|
||||
#include "../Timer.hpp"
|
||||
|
||||
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<uint64_t, NUM_CONTACTS> ContactServiceCooldowns; // same as above
|
||||
};
|
||||
static_assert(sizeof(g_AMC_playerBD_Entry) == 245 * 8);
|
||||
|
||||
struct g_AMC_playerBD
|
||||
{
|
||||
SCR_ARRAY<g_AMC_playerBD_Entry, 32> Entries;
|
||||
};
|
||||
static_assert(sizeof(g_AMC_playerBD) == 7841 * 8);
|
206
script/types.hpp
206
script/types.hpp
@ -1,103 +1,103 @@
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
#include "scrVector.hpp"
|
||||
|
||||
#ifndef BOOL
|
||||
#define BOOL int
|
||||
#endif
|
||||
|
||||
using Void = void;
|
||||
using Any = int;
|
||||
using Hash = std::uint32_t;
|
||||
using Entity = std::int32_t;
|
||||
using Player = std::int32_t;
|
||||
using FireId = std::int32_t;
|
||||
using Interior = std::int32_t;
|
||||
using Ped = Entity;
|
||||
using Vehicle = Entity;
|
||||
using Cam = std::int32_t;
|
||||
using Object = Entity;
|
||||
using Pickup = Object;
|
||||
using Blip = std::int32_t;
|
||||
using Camera = Entity;
|
||||
using ScrHandle = Entity;
|
||||
using Vector3 = rage::scrVector;
|
||||
|
||||
#define PLAYER_INDEX alignas(8) Player
|
||||
#define ENTITY_INDEX alignas(8) Entity
|
||||
#define PED_INDEX alignas(8) Ped
|
||||
#define VEHICLE_INDEX alignas(8) Vehicle
|
||||
#define INTERIOR_INDEX alignas(8) Interior
|
||||
#define NETWORK_INDEX alignas(8) int
|
||||
|
||||
#define SCR_HASH alignas(8) Hash
|
||||
#define SCR_INT alignas(8) int
|
||||
#define SCR_BOOL alignas(8) BOOL
|
||||
#define SCR_FLOAT alignas(8) float
|
||||
#define SCR_VEC3 Vector3
|
||||
|
||||
template <int SIZE>
|
||||
struct SCR_TEXT_LABEL
|
||||
{
|
||||
alignas(8) char Data[SIZE];
|
||||
private:
|
||||
alignas(8) char _PAD[SIZE];
|
||||
public:
|
||||
operator char* () { return Data; }
|
||||
};
|
||||
|
||||
#define TEXT_LABEL_15 SCR_TEXT_LABEL<16>
|
||||
#define TEXT_LABEL_23 SCR_TEXT_LABEL<24>
|
||||
#define TEXT_LABEL_31 SCR_TEXT_LABEL<32>
|
||||
#define TEXT_LABEL_63 SCR_TEXT_LABEL<64>
|
||||
|
||||
template <typename T, int SIZE>
|
||||
struct SCR_ARRAY
|
||||
{
|
||||
SCR_INT Size;
|
||||
alignas(8) T Data[SIZE];
|
||||
|
||||
T& operator [](int index)
|
||||
{
|
||||
return Data[index];
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct SCR_BITSET
|
||||
{
|
||||
alignas(8) int Value;
|
||||
|
||||
bool IsSet(T val)
|
||||
{
|
||||
return Value & (1 << (int)val);
|
||||
}
|
||||
|
||||
void Set(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;
|
||||
};
|
||||
static_assert(sizeof(Color3) == 3 * 8);
|
||||
|
||||
// serialized bitbuffer data of rage::rlGamerHandle + some padding for last gen compatibility
|
||||
struct GAMER_HANDLE
|
||||
{
|
||||
private:
|
||||
uint64_t Data[13];
|
||||
};
|
||||
static_assert(sizeof(GAMER_HANDLE) == 13 * 8);
|
||||
|
||||
#define NUM_CONTACTS 80
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
#include "scrVector.hpp"
|
||||
|
||||
#ifndef BOOL
|
||||
#define BOOL int
|
||||
#endif
|
||||
|
||||
using Void = void;
|
||||
using Any = int;
|
||||
using Hash = std::uint32_t;
|
||||
using Entity = std::int32_t;
|
||||
using Player = std::int32_t;
|
||||
using FireId = std::int32_t;
|
||||
using Interior = std::int32_t;
|
||||
using Ped = Entity;
|
||||
using Vehicle = Entity;
|
||||
using Cam = std::int32_t;
|
||||
using Object = Entity;
|
||||
using Pickup = Object;
|
||||
using Blip = std::int32_t;
|
||||
using Camera = Entity;
|
||||
using ScrHandle = Entity;
|
||||
using Vector3 = rage::scrVector;
|
||||
|
||||
#define PLAYER_INDEX alignas(8) Player
|
||||
#define ENTITY_INDEX alignas(8) Entity
|
||||
#define PED_INDEX alignas(8) Ped
|
||||
#define VEHICLE_INDEX alignas(8) Vehicle
|
||||
#define INTERIOR_INDEX alignas(8) Interior
|
||||
#define NETWORK_INDEX alignas(8) int
|
||||
|
||||
#define SCR_HASH alignas(8) Hash
|
||||
#define SCR_INT alignas(8) int
|
||||
#define SCR_BOOL alignas(8) BOOL
|
||||
#define SCR_FLOAT alignas(8) float
|
||||
#define SCR_VEC3 Vector3
|
||||
|
||||
template <int SIZE>
|
||||
struct SCR_TEXT_LABEL
|
||||
{
|
||||
alignas(8) char Data[SIZE];
|
||||
private:
|
||||
alignas(8) char _PAD[SIZE];
|
||||
public:
|
||||
operator char* () { return Data; }
|
||||
};
|
||||
|
||||
#define TEXT_LABEL_15 SCR_TEXT_LABEL<16>
|
||||
#define TEXT_LABEL_23 SCR_TEXT_LABEL<24>
|
||||
#define TEXT_LABEL_31 SCR_TEXT_LABEL<32>
|
||||
#define TEXT_LABEL_63 SCR_TEXT_LABEL<64>
|
||||
|
||||
template <typename T, int SIZE>
|
||||
struct SCR_ARRAY
|
||||
{
|
||||
SCR_INT Size;
|
||||
alignas(8) T Data[SIZE];
|
||||
|
||||
T& operator [](int index)
|
||||
{
|
||||
return Data[index];
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct SCR_BITSET
|
||||
{
|
||||
alignas(8) int Value;
|
||||
|
||||
bool IsSet(T val)
|
||||
{
|
||||
return Value & (1 << (int)val);
|
||||
}
|
||||
|
||||
void Set(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;
|
||||
};
|
||||
static_assert(sizeof(Color3) == 3 * 8);
|
||||
|
||||
// serialized bitbuffer data of rage::rlGamerHandle + some padding for last gen compatibility
|
||||
struct GAMER_HANDLE
|
||||
{
|
||||
private:
|
||||
uint64_t Data[13];
|
||||
};
|
||||
static_assert(sizeof(GAMER_HANDLE) == 13 * 8);
|
||||
|
||||
#define NUM_CONTACTS 81
|
Loading…
Reference in New Issue
Block a user