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_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
|
||||||
|
@ -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)
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
@ -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);
|
@ -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);
|
@ -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);
|
206
script/types.hpp
206
script/types.hpp
@ -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
|
Loading…
Reference in New Issue
Block a user