using System.Collections.Generic; using FFXIVClientStructs.FFXIV.Client.Game; namespace LLib.Gear; public static class GearConditionHelper { private const ushort MaxCondition = 30000; private const ushort MaxSpiritbond = 10000; public unsafe static int? GetLowestConditionPercent() { InventoryContainer* equippedContainer = EquipmentSlots.GetEquippedContainer(); int num = ((equippedContainer != null) ? 136938409 : 136938411); int? result = default(int?); int num9 = default(int); int num8 = default(int); InventoryItem* item = default(InventoryItem*); while (true) { int num2 = num; int num3 = 136938412; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 10: return result; case 8: result = num9; num = 136938405; break; case 4: num = ((num8 == 5) ? 136938405 : 136938410); break; case 7: return null; case 6: num = ((!EquipmentSlots.TryGetEquippedItem(equippedContainer, num8, out item)) ? 136938405 : 136938414); break; case 1: num = ((num9 >= result.Value) ? 136938405 : 136938404); break; case 2: num9 = item->Condition * 100 / 30000; num = ((!result.HasValue) ? 136938404 : 136938413); break; case 5: result = null; num8 = 0; num = 136938415; break; case 3: num = ((num8 < 13) ? 136938408 : 136938406); break; case 0: num = 136938411; break; case 9: { int num7 = num8; num3 = 1; num4 = num7; num8 = (num4 | num3) + (num4 & num3); num = 136938415; break; } } } } public unsafe static List GetAllSlotConditions() { List list = new List(13); InventoryContainer* equippedContainer = EquipmentSlots.GetEquippedContainer(); int num = ((equippedContainer != null) ? 1727066767 : 1727066762); int num5 = default(int); InventoryItem* item = default(InventoryItem*); while (true) { int num2 = num; int num3 = 1727066761; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 4: num = ((num5 < 13) ? 1727066764 : 1727066763); break; case 6: num5 = 0; num = 1727066765; break; case 3: return list; case 8: { int num6 = num5; num3 = 1; num4 = num6; int num7 = num4 ^ num3; int num8 = num4 & num3; num5 = num7 + (num8 + num8); num = 1727066765; break; } case 7: list.Add(new SlotCondition(num5, item->ItemId, item->Condition * 100 / 30000)); num = 1727066753; break; case 5: num = ((num5 == 5) ? 1727066753 : 1727066760); break; case 0: num = 1727066762; break; case 1: num = ((!EquipmentSlots.TryGetEquippedItem(equippedContainer, num5, out item)) ? 1727066753 : 1727066766); break; case 2: return list; } } } public unsafe static bool HasSpiritbondReadyItem(bool includeBags = false) { InventoryContainer* equippedContainer = EquipmentSlots.GetEquippedContainer(); int num = ((equippedContainer == null) ? 566966460 : 566966456); int num5 = default(int); InventoryContainer* inventoryContainer = default(InventoryContainer*); int num6 = default(int); InventoryItem* item = default(InventoryItem*); InventoryType inventoryType = default(InventoryType); InventoryItem* inventorySlot = default(InventoryItem*); InventoryManager* ptr = default(InventoryManager*); while (true) { int num2 = num; int num3 = 566966450; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 15: num = ((num5 < inventoryContainer->Size) ? 566966433 : 566966438); break; case 14: num = (includeBags ? 566966451 : 566966463); break; case 4: num = ((!EquipmentSlots.TryGetEquippedItem(equippedContainer, num6, out item)) ? 566966442 : 566966449); break; case 24: { int num8 = num6; num3 = 1; num4 = num8; num6 = (num4 | num3) + (num4 & num3); num = 566966452; break; } case 5: { int num7 = num5; num3 = 1; num4 = num7; num5 = (num4 | num3) + (num4 & num3); num = 566966461; break; } case 7: num5 = 0; num = 566966461; break; case 18: num = 566966456; break; case 3: num = ((item->SpiritbondOrCollectability < 10000) ? 566966442 : 566966458); break; case 10: num6 = 0; num = 566966452; break; case 6: num = ((num6 < 13) ? 566966459 : 566966460); break; case 20: inventoryType++; num = 566966439; break; case 12: num = (((inventorySlot->Flags & InventoryItem.ItemFlags.Collectable) != InventoryItem.ItemFlags.None) ? 566966455 : 566966457); break; case 19: inventorySlot = inventoryContainer->GetInventorySlot(num5); num = ((inventorySlot == null) ? 566966455 : 566966434); break; case 2: return false; case 8: return true; case 17: inventoryContainer = ptr->GetInventoryContainer(inventoryType); num = ((inventoryContainer == null) ? 566966438 : 566966453); break; case 11: num = ((inventorySlot->SpiritbondOrCollectability < 10000) ? 566966455 : 566966437); break; case 23: return true; case 22: return false; case 13: return false; case 16: num = ((inventorySlot->ItemId == 0) ? 566966455 : 566966462); break; case 21: num = ((inventoryType <= InventoryType.Inventory4) ? 566966435 : 566966436); break; case 9: num = ((num6 == 5) ? 566966442 : 566966454); break; case 0: inventoryType = InventoryType.Inventory1; num = 566966439; break; case 1: ptr = InventoryManager.Instance(); num = ((ptr != null) ? 566966450 : 566966448); break; } } } public unsafe static int? GetLowestSpiritbondPercent() { InventoryContainer* equippedContainer = EquipmentSlots.GetEquippedContainer(); int num = ((equippedContainer != null) ? 1500996181 : 1500996188); int? result = default(int?); int num8 = default(int); int num7 = default(int); InventoryItem* item = default(InventoryItem*); while (true) { int num2 = num; int num3 = 1500996182; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 4: num = 1500996188; break; case 6: result = num8; num = 1500996183; break; case 9: num = ((num7 < 13) ? 1500996177 : 1500996180); break; case 10: return null; case 0: num = ((!EquipmentSlots.TryGetEquippedItem(equippedContainer, num7, out item)) ? 1500996183 : 1500996190); break; case 5: num = ((num8 >= result.Value) ? 1500996183 : 1500996176); break; case 1: { int num9 = num7; num3 = 1; num4 = num9; int num10 = num4 ^ num3; int num11 = num4 & num3; num7 = num10 + (num11 + num11); num = 1500996191; break; } case 8: num8 = item->SpiritbondOrCollectability * 100 / 10000; num = ((!result.HasValue) ? 1500996176 : 1500996179); break; case 7: num = ((num7 == 5) ? 1500996183 : 1500996182); break; case 2: return result; case 3: result = null; num7 = 0; num = 1500996191; break; } } } public unsafe static List GetAllSpiritbondInfo() { List list = new List(13); InventoryContainer* equippedContainer = EquipmentSlots.GetEquippedContainer(); int num = ((equippedContainer != null) ? 818481642 : 818481641); int num5 = default(int); InventoryItem* item = default(InventoryItem*); while (true) { int num2 = num; int num3 = 818481643; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 5: num = ((!EquipmentSlots.TryGetEquippedItem(equippedContainer, num5, out item)) ? 818481647 : 818481643); break; case 7: num = ((num5 == 5) ? 818481647 : 818481646); break; case 1: num5 = 0; num = 818481645; break; case 4: { int num6 = num5; num3 = 1; num4 = num6; num5 = (num4 | num3) + (num4 & num3); num = 818481645; break; } case 8: return list; case 2: return list; case 6: num = ((num5 < 13) ? 818481644 : 818481635); break; case 0: list.Add(new SlotSpiritbond(num5, item->ItemId, item->SpiritbondOrCollectability * 100 / 10000, item->SpiritbondOrCollectability >= 10000)); num = 818481647; break; case 3: num = 818481641; break; } } } }