diff --git a/script/CGameScriptHandlerNetComponent.hpp b/script/CGameScriptHandlerNetComponent.hpp index d22f11c..98f8b04 100644 --- a/script/CGameScriptHandlerNetComponent.hpp +++ b/script/CGameScriptHandlerNetComponent.hpp @@ -101,6 +101,7 @@ public: CNetGamePlayer* m_host_migration_target; CNetGamePlayer* m_apparent_host_player; char gap60[8]; + char new_68[8]; // added b3407 CScriptParticipant* m_participants[32]; char pad_0168[8]; int m_next_host_verify_time; @@ -137,5 +138,5 @@ public: return m_host->m_net_game_player; } }; -static_assert(sizeof(CGameScriptHandlerNetComponent) == 0x1A8); -#pragma pack(pop) \ No newline at end of file +static_assert(sizeof(CGameScriptHandlerNetComponent) == 0x1B0); +#pragma pack(pop) diff --git a/script/globals/GPBD_FM.hpp b/script/globals/GPBD_FM.hpp index adb4e88..13ccce7 100644 --- a/script/globals/GPBD_FM.hpp +++ b/script/globals/GPBD_FM.hpp @@ -357,7 +357,7 @@ static_assert(sizeof(ARENA_GARAGE_DATA) == 9 * 8); struct INSIDE_TRACK { - TEXT_LABEL_63 PlayerName; // real name leak when playing inside track + TEXT_LABEL_63 PlayerName; SCR_INT BetHorseID; SCR_INT BetChips; }; @@ -459,13 +459,32 @@ static_assert(sizeof(SALVAGE_YARD_DATA) == 7 * 8); struct BAIL_SHOP_DATA { SCR_INT Index; - uint64_t PAD_0001[12]; + uint64_t PAD_0001[11]; // a field was removed in b3407 }; -static_assert(sizeof(BAIL_SHOP_DATA) == 13 * 8); +static_assert(sizeof(BAIL_SHOP_DATA) == 12 * 8); + +struct HACKER_DEN_DATA +{ + SCR_INT Index; // always one for obvious reasons + SCR_INT Flags; + SCR_INT SafeCashValue; +}; +static_assert(sizeof(HACKER_DEN_DATA) == 3 * 8); + +struct FIELD_HANGAR_DATA +{ + SCR_INT Index; + SCR_INT Flags; +}; +static_assert(sizeof(FIELD_HANGAR_DATA) == 2 * 8); + +#define NUM_PROPERTY_INTERIORS 33 // (30 -> 31) b3095 + // (31 -> 32) b3258 + // (32 -> 33) b3407 struct PROPERTY_DATA { - SCR_ARRAY PropertyIds; // size 30 -> 31 b3095, size 31 -> 32 b3258 + SCR_ARRAY PropertyIds; SCR_BITSETFlags; // 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 @@ -474,7 +493,7 @@ struct PROPERTY_DATA PLAYER_INDEX ExteriorOwner; SCR_ARRAY RingingPlayersState; // 0 = ringing, 1 = accepted, 2 = denied GAMER_HANDLE OwnerHandle; // can be used to bypass RID spoofing when player is inside interior - SCR_ARRAY EclipseTheme; // size 30 -> 31 b3095, size 31 -> 32 b3258 + SCR_ARRAY EclipseTheme; SCR_INT ApartmentType; // normal vs stilt vs eclipse SCR_INT OwnerInstance; // same as Instance in most cases SCR_ARRAY ExecutiveWarehouseInfos; @@ -548,8 +567,10 @@ struct PROPERTY_DATA MULTI_STOREY_GARAGE_DATA MultiStoreyGarageData; // @507 as of 1.67 SCR_INT FreakshopBits; // 0: has weapon workshop, 1: radio enabled BAIL_SHOP_DATA BailShopData; + HACKER_DEN_DATA HackerDenData; + FIELD_HANGAR_DATA FieldHangarData; }; -static_assert(sizeof(PROPERTY_DATA) == 538 * 8); +static_assert(sizeof(PROPERTY_DATA) == 544 * 8); struct BIKER_CONTRACTS { @@ -659,10 +680,10 @@ struct GPBD_FM_Entry SCR_INT ApartmentEnterFlags; SCR_VEC3 AvengerMissionStartPosition; }; -static_assert(sizeof(GPBD_FM_Entry) == 883 * 8); +static_assert(sizeof(GPBD_FM_Entry) == 889 * 8); struct GPBD_FM { SCR_ARRAY Entries; }; -static_assert(sizeof(GPBD_FM) == 28257 * 8); +static_assert(sizeof(GPBD_FM) == 28449 * 8); \ No newline at end of file diff --git a/script/globals/GlobalPlayerBD.hpp b/script/globals/GlobalPlayerBD.hpp index 84ac2f0..010a603 100644 --- a/script/globals/GlobalPlayerBD.hpp +++ b/script/globals/GlobalPlayerBD.hpp @@ -140,7 +140,11 @@ enum class eBlipType GRANGER_3600LX, PATRIOT_MILSPEC, ARMS_DEALING_AIR, // requires some flag to be set - BRICKADE_6X6 + BRICKADE_6X6, + RAIJU, + CONADA2, + STEAMER2, + TOW_TRUCK, }; enum class ePlayerStateFlags @@ -394,6 +398,14 @@ enum class eSimpleInteriorIndex SIMPLE_INTERIOR_SALVAGE_YARD_PALETO_BAY, SIMPLE_INTERIOR_SALVAGE_YARD_SANDY_SHORES, SIMPLE_INTERIOR_SALVAGE_YARD_STRAWBERRY, + SIMPLE_INTERIOR_BAIL_OFFICE_DAVIS, + SIMPLE_INTERIOR_BAIL_OFFICE_DEL_PERRO, + SIMPLE_INTERIOR_BAIL_OFFICE_MISSION_ROW, + SIMPLE_INTERIOR_BAIL_OFFICE_PALETO_BAY, + SIMPLE_INTERIOR_BAIL_OFFICE_WEST_VINEWOOD, + SIMPLE_INTERIOR_HACKER_DEN, + SIMPLE_INTERIOR_FIELD_HANGAR, + SIMPLE_INTERIOR_MAX }; struct JOB_STATS @@ -547,15 +559,17 @@ 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 + NETWORK_INDEX BountyTransporterNetId; // added b3258 + NETWORK_INDEX FieldDusterNetId; // added b3407 + SCR_BOOL PAD_0057; // (@59 as of b3407) + uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts PLAYER_BLIP PlayerBlip; - SCR_BOOL NeedToPopulateSessionStartTime; // the session start time is unused - uint64_t PAD_0089[32]; // TODO + SCR_BOOL NeedToPopulateSessionStartTime; // the session start time is unused + uint64_t PAD_0089[33]; // TODO (@91 as of b3407) + // 32 -> 33 (new field) b3407 alignas(8) eMissionType MissionType; SCR_BOOL SpawningVehicle; - uint64_t PAD_0123[3]; // confirmed these are not used by PC scripts + uint64_t PAD_0123[3]; // confirmed these are not used by PC scripts MISSION_BETS MissionBets; SCR_BOOL RadarBlipVisibliltyMechanicEnabled; SCR_BITSET PlayerStateFlags; @@ -662,10 +676,10 @@ struct GlobalPlayerBDEntry SCR_BOOL CanSpawnGunVan; }; -static_assert(sizeof(GlobalPlayerBDEntry) == 465 * 8); +static_assert(sizeof(GlobalPlayerBDEntry) == 467 * 8); struct GlobalPlayerBD { SCR_ARRAY Entries; }; -static_assert(sizeof(GlobalPlayerBD) == 14881 * 8); \ No newline at end of file +static_assert(sizeof(GlobalPlayerBD) == 14945 * 8); \ No newline at end of file