@@ -6,7 +6,7 @@ namespace FFXIVClientStructs.FFXIV.Client.Game.UI;
6
6
// Client::Game::UI::PlayerState
7
7
// ctor "E8 ?? ?? ?? ?? 33 D2 45 33 E4"
8
8
[ GenerateInterop ]
9
- [ StructLayout ( LayoutKind . Explicit , Size = 0x8B0 ) ]
9
+ [ StructLayout ( LayoutKind . Explicit , Size = 0x8C0 ) ]
10
10
public unsafe partial struct PlayerState {
11
11
[ StaticAddress ( "48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 84 C0 75 06 F6 43 18 02" , 3 ) ]
12
12
public static partial PlayerState * Instance ( ) ;
@@ -79,54 +79,54 @@ public unsafe partial struct PlayerState {
79
79
80
80
// Size: (MountSheet.Max(row => row.Order) + 7) / 8
81
81
/// <remarks> Use <see cref="IsMountUnlocked"/> </remarks>
82
- [ FieldOffset ( 0x2DD ) , FixedSizeArray ] internal FixedSizeArray38 < byte > _unlockedMountsBitmask ;
82
+ [ FieldOffset ( 0x2DD ) , FixedSizeArray ] internal FixedSizeArray39 < byte > _unlockedMountsBitmask ;
83
83
// Size: (OrnamentSheet.RowCount + 7) / 8
84
84
/// <remarks> Use <see cref="IsOrnamentUnlocked"/> </remarks>
85
- [ FieldOffset ( 0x303 ) , FixedSizeArray ] internal FixedSizeArray7 < byte > _unlockedOrnamentsBitmask ;
85
+ [ FieldOffset ( 0x304 ) , FixedSizeArray ] internal FixedSizeArray7 < byte > _unlockedOrnamentsBitmask ;
86
86
// Size: (GlassesStylesSheet.RowCount + 7) / 8
87
87
/// <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 ;
90
90
91
91
// 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"
92
92
// Size: (SpearfishingNotebookSheet.RowCount + 7) / 8
93
- [ FieldOffset ( 0x3C2 ) , FixedSizeArray ] internal FixedSizeArray8 < byte > _unlockedSpearfishingNotebookBitmask ;
93
+ [ FieldOffset ( 0x3C6 ) , FixedSizeArray ] internal FixedSizeArray8 < byte > _unlockedSpearfishingNotebookBitmask ;
94
94
95
95
// Size: (FishParameterSheet.Count(row => row.IsInLog) + 7) / 8
96
96
/// <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 ;
100
100
// Ref: "40 53 55 57 48 83 EC 50 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 44 24 ?? 4C 8B 12"
101
101
// Size: (SpearfishingItemSheet.RowCount + 7) / 8
102
102
/// <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?!
106
106
/// <remarks>
107
107
/// Index is column 27 of ContentRoulette sheet.<br/>
108
108
/// See also: <see cref="InstanceContent.IsRouletteComplete" />
109
109
/// </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?
122
122
// Ref: PlayerState.IsAdventureComplete
123
123
/// <remarks> Use <see cref="IsAdventureComplete"/> </remarks>
124
- [ FieldOffset ( 0x550 ) , FixedSizeArray ] internal FixedSizeArray44 < byte > _completedAdventureBitmask ;
124
+ [ FieldOffset ( 0x558 ) , FixedSizeArray ] internal FixedSizeArray44 < byte > _completedAdventureBitmask ;
125
125
126
- [ FieldOffset ( 0x581 ) , FixedSizeArray ] internal FixedSizeArray56 < byte > _unlockFlags ;
126
+ [ FieldOffset ( 0x589 ) , FixedSizeArray ] internal FixedSizeArray56 < byte > _unlockFlags ;
127
127
128
128
/// <summary>Carrier Level of Delivery Moogle Quests</summary>
129
- [ FieldOffset ( 0x5BD ) ] public byte DeliveryLevel ;
129
+ [ FieldOffset ( 0x5C5 ) ] public byte DeliveryLevel ;
130
130
// [FieldOffset(0x5BE)] public byte UnkWeddingPlanFlag; // see lua function "GetWeddingPlan"
131
131
/// <summary>
132
132
/// Flag containing information about which DoH job the player is specialized in.
@@ -137,63 +137,63 @@ public unsafe partial struct PlayerState {
137
137
/// <see cref="IsMeisterFlagMaxCount" /><br/>
138
138
/// <see cref="IsMeisterFlagAndHasSoulStoneEquipped" />
139
139
/// </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
142
142
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"
149
149
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 ;
154
154
155
155
#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 ?? ?? ?? ??")
156
156
157
157
/// <summary>RowIds of WeeklyBingoOrderData sheet</summary>
158
- [ FieldOffset ( 0x6E8 ) , FixedSizeArray ] internal FixedSizeArray16 < byte > _weeklyBingoOrderData ;
158
+ [ FieldOffset ( 0x6F4 ) , FixedSizeArray ] internal FixedSizeArray16 < byte > _weeklyBingoOrderData ;
159
159
/// <summary>RowIds of WeeklyBingoRewardData sheet</summary>
160
- [ FieldOffset ( 0x6F8 ) , FixedSizeArray ] internal FixedSizeArray4 < byte > _weeklyBingoRewardData ;
160
+ [ FieldOffset ( 0x704 ) , FixedSizeArray ] internal FixedSizeArray4 < byte > _weeklyBingoRewardData ;
161
161
/// <summary>Bitflags of placed stickers.</summary>
162
162
/// <remarks>Use IsWeeklyBingoStickerPlaced(index) and WeeklyBingoNumPlacedStickers instead.</remarks>
163
- [ FieldOffset ( 0x6FC ) ] private ushort _weeklyBingoStickers ;
163
+ [ FieldOffset ( 0x708 ) ] private ushort _weeklyBingoStickers ;
164
164
165
165
/// <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 ;
169
169
170
- [ FieldOffset ( 0x744 ) ] public byte WeeklyBingoExpMultiplier ;
171
- [ FieldOffset ( 0x745 ) ] public bool WeeklyBingoUnk63 ;
170
+ [ FieldOffset ( 0x750 ) ] public byte WeeklyBingoExpMultiplier ;
171
+ [ FieldOffset ( 0x751 ) ] public bool WeeklyBingoUnk63 ;
172
172
173
173
#endregion
174
174
175
175
/// <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 ;
177
177
178
178
/// <remarks>
179
179
/// 1 = Shadowbringers
180
180
/// 2 = Endwalker
181
181
/// 3 = Dawntrail
182
182
/// </remarks>
183
- [ FieldOffset ( 0x7DC ) ] public byte MentorVersion ;
183
+ [ FieldOffset ( 0x7E8 ) ] public byte MentorVersion ;
184
184
185
185
/// <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?
189
189
190
- [ FieldOffset ( 0x830 ) , FixedSizeArray ] internal FixedSizeArray26 < byte > _unlockedFramersKitsBitmask ;
190
+ [ FieldOffset ( 0x83C ) , FixedSizeArray ] internal FixedSizeArray26 < byte > _unlockedFramersKitsBitmask ;
191
191
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 ;
197
197
198
198
public bool IsLegacy => ( QuestSpecialFlags & 1 ) != 0 ;
199
199
public bool IsWarriorOfLight => ( QuestSpecialFlags & 2 ) != 0 ;
0 commit comments