Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions FFXIVClientStructs/FFXIV/Client/UI/AddonMiragePrismPrismBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,53 @@ namespace FFXIVClientStructs.FFXIV.Client.UI;
[Inherits<AtkUnitBase>]
[StructLayout(LayoutKind.Explicit, Size = 0x1440)]
public unsafe partial struct AddonMiragePrismPrismBox {
[StructLayout(LayoutKind.Explicit, Size = 0x50)]
public struct ItemSlot {
[FieldOffset(0x00)] public AtkComponentButton* Button;
[FieldOffset(0x08)] public AtkImageNode* SlotIcon;
[FieldOffset(0x10)] public AtkResNode* Dye1Res;
[FieldOffset(0x18)] public AtkImageNode* Dye1Image;
[FieldOffset(0x20)] public AtkResNode* Dye2Res;
[FieldOffset(0x28)] public AtkImageNode* Dye2Image;
[FieldOffset(0x30)] public AtkResNode* SlotRes;
[FieldOffset(0x38)] public AtkResNode* OutfitGlamour;
[FieldOffset(0x40)] public AtkResNode* OutfitItemAmountRes;
[FieldOffset(0x48)] public AtkTextNode* OutfitItemAmountResText;
}

[FieldOffset(0x238), FixedSizeArray] internal FixedSizeArray50<ItemSlot> _itemSlots;

[FieldOffset(0x11E8)] public AtkComponentButton* PrevButton;
[FieldOffset(0x11F0)] public AtkComponentButton* NextButton;
[FieldOffset(0x11F8)] public AtkComponentButton* EditGlamourPlatesButton;

[FieldOffset(0x1200)] private AtkResNode* Unk1200;
[FieldOffset(0x1208)] private AtkTextNode* Unk1208;
[FieldOffset(0x1210)] public AtkTextNode* UsedSlotsText;
[FieldOffset(0x1218)] public AtkTextNode* CategoryLabelText;
[FieldOffset(0x1220)] public AtkImageNode* CategoryIcon;
[FieldOffset(0x1228)] public AtkComponentWindow* WindowComponent;
[FieldOffset(0x1230)] public AtkResNode* SlotsContentNode;

[FieldOffset(0x1238)] public AtkComponentDropDownList* JobDropdown;

[FieldOffset(0x1240)] public AtkResNode* FilterNode;
[FieldOffset(0x1248)] public AtkComponentBase* FilterButton;
[FieldOffset(0x1250)] public AtkComponentTextInput* SearchInput;
[FieldOffset(0x1258)] public AtkResNode* SearchBar;

[FieldOffset(0x1260)] public AtkComponentDropDownList* OrderDropdown;

[FieldOffset(0x1268)] public AtkComponentButton* GuideButton;

[FieldOffset(0x1270), FixedSizeArray] internal FixedSizeArray13<Pointer<AtkComponentRadioButton>> _slotTabs;

[FieldOffset(0x12D8)] private uint Unk12D8;
[FieldOffset(0x12DC)] public uint SelectedTabIndex;

[FieldOffset(0x12E0), FixedSizeArray] internal FixedSizeArray35<CStringPointer> _jobLabels;

[FieldOffset(0x13F8), FixedSizeArray] internal FixedSizeArray35<byte> _jobIds;

[FieldOffset(0x1420), FixedSizeArray] internal FixedSizeArray2<CStringPointer> _orderLabels;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,15 @@ namespace FFXIVClientStructs.FFXIV.Client.UI.Agent;
[StructLayout(LayoutKind.Explicit, Size = 0x98)]
public unsafe partial struct AgentMiragePrismPrismBox {
[FieldOffset(0x28)] public MiragePrismPrismBoxData* Data;
[FieldOffset(0x30)] private nint OpenerCallbackPtr; // unsure about that
[FieldOffset(0x38)] public bool IsDataLoaded;
[FieldOffset(0x39)] public byte TabIndex;
[FieldOffset(0x3A)] public byte PageIndex;
[FieldOffset(0x3C)] public uint CrystalizeAddonId;
[FieldOffset(0x40)] public uint ContextAddonId; // AddonId slot for active context dialogs (crystallize confirm, YesNo, prism-set preview)
[FieldOffset(0x44)] public uint ContextAddon2Id; // AddonId slot for the restore-as-outfit dialog (addon 0x285).
[FieldOffset(0x48)] public short SavedAddonX;
[FieldOffset(0x4A)] public short SavedAddonY;
[FieldOffset(0x50)] public InventoryItem TempDyeItem;

[MemberFunction("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 0F B6 43 3A")]
Expand All @@ -22,6 +29,10 @@ public unsafe partial struct AgentMiragePrismPrismBox {
[GenerateInterop]
[StructLayout(LayoutKind.Explicit, Size = 0x123A00)]
public unsafe partial struct MiragePrismPrismBoxData {
[FieldOffset(0x00)] private byte Unk00;
[FieldOffset(0x01)] public bool IsAsyncLoadComplete; // Set to true once all async item-name loads have completed. gates the sort and page-index update in Update.
[FieldOffset(0x02)] public byte PendingTabIndex; // Pending tab/slot filter to apply. written by context actions, cleared to 13 (All) once processed

[FieldOffset(0x08), FixedSizeArray] internal FixedSizeArray8000<PrismBoxItem> _prismBoxItems;
[FieldOffset(0x119408)] public PrismBoxItem TempContextItem;

Expand All @@ -30,10 +41,18 @@ public unsafe partial struct MiragePrismPrismBoxData {
[FieldOffset(0x11AD98), FixedSizeArray] internal FixedSizeArray50<int> _pageItemIndexes;
[FieldOffset(0x11AE60)] public int TempContextItemIndex;
[FieldOffset(0x11AE64)] public int SelectedPageIndex;
[FieldOffset(0x11AE68)] private uint Unk11AE68;

[FieldOffset(0x11AE6C)] public int UsedSlots;

// 7.1: a new 32-bit int was added between UsedSlots and CrystallizeCategory
[FieldOffset(0x11AE70)] public uint ItemCount;
[FieldOffset(0x11AE74)] public uint FilterSettingsAddonId;
[FieldOffset(0x11AE78)] public bool IsPopulatingList;
[FieldOffset(0x11AE7B)] private byte Unk11AE7B;
[FieldOffset(0x11AE7C)] public bool IsAddonReady;
[FieldOffset(0x11AE7D)] private byte Unk11AE7D;
[FieldOffset(0x11AE7E)] private byte Unk11AE7E;
[FieldOffset(0x11AE7F)] public bool IsPositionSaved;

[FieldOffset(0x11AE84)] public int CrystallizeCategory;
[FieldOffset(0x11AE88)] public ushort CrystallizeItemIndex;
Expand All @@ -42,17 +61,24 @@ public unsafe partial struct MiragePrismPrismBoxData {
[FieldOffset(0x11AE90), FixedSizeArray] internal FixedSizeArray140<PrismBoxCrystallizeItem> _crystallizeItems;
[FieldOffset(0x11BDE0)] public PrismBoxCrystallizeItem CrystallizeSelectedItem;

[FieldOffset(0x1238A0)] public uint PendingState;
[FieldOffset(0x1238A4)] public uint PendingStateStep;
[FieldOffset(0x1238A8)] public uint LastProcessedStep;

[FieldOffset(0x1238AC)] public byte CrystallizeFilterFlags;
[FieldOffset(0x1238AD)] public byte SortType; // 0 = Descending, 2 = Ascending

[FieldOffset(0x1238B0)] internal AgentCabinet* AgentCabinet;
[FieldOffset(0x1238B8)] internal AgentMiragePrismMiragePlate* AgentMiragePrismMiragePlate;
[FieldOffset(0x1238C0)] public byte FilterLevel; // 0 = Unspecified = Max Level
[FieldOffset(0x1238C1)] private byte Unk1238C1;

[FieldOffset(0x1238C2)] public byte FilterSex; // 0 = Unspecified, 1 = Current, 2 = Male, 3 = Female
[FieldOffset(0x1238C3)] public byte FilterGlamour; // 0 = Unspecified, 1 = Hide not eligible, 2 = Display only outfit glamours

[FieldOffset(0x1238C8)] public Utf8String FilterString; // Inline buffer only
[FieldOffset(0x123930)] public Utf8String SearchString; // Inline buffer only
[FieldOffset(0x1238C8)] public Utf8String FilterString; // Inline Buffer only
[FieldOffset(0x123930)] public Utf8String FilterString2; // Inline Buffer only
[FieldOffset(0x123998)] public Utf8String SearchString; // Inline Buffer only
}

[GenerateInterop]
Expand All @@ -67,6 +93,7 @@ public partial struct PrismBoxItem {
[FieldOffset(0x7E)] public ushort ItemLevel;
[FieldOffset(0x80)] public ushort LevelEquip;
[FieldOffset(0x82), FixedSizeArray] internal FixedSizeArray2<byte> _stains;
[FieldOffset(0x84)] private byte Unk84; // Zero = item name not yet async-loaded
[FieldOffset(0x85)] public byte EquipSlotCategory;
[FieldOffset(0x87)] public byte ClassJobCategory;
[FieldOffset(0x88)] private byte Unk88; // Seemingly always 255
Expand Down
Loading