using System; using System.Collections.Generic; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using Lumina.Excel.Sheets; namespace LLib.Gear; public static class MateriaHelper { private const int MaxMateriaSlots = 5; public unsafe static List GetMeldedMateria(InventoryItem* item) { List list = new List(5); int num = ((item == null) ? (-1527939717) : (-1527939716)); int num7 = default(int); uint num9 = default(uint); while (true) { int num2 = num; int num3 = -1527939719; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 7: return list; case 4: num7 = 0; num = -1527939727; break; case 6: list.Add(new MeldSlotInfo(num7, num9, item->MateriaGrades[num7])); num = -1527939720; break; case 1: { int num8 = num7; num3 = 1; num4 = num8; num7 = (num4 | num3) + (num4 & num3); num = -1527939727; break; } case 0: num = -1527939716; break; case 3: num9 = item->Materia[num7]; num = ((num9 == 0) ? (-1527939720) : (-1527939713)); break; case 5: num = ((item->ItemId != 0) ? (-1527939715) : (-1527939717)); break; case 8: num = ((num7 < 5) ? (-1527939718) : (-1527939714)); break; case 2: return list; } } } public static int GetNormalSlotCount(IDataManager dataManager, uint itemId) { Item row; int num = (dataManager.GetExcelSheet().TryGetRow(itemId, out row) ? (-1343561605) : (-1343561608)); while (true) { int num2 = num; int num3 = -1343561607; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: return row.MateriaSlotCount; case 1: return 0; case 0: goto IL_0067; } continue; IL_0067: num = -1343561608; } } public static bool CanOvermeld(IDataManager dataManager, uint itemId) { Item row; int num = (dataManager.GetExcelSheet().TryGetRow(itemId, out row) ? (-2077097183) : (-2077097182)); while (true) { int num2 = num; int num3 = -2077097184; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 1: return row.IsAdvancedMeldingPermitted; case 2: return false; case 0: goto IL_0065; } continue; IL_0065: num = -2077097182; } } public static int GetOvermeldSuccessRate(IDataManager dataManager, byte grade, int overmeldSlot, bool isHq) { int num = ((overmeldSlot >= 0) ? 943397358 : 943397347); MateriaGrade row = default(MateriaGrade); while (true) { int num2 = num; int num3 = 943397355; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: num = 943397347; break; case 2: return row.OvermeldHQPercent[overmeldSlot]; case 4: num = ((overmeldSlot < row.OvermeldHQPercent.Count) ? 943397353 : 943397345); break; case 8: return 0; case 5: num = (dataManager.GetExcelSheet().TryGetRow(grade, out row) ? 943397354 : 943397356); break; case 3: num = ((overmeldSlot < row.OvermeldNQPercent.Count) ? 943397346 : 943397357); break; case 7: return 0; case 10: return 0; case 9: return row.OvermeldNQPercent[overmeldSlot]; case 1: num = ((!isHq) ? 943397352 : 943397359); break; case 6: return 0; } } } public unsafe static int CountMateriaInInventory(uint materiaItemId) { InventoryManager* ptr = InventoryManager.Instance(); int num = ((ptr != null) ? 244394904 : 244394907); while (true) { int num2 = num; int num3 = 244394905; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 1: return ptr->GetInventoryItemCount(materiaItemId, isHq: false, checkEquipped: true, checkArmory: true, 0); case 2: return 0; case 0: goto IL_0059; } continue; IL_0059: num = 244394907; } } public static int EstimateMateriaNeeded(int successRatePercent, int confidencePercent = 90) { int num = ((successRatePercent < 100) ? 394334376 : 394334378); double num5 = default(double); while (true) { int num2 = num; int num3 = 394334379; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: { double num6 = (double)successRatePercent / 100.0; double num7 = (double)_200E_200C_202D_202E_206D_206B_202B_202E_200E_200F_200F_202B_202A_202A_206D_200B_202E_200F_206E_206A_200D_206D_200F_200E_206B_200B_202A_200B_206A_200C_206E_202E_206E_206F_206B_206B_206A_200B_200B_202A_202E(confidencePercent, 0, 99) / 100.0; num5 = _202B_200F_202E_202E_200D_202C_206D_206B_200E_200E_202A_200D_206D_206D_202E_202A_200C_202C_200C_202A_206A_206B_200F_200E_206B_202B_206F_202B_202E_200E_202D_202E_206B_202A_202C_206C_206B_202B_200C_206B_202E(_200F_202B_200B_200C_206C_200E_202A_206D_206C_206D_200B_200C_202B_206A_200E_202A_206F_202B_206A_200D_200F_200D_200B_202E_202C_202C_200F_206B_206F_202E_200F_200C_200F_202C_202E_206F_200F_200B_206C_200C_202E(1.0 - num7) / _200F_202B_200B_200C_206C_200E_202A_206D_206C_206D_200B_200C_202B_206A_200E_202A_206F_202B_206A_200D_200F_200D_200B_202E_202C_202C_200F_206B_206F_202E_200F_200C_200F_202C_202E_206F_200F_200B_206C_200C_202E(1.0 - num6)); num = ((!(num5 < 1.0)) ? 394334379 : 394334371); break; } case 1: return 1; case 7: num = 394334378; break; case 5: return int.MaxValue; case 6: return (int)num5; case 4: return int.MaxValue; case 0: num = ((!(num5 > 2147483647.0)) ? 394334381 : 394334382); break; case 3: num = ((successRatePercent > 0) ? 394334377 : 394334383); break; case 8: return 1; } } } public static uint GetMateriaItemId(IDataManager dataManager, uint materiaRowId, byte grade) { Materia row; int num = (dataManager.GetExcelSheet().TryGetRow(materiaRowId, out row) ? (-1528382481) : (-1528382482)); while (true) { int num2 = num; int num3 = -1528382483; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 1: return 0u; case 3: return 0u; case 4: return row.Item[grade].RowId; case 2: num = ((grade < row.Item.Count) ? (-1528382487) : (-1528382484)); break; case 0: num = -1528382482; break; } } } static int _200E_200C_202D_202E_206D_206B_202B_202E_200E_200F_200F_202B_202A_202A_206D_200B_202E_200F_206E_206A_200D_206D_200F_200E_206B_200B_202A_200B_206A_200C_206E_202E_206E_206F_206B_206B_206A_200B_200B_202A_202E(int P_0, int P_1, int P_2) { return Math.Clamp(P_0, P_1, P_2); } static double _200F_202B_200B_200C_206C_200E_202A_206D_206C_206D_200B_200C_202B_206A_200E_202A_206F_202B_206A_200D_200F_200D_200B_202E_202C_202C_200F_206B_206F_202E_200F_200C_200F_202C_202E_206F_200F_200B_206C_200C_202E(double P_0) { return Math.Log(P_0); } static double _202B_200F_202E_202E_200D_202C_206D_206B_200E_200E_202A_200D_206D_206D_202E_202A_200C_202C_200C_202A_206A_206B_200F_200E_206B_202B_206F_202B_202E_200E_202D_202E_206B_202A_202C_206C_206B_202B_200C_206B_202E(double P_0) { return Math.Ceiling(P_0); } }