using System.Runtime.CompilerServices; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Component.GUI; using LLib.GameUI; using Lumina.Excel.Sheets; namespace LLib.Gear; public static class MeldActions { public const uint MeldUnlockQuestId = 66175u; public const uint OvermeldUnlockQuestId = 66176u; public unsafe static bool TryOpenMeldAgent() { ActionManager* ptr = ActionManager.Instance(); int num = ((ptr != null) ? (-92377207) : (-92377206)); while (true) { int num2 = num; int num3 = -92377205; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0049; case 2: return ptr->UseAction(ActionType.GeneralAction, 13u, 3758096384uL, 0u, ActionManager.UseActionMode.None, 0u, null); case 1: return false; } continue; IL_0049: num = -92377206; } } public unsafe static bool IsMeldAgentReady() { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? 1012581320 : 1012581323); while (true) { int num2 = num; int num3 = 1012581322; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0050; case 2: return false; case 1: return agentByInternalId->IsAgentActive(); } continue; IL_0050: num = 1012581323; } } public unsafe static void CloseMeldAgent() { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? 1172237178 : 1172237177); while (true) { int num2 = num; int num3 = 1172237179; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 1: return; case 2: agentByInternalId->Hide(); num = 1172237178; break; case 0: num = 1172237177; break; } } } public unsafe static bool TrySelectItemCategory(int category) { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? 1631304881 : 1631304883); while (true) { int num2 = num; int num3 = 1631304882; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 3: return false; case 2: AgentHelper.SendEvent(agentByInternalId, 0uL, 0, category); return true; case 0: num = 1631304883; break; case 1: num = (agentByInternalId->IsAgentActive() ? 1631304880 : 1631304881); break; } } } public unsafe static bool TrySelectItem(int itemIndex) { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? (-2072200034) : (-2072200035)); while (true) { int num2 = num; int num3 = -2072200036; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: num = -2072200035; break; case 2: return false; case 1: num = (agentByInternalId->IsAgentActive() ? (-2072200033) : (-2072200034)); break; case 3: AgentHelper.SendEvent(agentByInternalId, 0uL, 1, itemIndex, 1, 0); return true; } } } public unsafe static bool TrySelectMateria(int materiaIndex) { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? 1070130699 : 1070130696); while (true) { int num2 = num; int num3 = 1070130698; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 1: return false; case 2: num = (agentByInternalId->IsAgentActive() ? 1070130697 : 1070130699); break; case 3: AgentHelper.SendEvent(agentByInternalId, 0uL, 2, materiaIndex, 1, 0); return true; case 0: num = 1070130696; break; } } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TryConfirmMeld(IGameGui gameGui) { AtkUnitBase* addonPtr; int num = (gameGui.TryGetReadyAddon(global::_003CModule_003E._200E_206F_206C_206C_200E_202A_206D_206B_200B_202D_202B_200F_200F_206B_206C_206F_202D_206F_206A_202D_206A_200B_200B_202B_202D_202C_200F_200D_202E_200E_200D_202A_202B_206F_202E_200E_200B_206B_200E_202E_202E(627835042), out addonPtr) ? 1229741423 : 1229741420); while (true) { int num2 = num; int num3 = 1229741422; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0052; case 2: return false; case 1: AddonCallback.Fire(addonPtr, 0, 0, 1); addonPtr->Close(fireCallback: true); return true; } continue; IL_0052: num = 1229741420; } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TryConfirmOvermeld(IGameGui gameGui) { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? (-1324266092) : (-1324266093)); AtkUnitBase* addonPtr = default(AtkUnitBase*); while (true) { int num2 = num; int num3 = -1324266089; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: AddonCallback.ClickYes(addonPtr); addonPtr->Close(fireCallback: true); return true; case 4: num = (agentByInternalId->IsAgentActive() ? (-1324266090) : (-1324266092)); break; case 2: return false; case 1: num = (gameGui.TryGetReadyAddon(global::_003CModule_003E._200E_206F_206C_206C_200E_202A_206D_206B_200B_202D_202B_200F_200F_206B_206C_206F_202D_206F_206A_202D_206A_200B_200B_202B_202D_202C_200F_200D_202E_200E_200D_202A_202B_206F_202E_200E_200B_206B_200E_202E_202E(184774238), out addonPtr) ? (-1324266089) : (-1324266091)); break; case 5: num = -1324266093; break; case 3: return false; } } } public unsafe static bool TryRequestRetrieve() { AgentInterface* agentByInternalId = AgentModule.Instance()->GetAgentByInternalId(AgentId.MateriaAttach); int num = ((agentByInternalId == null) ? (-1148814480) : (-1148814479)); while (true) { int num2 = num; int num3 = -1148814480; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: return false; case 1: num = (agentByInternalId->IsAgentActive() ? (-1148814477) : (-1148814480)); break; case 2: num = -1148814479; break; case 3: AgentHelper.SendEvent(agentByInternalId, 4uL, 0, 1, 0, 0, 0); return true; } } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TryConfirmRetrieve(IGameGui gameGui) { AtkUnitBase* addonPtr; int num = (gameGui.TryGetReadyAddon(global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(-507581273), out addonPtr) ? (-1428512463) : (-1428512462)); while (true) { int num2 = num; int num3 = -1428512461; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0052; case 2: AddonCallback.Fire(addonPtr, default(int)); addonPtr->Close(fireCallback: true); return true; case 1: return false; } continue; IL_0052: num = -1428512462; } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool IsMeldDialogReady(IGameGui gameGui) { AtkUnitBase* addonPtr; return gameGui.TryGetReadyAddon(global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(2146370651), out addonPtr); } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool IsRetrieveDialogReady(IGameGui gameGui) { AtkUnitBase* addonPtr; return gameGui.TryGetReadyAddon(global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(1509768351), out addonPtr); } public unsafe static bool IsAgentLoading() { AgentMateriaAttach* ptr = AgentMateriaAttach.Instance(); int num = ((ptr == null) ? (-1447124743) : (-1447124742)); while (true) { int num2 = num; int num3 = -1447124741; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: return false; case 1: return ptr->UpdateState != 0; case 0: goto IL_0057; } continue; IL_0057: num = -1447124742; } } public unsafe static int GetSelectedItemIndex() { AgentMateriaAttach* ptr = AgentMateriaAttach.Instance(); int num = ((ptr == null) ? (-10593117) : (-10593120)); while (true) { int num2 = num; int num3 = -10593119; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: return -1; case 1: return ptr->SelectedItemIndex; case 0: goto IL_0054; } continue; IL_0054: num = -10593120; } } public static AgentMateriaAttach.FilterCategory GetFilterCategory(InventoryType inventoryType) { int num = ((inventoryType > InventoryType.EquippedItems) ? (-1327648937) : (-1327648944)); AgentMateriaAttach.FilterCategory result = default(AgentMateriaAttach.FilterCategory); while (true) { int num2 = num; int num3 = -1327648930; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 11: result = AgentMateriaAttach.FilterCategory.Equipped; num = -1327648933; break; case 4: result = AgentMateriaAttach.FilterCategory.ArmouryWeapon; num = -1327648933; break; case 10: result = AgentMateriaAttach.FilterCategory.Inventory; num = -1327648933; break; case 14: num = ((inventoryType <= InventoryType.Inventory4) ? (-1327648940) : (-1327648931)); break; case 9: switch (inventoryType) { case InventoryType.ArmoryOffHand: break; default: goto IL_00f8; case InventoryType.ArmoryHead: case InventoryType.ArmoryBody: case InventoryType.ArmoryHands: goto IL_010e; case InventoryType.ArmoryWrist: goto IL_011b; case InventoryType.ArmoryLegs: case InventoryType.ArmoryFeets: goto IL_0128; case InventoryType.ArmoryEar: case InventoryType.ArmoryNeck: goto IL_0135; case InventoryType.ArmoryWaist: goto IL_016e; } goto case 4; case 15: num = -1327648944; break; case 7: goto IL_010e; case 2: goto IL_011b; case 6: goto IL_0128; case 8: goto IL_0135; case 1: num = ((inventoryType == InventoryType.ArmoryMainHand) ? (-1327648934) : (-1327648946)); break; case 16: num = -1327648930; break; case 0: goto IL_016e; case 5: return result; case 3: num = ((inventoryType == InventoryType.EquippedItems) ? (-1327648939) : (-1327648942)); break; case 12: num = -1327648930; break; case 13: { num = ((inventoryType == InventoryType.ArmoryRings) ? (-1327648932) : (-1327648929)); break; } IL_010e: result = AgentMateriaAttach.FilterCategory.ArmouryHeadBodyHands; num = -1327648933; break; IL_00f8: num = -1327648941; break; IL_016e: result = AgentMateriaAttach.FilterCategory.None; num = -1327648933; break; IL_0135: result = AgentMateriaAttach.FilterCategory.ArmouryNeckEars; num = -1327648933; break; IL_0128: result = AgentMateriaAttach.FilterCategory.ArmouryLegsFeet; num = -1327648933; break; IL_011b: result = AgentMateriaAttach.FilterCategory.ArmouryWristRing; num = -1327648933; break; } } } public unsafe static int? FindItemIndex(InventoryItem* target) { int num = ((target != null) ? (-1032587333) : (-1032587331)); AgentMateriaAttach* ptr = default(AgentMateriaAttach*); int num5 = default(int); AgentMateriaAttach.MateriaAttachEntry* value = default(AgentMateriaAttach.MateriaAttachEntry*); while (true) { int num2 = num; int num3 = -1032587332; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 8: num = ((!ptr->IsAgentActive()) ? (-1032587329) : (-1032587330)); break; case 3: return null; case 10: num = ((num5 < ptr->ItemCount) ? (-1032587339) : (-1032587336)); break; case 7: ptr = AgentMateriaAttach.Instance(); num = ((ptr == null) ? (-1032587329) : (-1032587340)); break; case 4: return null; case 12: { int num6 = num5; num3 = 1; num4 = num6; int num7 = num4 ^ num3; int num8 = num4 & num3; num5 = num7 + (num8 + num8); num = -1032587338; break; } case 9: value = ptr->Data->ItemsSorted[num5].Value; num = ((value == null) ? (-1032587344) : (-1032587335)); break; case 5: num = ((value->Item != target) ? (-1032587344) : (-1032587337)); break; case 1: return null; case 2: num = ((ptr->Data != null) ? (-1032587334) : (-1032587329)); break; case 11: return num5; case 0: num = -1032587331; break; case 6: num5 = 0; num = -1032587338; break; } } } public unsafe static int? FindMateriaIndex(uint materiaItemId) { AgentMateriaAttach* ptr = AgentMateriaAttach.Instance(); int num = ((ptr == null) ? 2014235157 : 2014235164); AgentMateriaAttach.MateriaAttachEntry* value = default(AgentMateriaAttach.MateriaAttachEntry*); int num6 = default(int); while (true) { int num2 = num; int num3 = 2014235167; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 11: num = ((value->Item->ItemId != materiaItemId) ? 2014235158 : 2014235159); break; case 0: num = ((ptr->Data != null) ? 2014235166 : 2014235157); break; case 10: return null; case 8: return num6; case 7: return null; case 3: num = ((!ptr->IsAgentActive()) ? 2014235157 : 2014235167); break; case 2: num = 2014235164; break; case 4: num = ((num6 < ptr->MateriaCount) ? 2014235162 : 2014235160); break; case 1: num6 = 0; num = 2014235163; break; case 5: value = ptr->Data->MateriaSorted[num6].Value; num = ((value == null) ? 2014235158 : 2014235161); break; case 6: num = ((value->Item == null) ? 2014235158 : 2014235156); break; case 9: { int num5 = num6; num3 = 1; num4 = num5; num6 = (num4 | num3) + (num4 & num3); num = 2014235163; break; } } } } public static bool IsMeldingUnlocked() { return GearFeatures.IsMeldingUnlocked(); } public static bool IsOvermeldingUnlocked() { return GearFeatures.IsOvermeldingUnlocked(); } public unsafe static bool CanMeldItem(IDataManager dataManager, InventoryItem* item) { int num = ((item == null) ? (-1684140330) : (-1684140332)); Item row = default(Item); int num5 = default(int); int num6 = default(int); while (true) { int num2 = num; int num3 = -1684140328; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 6: num = (dataManager.GetExcelSheet().TryGetRow(item->ItemId, out row) ? (-1684140324) : (-1684140325)); break; case 5: num5 = row.MateriaSlotCount; num = ((!row.IsAdvancedMeldingPermitted) ? (-1684140336) : (-1684140333)); break; case 4: num = ((row.MateriaSlotCount != 0) ? (-1684140323) : (-1684140335)); break; case 2: num = -1684140332; break; case 1: num = ((item->Materia[num6] != 0) ? (-1684140334) : (-1684140321)); break; case 13: return false; case 11: num5 = 5; num = -1684140336; break; case 0: num = ((num6 < num5) ? (-1684140327) : (-1684140331)); break; case 10: { int num7 = num6; num3 = 1; num4 = num7; int num8 = num4 ^ num3; int num9 = num4 & num3; num6 = num8 + (num9 + num9); num = -1684140328; break; } case 8: num6 = 0; num = -1684140328; break; case 7: return true; case 9: return false; case 14: return false; case 3: return false; case 12: num = ((item->ItemId != 0) ? (-1684140322) : (-1684140330)); break; } } } }