using System; using System.Runtime.CompilerServices; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.UI; using FFXIVClientStructs.FFXIV.Component.GUI; using LLib.GameUI; using Lumina.Excel; using Lumina.Excel.Sheets; namespace LLib.Gear; public static class RepairActions { public const uint RepairServiceDataId = 720915u; public unsafe static bool TryOpenRepairWindow() { ActionManager* ptr = ActionManager.Instance(); int num = ((ptr != null) ? 68220505 : 68220506); while (true) { int num2 = num; int num3 = 68220504; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 1: return ptr->UseAction(ActionType.GeneralAction, 6u, 3758096384uL, 0u, ActionManager.UseActionMode.None, 0u, null); case 2: return false; case 0: goto IL_0061; } continue; IL_0061: num = 68220506; } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool IsRepairAddonReady(IGameGui gameGui) { AtkUnitBase* addonPtr; return 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(2048825811), out addonPtr); } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TryRepairAll(IGameGui gameGui) { AtkUnitBase* addonPtr; int num = (gameGui.TryGetReadyAddon(global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(419098168), out addonPtr) ? (-498234615) : (-498234614)); while (true) { int num2 = num; int num3 = -498234613; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0052; case 2: return AddonCallback.ClickButton(addonPtr, ((AddonRepair*)addonPtr)->RepairAllButton); case 1: return false; } continue; IL_0052: num = -498234614; } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TryConfirmDialog(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(2048825811), out addonPtr) ? 2047386500 : 2047386499); AtkUnitBase* addonPtr2 = default(AtkUnitBase*); while (true) { int num2 = num; int num3 = 2047386496; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: AddonCallback.ClickYes(addonPtr2); return true; case 3: return false; case 4: num = (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(423301839), out addonPtr2) ? 2047386498 : 2047386497); break; case 1: return false; case 0: num = 2047386499; break; } } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static string DescribeRepairAddon(IGameGui gameGui) { AtkUnitBase* addonPtr; int num = (gameGui.TryGetAddonByName(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(-469715628), out addonPtr) ? 1483181869 : 1483181871); AtkComponentButton* repairAllButton = default(AtkComponentButton*); while (true) { int num2 = num; int num3 = 1483181870; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; string text; string value; DefaultInterpolatedStringHandler defaultInterpolatedStringHandler; switch (num5 - (num6 + num6)) { case 2: num = 1483181871; break; case 3: repairAllButton = ((AddonRepair*)addonPtr)->RepairAllButton; num = ((repairAllButton == null) ? 1483181864 : 1483181866); break; case 1: return 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(1020358053); case 0: text = 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(1832920714); goto IL_00eb; case 5: text = 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(120055411); goto IL_00eb; case 6: text = 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(2048905668); goto IL_00eb; case 4: { num = (repairAllButton->IsEnabled ? 1483181867 : 1483181870); break; } IL_00eb: value = text; defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(44, 3); defaultInterpolatedStringHandler.AppendLiteral(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(-734034791)); defaultInterpolatedStringHandler.AppendFormatted(addonPtr->IsVisible); defaultInterpolatedStringHandler.AppendLiteral(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(-199296985)); defaultInterpolatedStringHandler.AppendFormatted(LAddon.IsAddonReady(addonPtr)); defaultInterpolatedStringHandler.AppendLiteral(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(-1116769434)); defaultInterpolatedStringHandler.AppendFormatted(value); return defaultInterpolatedStringHandler.ToStringAndClear(); } } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TryCloseRepairWindow(IGameGui gameGui) { AtkUnitBase* addonPtr; int num = (gameGui.TryGetAddonByName(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(1033968236), out addonPtr) ? (-405897678) : (-405897677)); while (true) { int num2 = num; int num3 = -405897678; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: goto IL_0052; case 0: addonPtr->Close(fireCallback: true); return true; case 1: return false; } continue; IL_0052: num = -405897677; } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe static bool TrySelectRepairFromMenu(IGameGui gameGui, int repairIndex) { AtkUnitBase* addonPtr; int num = (gameGui.TryGetReadyAddon(global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(-779772561), out addonPtr) ? 1787787027 : 1787787024); while (true) { int num2 = num; int num3 = 1787787025; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0052; case 1: return false; case 2: AddonCallback.FireWithUpdate(addonPtr, repairIndex); return true; } continue; IL_0052: num = 1787787024; } } public static int? FindRepairIndex(IDataManager dataManager, uint npcBaseId) { ENpcBase row; int num = (dataManager.GetExcelSheet().TryGetRow(npcBaseId, out row) ? (-1361038007) : (-1361038008)); int num5 = default(int); while (true) { int num2 = num; int num3 = -1361038006; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 6: { int num6 = num5; num3 = 1; num4 = num6; int num7 = num4 ^ num3; int num8 = num4 & num3; num5 = num7 + (num8 + num8); num = -1361038003; break; } case 2: return null; case 3: num5 = 0; num = -1361038003; break; case 1: num = ((row.ENpcData[num5].RowId != 720915) ? (-1361038004) : (-1361038002)); break; case 7: num = ((num5 < row.ENpcData.Count) ? (-1361038005) : (-1361038001)); break; case 4: return num5; case 0: num = -1361038008; break; case 5: return null; } } } public static bool CanSelfRepairItem(uint itemId, IDataManager dataManager, Func jobLevelLookup) { Item row; int num = (dataManager.GetExcelSheet().TryGetRow(itemId, out row) ? 1632671578 : 1632671580); uint rowId = default(uint); uint num7 = default(uint); while (true) { int num2 = num; int num3 = 1632671577; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 7: return false; case 6: { byte num8 = jobLevelLookup(rowId); int num9 = _206E_206F_206E_202B_202E_202E_206A_202A_202B_200F_206E_200D_200F_206C_200B_206D_206D_202E_200D_200B_200D_206C_200D_202E_206F_202B_206C_206B_206B_206B_200D_202B_206C_200F_202B_206E_202C_206C_202B_202A_202E(row.LevelEquip - 10, 1); num = ((num8 >= num9) ? 1632671576 : 1632671581); break; } case 0: return HasDarkMatterOrBetter(dataManager, num7); case 5: return false; case 2: return false; case 4: return false; case 3: rowId = row.ClassJobRepair.RowId; num = ((rowId != 0) ? 1632671583 : 1632671579); break; case 8: num = 1632671580; break; case 1: num7 = row.ItemRepair.ValueNullable?.Item.RowId ?? 0; num = ((num7 != 0) ? 1632671577 : 1632671582); break; } } } public unsafe static bool CanSelfRepairAny(IDataManager dataManager, Func jobLevelLookup, int thresholdPercent = 100) { InventoryManager* ptr = InventoryManager.Instance(); int num = ((ptr != null) ? 1849138139 : 1849138142); int num7 = default(int); InventoryItem* inventorySlot = default(InventoryItem*); InventoryContainer* inventoryContainer = default(InventoryContainer*); while (true) { int num2 = num; int num3 = 1849138143; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: return true; case 9: num7 = 0; num = 1849138140; break; case 5: num = ((!CanSelfRepairItem(inventorySlot->ItemId, dataManager, jobLevelLookup)) ? 1849138131 : 1849138143); break; case 2: num = 1849138142; break; case 7: inventorySlot = inventoryContainer->GetInventorySlot(num7); num = ((inventorySlot == null) ? 1849138131 : 1849138132); break; case 10: return false; case 6: num = ((inventorySlot->Condition * 100 / 30000 >= thresholdPercent) ? 1849138131 : 1849138138); break; case 11: num = ((inventorySlot->ItemId == 0) ? 1849138131 : 1849138137); break; case 8: return false; case 12: { int num8 = num7; num3 = 1; num4 = num8; int num9 = num4 ^ num3; int num10 = num4 & num3; num7 = num9 + (num10 + num10); num = 1849138140; break; } case 3: num = ((num7 < inventoryContainer->Size) ? 1849138136 : 1849138133); break; case 4: inventoryContainer = ptr->GetInventoryContainer(InventoryType.EquippedItems); num = ((inventoryContainer != null) ? 1849138134 : 1849138135); break; case 1: return false; } } } private unsafe static bool HasDarkMatterOrBetter(IDataManager dataManager, uint requiredItemId) { InventoryManager* ptr = InventoryManager.Instance(); int num = ((ptr != null) ? (-248963167) : (-248963166)); ItemRepairResource current = default(ItemRepairResource); while (true) { int num2 = num; int num3 = -248963165; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: goto IL_0054; case 1: return false; case 2: { ExcelSheet excelSheet = dataManager.GetExcelSheet(); bool flag = false; using (ExcelSheet.Enumerator enumerator = excelSheet.GetEnumerator()) { num = 975190741; while (true) { int num7 = num; num3 = 975190742; num4 = num7; int num8 = num4 + num3; int num9 = num4 & num3; switch (num8 - (num9 + num9)) { case 3: num = (enumerator.MoveNext() ? 975190743 : 975190742); break; case 6: flag = true; num = 975190737; break; case 1: current = enumerator.Current; num = ((current.Item.RowId != requiredItemId) ? 975190737 : 975190736); break; case 5: num = ((ptr->GetInventoryItemCount(current.Item.RowId, isHq: false, checkEquipped: true, checkArmory: true, 0) <= 0) ? 975190741 : 975190740); break; case 4: num = 975190741; break; case 7: num = ((!flag) ? 975190741 : 975190739); break; case 2: return true; case 0: goto end_IL_0086; } continue; end_IL_0086: break; } } return false; } } continue; IL_0054: num = -248963166; } } static int _206E_206F_206E_202B_202E_202E_206A_202A_202B_200F_206E_200D_200F_206C_200B_206D_206D_202E_200D_200B_200D_206C_200D_202E_206F_202B_206C_206B_206B_206B_200D_202B_206C_200F_202B_206E_202C_206C_202B_202A_202E(int P_0, int P_1) { return Math.Max(P_0, P_1); } }