From 07a7ad23c89e347daff3ebed6bd30d88f28d26ce Mon Sep 17 00:00:00 2001 From: MidoriKami Date: Wed, 9 Sep 2026 21:38:11 -0700 Subject: [PATCH 1/4] Add action type to ActionBarSlotNumberArray.cs --- .../Arrays/Common/ActionBarSlotNumberArray.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs index 08cef6c728..e6676da633 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs @@ -5,26 +5,39 @@ namespace FFXIVClientStructs.FFXIV.Client.UI.Arrays.Common; public partial struct ActionBarSlotNumberArray { [FieldOffset(0), FixedSizeArray, CExporterIgnore] internal FixedSizeArray17 _data; - [FieldOffset(0 * 4)] public int ActionType; + [FieldOffset(0 * 4), Obsolete("Use ActionTypeEnum")] public int ActionType; + [FieldOffset(0 * 4)] public ActionType ActionTypeEnum; // maybe rename to ActionType, once ActionType can be removed? + [FieldOffset(1 * 4)] private bool Unk1; [FieldOffset(3 * 4)] public uint ActionId; [FieldOffset(4 * 4)] public uint IconId; [FieldOffset(5 * 4)] public bool Executable; [FieldOffset(6 * 4)] public bool Executable2; [FieldOffset(7 * 4)] public int MaxCharges; + /// /// Range is 0 to 100 /// [FieldOffset(8 * 4)] public int GlobalCoolDownPercentage; + /// /// Range is 0 to 100 /// [FieldOffset(9 * 4)] public int ChargesCooldownPercent; + [FieldOffset(10 * 4)] public int RechargeTime; // Same slot as ManaCost (The game reuses this) - [FieldOffset(10 * 4), CExporterIgnore] public int ManaCost; // Same slot as RechargeTime (The game reuses this) + [FieldOffset(10 * 4), CExporterIgnore] public int ManaCost; // Same slot as RechargeTime (The game reuses this) + [FieldOffset(12 * 4)] public bool DisplayDot; [FieldOffset(13 * 4)] public int CurrentCharges; [FieldOffset(14 * 4)] public bool Glows; [FieldOffset(15 * 4)] public bool Pulses; [FieldOffset(16 * 4)] public bool InRange; } + +// These values tend to shift up when new forays or jobs are added. +public enum ActionType { + Action = 48, + + CraftAction = 56, +} From 528ad7f7c1640783afa697eb5cc048b8014fda94 Mon Sep 17 00:00:00 2001 From: MidoriKami Date: Tue, 15 Sep 2026 09:10:00 -0700 Subject: [PATCH 2/4] Add additional enum values --- .../Arrays/Common/ActionBarSlotNumberArray.cs | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs index e6676da633..e5ccf10a12 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs @@ -8,7 +8,7 @@ public partial struct ActionBarSlotNumberArray { [FieldOffset(0 * 4), Obsolete("Use ActionTypeEnum")] public int ActionType; [FieldOffset(0 * 4)] public ActionType ActionTypeEnum; // maybe rename to ActionType, once ActionType can be removed? - [FieldOffset(1 * 4)] private bool Unk1; + [FieldOffset(1 * 4)] public int CostType; [FieldOffset(3 * 4)] public uint ActionId; [FieldOffset(4 * 4)] public uint IconId; [FieldOffset(5 * 4)] public bool Executable; @@ -37,7 +37,40 @@ public partial struct ActionBarSlotNumberArray { // These values tend to shift up when new forays or jobs are added. public enum ActionType { - Action = 48, + None = 0, + Macro = 47, + Action = 48, + Emote = 49, + Item = 50, + InventoryItem = 51, + EventItem = 52, + KeyItem = 53, + Crystal = 54, + Marker = 55, CraftAction = 56, + GeneralAction = 57, + BuddyAction = 58, + MainCommand = 59, + Companion = 60, + GearSet = 61, + PetAction = 62, + Mount = 63, + FieldMarker = 64, + Recipe = 65, + ChocoboRaceAbility = 66, + ChocoboRaceItem = 67, + Unknown23 = 68, + ExtraCommand = 69, + PvPQuickChat = 70, + PvPCombo = 71, + BgcArmyAction = 72, + Unknown28 = 73, + PerformanceInstrument = 74, + McGuffin = 75, + Ornament = 76, + LostFindsItem = 77, + Glasses = 78, + QuickPanel = 79, + Unknown36 = 80, // XBM related (AgentXBMContentsMainHUD), maybe BeastMasterAction } From 4edd54fc69c8b71836ddebc20f8b61e5febf25fb Mon Sep 17 00:00:00 2001 From: MidoriKami Date: Tue, 15 Sep 2026 13:28:39 -0700 Subject: [PATCH 3/4] Move to nested namespace --- .../Arrays/Common/ActionBarSlotNumberArray.cs | 44 ++---------------- ...aptureHotbarModule.HotbarUiIntermediate.cs | 45 ++++++++++++++++++- 2 files changed, 46 insertions(+), 43 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs index e5ccf10a12..e5f39ae8ec 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs @@ -1,3 +1,5 @@ +using FFXIVClientStructs.FFXIV.Client.UI.Misc; + namespace FFXIVClientStructs.FFXIV.Client.UI.Arrays.Common; [GenerateInterop] @@ -6,7 +8,7 @@ public partial struct ActionBarSlotNumberArray { [FieldOffset(0), FixedSizeArray, CExporterIgnore] internal FixedSizeArray17 _data; [FieldOffset(0 * 4), Obsolete("Use ActionTypeEnum")] public int ActionType; - [FieldOffset(0 * 4)] public ActionType ActionTypeEnum; // maybe rename to ActionType, once ActionType can be removed? + [FieldOffset(0 * 4)] public RaptureHotbarModule.ActionType ActionTypeEnum; // maybe rename to ActionType, once ActionType can be removed? [FieldOffset(1 * 4)] public int CostType; [FieldOffset(3 * 4)] public uint ActionId; @@ -34,43 +36,3 @@ public partial struct ActionBarSlotNumberArray { [FieldOffset(15 * 4)] public bool Pulses; [FieldOffset(16 * 4)] public bool InRange; } - -// These values tend to shift up when new forays or jobs are added. -public enum ActionType { - None = 0, - - Macro = 47, - Action = 48, - Emote = 49, - Item = 50, - InventoryItem = 51, - EventItem = 52, - KeyItem = 53, - Crystal = 54, - Marker = 55, - CraftAction = 56, - GeneralAction = 57, - BuddyAction = 58, - MainCommand = 59, - Companion = 60, - GearSet = 61, - PetAction = 62, - Mount = 63, - FieldMarker = 64, - Recipe = 65, - ChocoboRaceAbility = 66, - ChocoboRaceItem = 67, - Unknown23 = 68, - ExtraCommand = 69, - PvPQuickChat = 70, - PvPCombo = 71, - BgcArmyAction = 72, - Unknown28 = 73, - PerformanceInstrument = 74, - McGuffin = 75, - Ornament = 76, - LostFindsItem = 77, - Glasses = 78, - QuickPanel = 79, - Unknown36 = 80, // XBM related (AgentXBMContentsMainHUD), maybe BeastMasterAction -} diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs b/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs index 5745c11928..bea619057a 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs @@ -2,14 +2,15 @@ namespace FFXIVClientStructs.FFXIV.Client.UI.Misc; public partial struct RaptureHotbarModule { /// - /// An intermediate struct used to translate from a to the UI String/NumberArrays. + /// An intermediate struct used to translate from a to the UI String/NumberArrays. /// [GenerateInterop] [StructLayout(LayoutKind.Explicit, Size = 0x43)] public unsafe partial struct HotbarUIIntermediate { [FieldOffset(0x00)] public CStringPointer PopUpHelpText; // ref to Client::UI::Misc::RaptureHotbarModule::HotbarSlot.PopUpHelp.StringPtr [FieldOffset(0x08)] public CStringPointer CostText; // ref to Client::UI::Misc::RaptureHotbarModule::HotbarSlot.CostText - [FieldOffset(0x10)] public uint IntermediateActionType; // to NumberArray idx slotBase + 0 + [FieldOffset(0x10), Obsolete("Use ActionType")] public uint IntermediateActionType; // to NumberArray idx slotBase + 0 + [FieldOffset(0x10)] public ActionType ActionType; // to NumberArray idx slotBase + 0 [FieldOffset(0x14)] public uint ActionId; // to NumberArray idx slotBase + 3 [FieldOffset(0x18)] public uint IconId; // to NumberArray idx slotBase + 4 [FieldOffset(0x1C)] public uint CooldownMode; // to NumberArray idx slotBase + 7 @@ -31,4 +32,44 @@ public unsafe partial struct HotbarUIIntermediate { [MemberFunction("E8 ?? ?? ?? ?? 48 8B 45 ?? 4C 8D 44 24")] public partial HotbarUIIntermediate* Ctor(); } + + // These values tend to shift up when new forays or jobs are added. + public enum ActionType { + None = 0, + + Macro = 47, + Action = 48, + Emote = 49, + Item = 50, + InventoryItem = 51, + EventItem = 52, + KeyItem = 53, + Crystal = 54, + Marker = 55, + CraftAction = 56, + GeneralAction = 57, + BuddyAction = 58, + MainCommand = 59, + Companion = 60, + GearSet = 61, + PetAction = 62, + Mount = 63, + FieldMarker = 64, + Recipe = 65, + ChocoboRaceAbility = 66, + ChocoboRaceItem = 67, + Unknown23 = 68, + ExtraCommand = 69, + PvPQuickChat = 70, + PvPCombo = 71, + BgcArmyAction = 72, + Unknown28 = 73, + PerformanceInstrument = 74, + McGuffin = 75, + Ornament = 76, + LostFindsItem = 77, + Glasses = 78, + QuickPanel = 79, + Unknown36 = 80, // XBM related (AgentXBMContentsMainHUD), maybe BeastMasterAction + } } From 99b6c28b999050df069f05d0f3708c53d21a7d9f Mon Sep 17 00:00:00 2001 From: MidoriKami Date: Tue, 15 Sep 2026 13:43:58 -0700 Subject: [PATCH 4/4] Maybe fix random breaking change? --- .../FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs | 2 +- .../UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs index e5f39ae8ec..f9f1c09ec6 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Arrays/Common/ActionBarSlotNumberArray.cs @@ -8,7 +8,7 @@ public partial struct ActionBarSlotNumberArray { [FieldOffset(0), FixedSizeArray, CExporterIgnore] internal FixedSizeArray17 _data; [FieldOffset(0 * 4), Obsolete("Use ActionTypeEnum")] public int ActionType; - [FieldOffset(0 * 4)] public RaptureHotbarModule.ActionType ActionTypeEnum; // maybe rename to ActionType, once ActionType can be removed? + [FieldOffset(0 * 4)] public RaptureHotbarModule.SlotActionType ActionTypeEnum; // maybe rename to ActionType, once ActionType can be removed? [FieldOffset(1 * 4)] public int CostType; [FieldOffset(3 * 4)] public uint ActionId; diff --git a/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs b/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs index bea619057a..8952fbac6a 100644 --- a/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs +++ b/FFXIVClientStructs/FFXIV/Client/UI/Misc/RaptureHotbarModule.HotbarUiIntermediate.cs @@ -10,7 +10,7 @@ public unsafe partial struct HotbarUIIntermediate { [FieldOffset(0x00)] public CStringPointer PopUpHelpText; // ref to Client::UI::Misc::RaptureHotbarModule::HotbarSlot.PopUpHelp.StringPtr [FieldOffset(0x08)] public CStringPointer CostText; // ref to Client::UI::Misc::RaptureHotbarModule::HotbarSlot.CostText [FieldOffset(0x10), Obsolete("Use ActionType")] public uint IntermediateActionType; // to NumberArray idx slotBase + 0 - [FieldOffset(0x10)] public ActionType ActionType; // to NumberArray idx slotBase + 0 + [FieldOffset(0x10)] public SlotActionType ActionType; // to NumberArray idx slotBase + 0 [FieldOffset(0x14)] public uint ActionId; // to NumberArray idx slotBase + 3 [FieldOffset(0x18)] public uint IconId; // to NumberArray idx slotBase + 4 [FieldOffset(0x1C)] public uint CooldownMode; // to NumberArray idx slotBase + 7 @@ -34,7 +34,7 @@ public unsafe partial struct HotbarUIIntermediate { } // These values tend to shift up when new forays or jobs are added. - public enum ActionType { + public enum SlotActionType { None = 0, Macro = 47,