GTAV-Classes-private/script/globals/GPBD_FM_3.hpp
2024-09-25 12:11:17 +00:00

357 lines
No EOL
14 KiB
C++

#pragma once
#include "../types.hpp"
#include "../Timer.hpp"
#include "../HudColor.hpp"
#include "../MPScriptData.hpp"
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
};
enum class eBossGoonFlags
{
kOneOnOneDM = 4,
kJoinSuccess = 7,
kJoinFail = 8,
kSpectating = 24
};
enum class eGoonInviteType
{
DEBUG,
NEARBY,
FRIENDS,
CREW,
INDIVIDUAL,
LOOKING_FOR_WORK
};
enum class eBossVehicleState
{
NONE,
SPAWNED,
DESTROYED = 3
};
enum class eMCRole
{
PROSPECT = -1,
VICE_PRESIDENT,
ROAD_CAPTAIN,
SERGEANT_IN_ARMS,
ENFORCER
};
enum class eClubhouseActivity
{
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
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
};
static_assert(sizeof(VEHICLE_EXPORT) == 6 * 8);
struct HANGAR_CARGO
{
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
};
static_assert(sizeof(CASINO_HEIST_PREP) == 3 * 8);
struct LEAVE_IN_HELI
{
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; // @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, 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
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) == 499 * 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;
};
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; // @607 as of 1.67
};
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) == 19521 * 8);