1
0
Fork 0
forked from aly/qstbak
qstbak/LLib/LLib.Gear/GearConditionHelper.cs
2026-08-17 20:27:25 +10:00

352 lines
8.3 KiB
C#

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<SlotCondition> GetAllSlotConditions()
{
List<SlotCondition> list = new List<SlotCondition>(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<SlotSpiritbond> GetAllSpiritbondInfo()
{
List<SlotSpiritbond> list = new List<SlotSpiritbond>(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;
}
}
}
}