Skip to content

Commit 9a0e591

Browse files
Update PlayerState
1 parent 9f00971 commit 9a0e591

File tree

1 file changed

+58
-58
lines changed

1 file changed

+58
-58
lines changed

FFXIVClientStructs/FFXIV/Client/Game/UI/PlayerState.cs

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace FFXIVClientStructs.FFXIV.Client.Game.UI;
66
// Client::Game::UI::PlayerState
77
// ctor "E8 ?? ?? ?? ?? 33 D2 45 33 E4"
88
[GenerateInterop]
9-
[StructLayout(LayoutKind.Explicit, Size = 0x8B0)]
9+
[StructLayout(LayoutKind.Explicit, Size = 0x8C0)]
1010
public unsafe partial struct PlayerState {
1111
[StaticAddress("48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 84 C0 75 06 F6 43 18 02", 3)]
1212
public static partial PlayerState* Instance();
@@ -79,54 +79,54 @@ public unsafe partial struct PlayerState {
7979

8080
// Size: (MountSheet.Max(row => row.Order) + 7) / 8
8181
/// <remarks> Use <see cref="IsMountUnlocked"/> </remarks>
82-
[FieldOffset(0x2DD), FixedSizeArray] internal FixedSizeArray38<byte> _unlockedMountsBitmask;
82+
[FieldOffset(0x2DD), FixedSizeArray] internal FixedSizeArray39<byte> _unlockedMountsBitmask;
8383
// Size: (OrnamentSheet.RowCount + 7) / 8
8484
/// <remarks> Use <see cref="IsOrnamentUnlocked"/> </remarks>
85-
[FieldOffset(0x303), FixedSizeArray] internal FixedSizeArray7<byte> _unlockedOrnamentsBitmask;
85+
[FieldOffset(0x304), FixedSizeArray] internal FixedSizeArray7<byte> _unlockedOrnamentsBitmask;
8686
// Size: (GlassesStylesSheet.RowCount + 7) / 8
8787
/// <remarks> Use <see cref="IsGlassesUnlocked"/> </remarks>
88-
[FieldOffset(0x30A), FixedSizeArray] internal FixedSizeArray4<byte> _unlockedGlassesStylesBitmask;
89-
[FieldOffset(0x310)] public ushort NumOwnedMounts;
88+
[FieldOffset(0x30B), FixedSizeArray] internal FixedSizeArray5<byte> _unlockedGlassesStylesBitmask;
89+
[FieldOffset(0x312)] public ushort NumOwnedMounts;
9090

9191
// Ref: "48 89 5C 24 ?? 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ?? 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 45 30 48 8B 81 ?? ?? ?? ?? 49 8B D8"
9292
// Size: (SpearfishingNotebookSheet.RowCount + 7) / 8
93-
[FieldOffset(0x3C2), FixedSizeArray] internal FixedSizeArray8<byte> _unlockedSpearfishingNotebookBitmask;
93+
[FieldOffset(0x3C6), FixedSizeArray] internal FixedSizeArray8<byte> _unlockedSpearfishingNotebookBitmask;
9494

9595
// Size: (FishParameterSheet.Count(row => row.IsInLog) + 7) / 8
9696
/// <remarks> Use <see cref="IsFishCaught(uint)"/> </remarks>
97-
[FieldOffset(0x3EC), FixedSizeArray] internal FixedSizeArray180<byte> _caughtFishBitmask;
98-
[FieldOffset(0x4A0)] public uint NumFishCaught;
99-
[FieldOffset(0x4A4)] public uint FishingBait;
97+
[FieldOffset(0x3F0), FixedSizeArray] internal FixedSizeArray180<byte> _caughtFishBitmask;
98+
[FieldOffset(0x4A8)] public uint NumFishCaught;
99+
[FieldOffset(0x4AC)] public uint FishingBait;
100100
// Ref: "40 53 55 57 48 83 EC 50 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 44 24 ?? 4C 8B 12"
101101
// Size: (SpearfishingItemSheet.RowCount + 7) / 8
102102
/// <remarks> Use <see cref="IsSpearfishCaught(uint)"/> </remarks>
103-
[FieldOffset(0x4B1), FixedSizeArray] internal FixedSizeArray39<byte> _caughtSpearfishBitmask;
104-
[FieldOffset(0x4D8)] public uint NumSpearfishCaught;
105-
[FieldOffset(0x4DC)] internal int UnknownUnixTimestamp; // could be an array of size 1?!
103+
[FieldOffset(0x4B9), FixedSizeArray] internal FixedSizeArray39<byte> _caughtSpearfishBitmask;
104+
[FieldOffset(0x4E0)] public uint NumSpearfishCaught;
105+
[FieldOffset(0x4E4)] internal int UnknownUnixTimestamp; // could be an array of size 1?!
106106
/// <remarks>
107107
/// Index is column 27 of ContentRoulette sheet.<br/>
108108
/// See also: <see cref="InstanceContent.IsRouletteComplete" />
109109
/// </remarks>
110-
[FieldOffset(0x4E0), FixedSizeArray] internal FixedSizeArray12<byte> _contentRouletteCompletion;
111-
[FieldOffset(0x4EC)] public short PlayerCommendations;
112-
113-
[FieldOffset(0x4EE), FixedSizeArray] internal FixedSizeArray7<byte> _selectedPoses;
114-
[FieldOffset(0x4F5), FixedSizeArray] internal FixedSizeArray3<byte> _playerStateFlags;
115-
[FieldOffset(0x4F5), Obsolete("Use PlayerStateFlags[0]", true)] public byte PlayerStateFlags1;
116-
[FieldOffset(0x4F6), Obsolete("Use PlayerStateFlags[1]", true)] public byte PlayerStateFlags2;
117-
[FieldOffset(0x4F7), Obsolete("Use PlayerStateFlags[2]", true)] public byte PlayerStateFlags3;
118-
119-
[FieldOffset(0x522)] public byte SightseeingLogUnlockState; // 0 = Not Unlocked, 1 = ARR Part 1, 2 = ARR Part 2
120-
[FieldOffset(0x523)] public byte SightseeingLogUnlockStateEx; // 3 = Quest "Sights of the North" completed (= AdventureExPhase unlocked?)
121-
[FieldOffset(0x524), FixedSizeArray] internal FixedSizeArray44<byte> _unlockedAdventureBitmask; // maybe?
110+
[FieldOffset(0x4E8), FixedSizeArray] internal FixedSizeArray12<byte> _contentRouletteCompletion;
111+
[FieldOffset(0x4F4)] public short PlayerCommendations;
112+
113+
[FieldOffset(0x4F6), FixedSizeArray] internal FixedSizeArray7<byte> _selectedPoses;
114+
[FieldOffset(0x4FD), FixedSizeArray] internal FixedSizeArray3<byte> _playerStateFlags;
115+
[FieldOffset(0x4FD), Obsolete("Use PlayerStateFlags[0]", true)] public byte PlayerStateFlags1;
116+
[FieldOffset(0x4FE), Obsolete("Use PlayerStateFlags[1]", true)] public byte PlayerStateFlags2;
117+
[FieldOffset(0x4FF), Obsolete("Use PlayerStateFlags[2]", true)] public byte PlayerStateFlags3;
118+
119+
[FieldOffset(0x52A)] public byte SightseeingLogUnlockState; // 0 = Not Unlocked, 1 = ARR Part 1, 2 = ARR Part 2
120+
[FieldOffset(0x52B)] public byte SightseeingLogUnlockStateEx; // 3 = Quest "Sights of the North" completed (= AdventureExPhase unlocked?)
121+
[FieldOffset(0x52C), FixedSizeArray] internal FixedSizeArray44<byte> _unlockedAdventureBitmask; // maybe?
122122
// Ref: PlayerState.IsAdventureComplete
123123
/// <remarks> Use <see cref="IsAdventureComplete"/> </remarks>
124-
[FieldOffset(0x550), FixedSizeArray] internal FixedSizeArray44<byte> _completedAdventureBitmask;
124+
[FieldOffset(0x558), FixedSizeArray] internal FixedSizeArray44<byte> _completedAdventureBitmask;
125125

126-
[FieldOffset(0x581), FixedSizeArray] internal FixedSizeArray56<byte> _unlockFlags;
126+
[FieldOffset(0x589), FixedSizeArray] internal FixedSizeArray56<byte> _unlockFlags;
127127

128128
/// <summary>Carrier Level of Delivery Moogle Quests</summary>
129-
[FieldOffset(0x5BD)] public byte DeliveryLevel;
129+
[FieldOffset(0x5C5)] public byte DeliveryLevel;
130130
// [FieldOffset(0x5BE)] public byte UnkWeddingPlanFlag; // see lua function "GetWeddingPlan"
131131
/// <summary>
132132
/// Flag containing information about which DoH job the player is specialized in.
@@ -137,63 +137,63 @@ public unsafe partial struct PlayerState {
137137
/// <see cref="IsMeisterFlagMaxCount" /><br/>
138138
/// <see cref="IsMeisterFlagAndHasSoulStoneEquipped" />
139139
/// </remarks>
140-
[FieldOffset(0x5BF)] public byte MeisterFlag;
141-
[FieldOffset(0x5C0)] internal byte WeeklyLockoutInfo; // unsure how exactly it's processed
140+
[FieldOffset(0x5C7)] public byte MeisterFlag;
141+
[FieldOffset(0x5C8)] internal byte WeeklyLockoutInfo; // unsure how exactly it's processed
142142

143-
[FieldOffset(0x5C4)] public int SquadronMissionCompletionTimestamp;
144-
[FieldOffset(0x5C8)] public int SquadronTrainingCompletionTimestamp;
145-
[FieldOffset(0x5CC)] public ushort ActiveGcArmyExpedition;
146-
[FieldOffset(0x5CE)] public ushort ActiveGcArmyTraining;
147-
[FieldOffset(0x5D0)] public bool HasNewGcArmyCandidate; // see lua function "GcArmyIsNewCandidate"
148-
// [FieldOffset(0x5D1)] public bool UnkGcPvpMountActionCheck; // see "80 3D ?? ?? ?? ?? ?? 75 3C"
143+
[FieldOffset(0x5CC)] public int SquadronMissionCompletionTimestamp;
144+
[FieldOffset(0x5D0)] public int SquadronTrainingCompletionTimestamp;
145+
[FieldOffset(0x5D4)] public ushort ActiveGcArmyExpedition;
146+
[FieldOffset(0x5D6)] public ushort ActiveGcArmyTraining;
147+
[FieldOffset(0x5D8)] public bool HasNewGcArmyCandidate; // see lua function "GcArmyIsNewCandidate"
148+
// [FieldOffset(0x5D9)] public bool UnkGcPvpMountActionCheck; // see "80 3D ?? ?? ?? ?? ?? 75 3C"
149149

150-
[FieldOffset(0x5D2), FixedSizeArray] internal FixedSizeArray2<byte> _unlockedMinerFolkloreTomeBitmask;
151-
[FieldOffset(0x5D4), FixedSizeArray] internal FixedSizeArray2<byte> _unlockedBotanistFolkloreTomeBitmask;
152-
[FieldOffset(0x5D6), FixedSizeArray] internal FixedSizeArray2<byte> _unlockedFishingFolkloreTomeBitmask;
153-
[FieldOffset(0x5D8), FixedSizeArray] internal FixedSizeArray92<byte> _unlockedOrchestrionRollBitmask;
150+
[FieldOffset(0x5DA), FixedSizeArray] internal FixedSizeArray2<byte> _unlockedMinerFolkloreTomeBitmask;
151+
[FieldOffset(0x5DC), FixedSizeArray] internal FixedSizeArray2<byte> _unlockedBotanistFolkloreTomeBitmask;
152+
[FieldOffset(0x5DE), FixedSizeArray] internal FixedSizeArray2<byte> _unlockedFishingFolkloreTomeBitmask;
153+
[FieldOffset(0x5E0), FixedSizeArray] internal FixedSizeArray92<byte> _unlockedOrchestrionRollBitmask;
154154

155155
#region Weekly Bonus/Weekly Bingo/Wondrous Tails Fields (packet reader in "48 83 EC 28 48 8B D1 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ??")
156156

157157
/// <summary>RowIds of WeeklyBingoOrderData sheet</summary>
158-
[FieldOffset(0x6E8), FixedSizeArray] internal FixedSizeArray16<byte> _weeklyBingoOrderData;
158+
[FieldOffset(0x6F4), FixedSizeArray] internal FixedSizeArray16<byte> _weeklyBingoOrderData;
159159
/// <summary>RowIds of WeeklyBingoRewardData sheet</summary>
160-
[FieldOffset(0x6F8), FixedSizeArray] internal FixedSizeArray4<byte> _weeklyBingoRewardData;
160+
[FieldOffset(0x704), FixedSizeArray] internal FixedSizeArray4<byte> _weeklyBingoRewardData;
161161
/// <summary>Bitflags of placed stickers.</summary>
162162
/// <remarks>Use IsWeeklyBingoStickerPlaced(index) and WeeklyBingoNumPlacedStickers instead.</remarks>
163-
[FieldOffset(0x6FC)] private ushort _weeklyBingoStickers;
163+
[FieldOffset(0x708)] private ushort _weeklyBingoStickers;
164164

165165
/// <remarks>Use GetWeeklyBingoExpireUnixTimestamp(), WeeklyBingoNumSecondChancePoints and HasWeeklyBingoJournal instead</remarks>
166-
[FieldOffset(0x700)] private uint _weeklyBingoFlags;
167-
[FieldOffset(0x704), FixedSizeArray] internal FixedSizeArray4<byte> __weeklyBingoTaskStatus;
168-
[FieldOffset(0x708)] public byte WeeklyBingoRequestOpenBingoNo;
166+
[FieldOffset(0x70C)] private uint _weeklyBingoFlags;
167+
[FieldOffset(0x710), FixedSizeArray] internal FixedSizeArray4<byte> __weeklyBingoTaskStatus;
168+
[FieldOffset(0x714)] public byte WeeklyBingoRequestOpenBingoNo;
169169

170-
[FieldOffset(0x744)] public byte WeeklyBingoExpMultiplier;
171-
[FieldOffset(0x745)] public bool WeeklyBingoUnk63;
170+
[FieldOffset(0x750)] public byte WeeklyBingoExpMultiplier;
171+
[FieldOffset(0x751)] public bool WeeklyBingoUnk63;
172172

173173
#endregion
174174

175175
/// <remarks> For easier access, use <see cref="GetContentValue"/>. </remarks>
176-
[FieldOffset(0x74C), FixedSizeArray] internal FixedSizeArray3<StdPair<uint, uint>> _contentKeyValueData;
176+
[FieldOffset(0x758), FixedSizeArray] internal FixedSizeArray3<StdPair<uint, uint>> _contentKeyValueData;
177177

178178
/// <remarks>
179179
/// 1 = Shadowbringers
180180
/// 2 = Endwalker
181181
/// 3 = Dawntrail
182182
/// </remarks>
183-
[FieldOffset(0x7DC)] public byte MentorVersion;
183+
[FieldOffset(0x7E8)] public byte MentorVersion;
184184

185185
/// <remarks> Index is DohDolJobIndex from the ClassJob sheet. </remarks>
186-
[FieldOffset(0x7E0), FixedSizeArray] internal FixedSizeArray8<uint> _desynthesisLevels;
187-
// 0x800 (int): some Faux Hollows timestamp?
188-
// 0x804 (int): some Faux Hollows state?
186+
[FieldOffset(0x7EC), FixedSizeArray] internal FixedSizeArray8<uint> _desynthesisLevels;
187+
// 0x80C (int): some Faux Hollows timestamp?
188+
// 0x810 (int): some Faux Hollows state?
189189

190-
[FieldOffset(0x830), FixedSizeArray] internal FixedSizeArray26<byte> _unlockedFramersKitsBitmask;
190+
[FieldOffset(0x83C), FixedSizeArray] internal FixedSizeArray26<byte> _unlockedFramersKitsBitmask;
191191

192-
[FieldOffset(0x868)] public StdMap<uint, bool> TrackedStatuses;
193-
[FieldOffset(0x878)] public StdMap<uint, bool> TrackedActionUnlocks;
194-
[FieldOffset(0x888)] public StdMap<uint, bool> TrackedTraitUnlocks;
195-
[FieldOffset(0x898)] public bool TrackedTraitUnlocksDirty;
196-
[FieldOffset(0x899)] public bool TrackedActionUnlocksDirty;
192+
[FieldOffset(0x874)] public StdMap<uint, bool> TrackedStatuses;
193+
[FieldOffset(0x884)] public StdMap<uint, bool> TrackedActionUnlocks;
194+
[FieldOffset(0x894)] public StdMap<uint, bool> TrackedTraitUnlocks;
195+
[FieldOffset(0x8A4)] public bool TrackedTraitUnlocksDirty;
196+
[FieldOffset(0x8A5)] public bool TrackedActionUnlocksDirty;
197197

198198
public bool IsLegacy => (QuestSpecialFlags & 1) != 0;
199199
public bool IsWarriorOfLight => (QuestSpecialFlags & 2) != 0;

0 commit comments

Comments
 (0)