forked from aly/qstbak
352 lines
8.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|