forked from aly/qstbak
muffin v7.5.6
This commit is contained in:
parent
6266f9e6b7
commit
addf2d530f
619 changed files with 264792 additions and 446022 deletions
298
LLib/LLib.Shop.Searchers/SpecialShopSearcher.cs
Normal file
298
LLib/LLib.Shop.Searchers/SpecialShopSearcher.cs
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Dalamud.Plugin.Services;
|
||||
using LLib.Shop.Model;
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace LLib.Shop.Searchers;
|
||||
|
||||
internal sealed class SpecialShopSearcher
|
||||
{
|
||||
private const uint SpecialShopHandlerType = 27u;
|
||||
|
||||
private static readonly Dictionary<uint, uint> SpecialCurrencies = new Dictionary<uint, uint>
|
||||
{
|
||||
{ 1u, 28u },
|
||||
{ 2u, 33913u },
|
||||
{ 4u, 33914u },
|
||||
{ 6u, 41784u },
|
||||
{ 7u, 41785u }
|
||||
};
|
||||
|
||||
private readonly IDataManager _dataManager;
|
||||
|
||||
private readonly NpcPositionCache _positionCache;
|
||||
|
||||
private readonly uint[] _tomestoneItemIds;
|
||||
|
||||
public SpecialShopSearcher(IDataManager dataManager, NpcPositionCache positionCache)
|
||||
{
|
||||
_dataManager = dataManager;
|
||||
_positionCache = positionCache;
|
||||
_tomestoneItemIds = (from t in dataManager.GetExcelSheet<TomestonesItem>()
|
||||
where t.Tomestones.RowId != 0
|
||||
orderby t.Tomestones.RowId
|
||||
select t.Item.RowId).ToArray();
|
||||
}
|
||||
|
||||
public List<ShopSearchResult> Search(uint itemId)
|
||||
{
|
||||
List<ShopSearchResult> list = new List<ShopSearchResult>();
|
||||
ExcelSheet<ENpcBase> excelSheet = _dataManager.GetExcelSheet<ENpcBase>();
|
||||
ExcelSheet<SpecialShop> excelSheet2 = _dataManager.GetExcelSheet<SpecialShop>();
|
||||
uint rowId = default(uint);
|
||||
RowRef current2 = default(RowRef);
|
||||
SpecialShop shop = default(SpecialShop);
|
||||
uint price = default(uint);
|
||||
uint currencyItemId = default(uint);
|
||||
SpecialShop.ItemStruct itemStruct = default(SpecialShop.ItemStruct);
|
||||
int num13 = default(int);
|
||||
int num9 = default(int);
|
||||
bool flag = default(bool);
|
||||
int num12 = default(int);
|
||||
SpecialShop.ItemStruct.ItemCostsStruct itemCostsStruct = default(SpecialShop.ItemStruct.ItemCostsStruct);
|
||||
foreach (ENpcBase item in excelSheet)
|
||||
{
|
||||
if (item.RowId == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
(ushort, Vector3)? position = _positionCache.GetPosition(item.RowId);
|
||||
if (!position.HasValue)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
(ushort, Vector3) valueOrDefault = position.GetValueOrDefault();
|
||||
int num = 0;
|
||||
using Collection<RowRef>.Enumerator enumerator2 = item.ENpcData.GetEnumerator();
|
||||
int num2 = 1586357649;
|
||||
while (true)
|
||||
{
|
||||
int num3 = num2;
|
||||
int num4 = 1586357637;
|
||||
int num5 = num3;
|
||||
int num6 = num5 + num4;
|
||||
int num7 = num5 & num4;
|
||||
switch (num6 - (num7 + num7))
|
||||
{
|
||||
case 5:
|
||||
rowId = current2.RowId;
|
||||
num2 = (excelSheet2.TryGetRow(rowId, out shop) ? 1586357643 : 1586357652);
|
||||
break;
|
||||
case 8:
|
||||
list.Add(new ShopSearchResult(rowId, item.RowId, valueOrDefault.Item1, valueOrDefault.Item2, EShopType.SpecialShop, price, currencyItemId, num));
|
||||
num2 = 1586357638;
|
||||
break;
|
||||
case 2:
|
||||
itemStruct = shop.Item[num13];
|
||||
num9 = 0;
|
||||
num2 = 1586357640;
|
||||
break;
|
||||
case 18:
|
||||
flag = true;
|
||||
num12 = 0;
|
||||
num2 = 1586357651;
|
||||
break;
|
||||
case 1:
|
||||
num2 = ((num13 < shop.Item.Count) ? 1586357639 : 1586357635);
|
||||
break;
|
||||
case 16:
|
||||
itemCostsStruct = itemStruct.ItemCosts[num12];
|
||||
num2 = ((itemCostsStruct.ItemCost.RowId == 0) ? 1586357646 : 1586357642);
|
||||
break;
|
||||
case 17:
|
||||
{
|
||||
int num19 = num;
|
||||
num4 = 1;
|
||||
num5 = num19;
|
||||
num = (num5 | num4) + (num5 & num4);
|
||||
num2 = 1586357649;
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
num2 = (flag ? 1586357635 : 1586357648);
|
||||
break;
|
||||
case 11:
|
||||
{
|
||||
int num18 = num12;
|
||||
num4 = 1;
|
||||
num5 = num18;
|
||||
num12 = (num5 | num4) + (num5 & num4);
|
||||
num2 = 1586357651;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
int num15 = num;
|
||||
num4 = 1;
|
||||
num5 = num15;
|
||||
int num16 = num5 ^ num4;
|
||||
int num17 = num5 & num4;
|
||||
num = num16 + (num17 + num17);
|
||||
num2 = 1586357649;
|
||||
break;
|
||||
}
|
||||
case 12:
|
||||
num2 = 1586357649;
|
||||
break;
|
||||
case 6:
|
||||
num2 = ((!flag) ? 1586357638 : 1586357645);
|
||||
break;
|
||||
case 13:
|
||||
num2 = ((num9 < itemStruct.ReceiveItems.Count) ? 1586357634 : 1586357647);
|
||||
break;
|
||||
case 7:
|
||||
num2 = ((itemStruct.ReceiveItems[num9].Item.RowId != itemId) ? 1586357633 : 1586357655);
|
||||
break;
|
||||
case 14:
|
||||
flag = false;
|
||||
currencyItemId = 0u;
|
||||
price = 0u;
|
||||
num13 = 0;
|
||||
num2 = 1586357636;
|
||||
break;
|
||||
case 20:
|
||||
num2 = (enumerator2.MoveNext() ? 1586357644 : 1586357654);
|
||||
break;
|
||||
case 9:
|
||||
current2 = enumerator2.Current;
|
||||
num2 = ((current2.RowId >> 16 != 27) ? 1586357649 : 1586357632);
|
||||
break;
|
||||
case 21:
|
||||
{
|
||||
int num14 = num13;
|
||||
num4 = 1;
|
||||
num5 = num14;
|
||||
num13 = (num5 | num4) + (num5 & num4);
|
||||
num2 = 1586357636;
|
||||
break;
|
||||
}
|
||||
case 22:
|
||||
num2 = ((num12 < itemStruct.ItemCosts.Count) ? 1586357653 : 1586357637);
|
||||
break;
|
||||
case 15:
|
||||
currencyItemId = ConvertCurrencyItemId(itemCostsStruct.ItemCost.RowId, in shop);
|
||||
price = itemCostsStruct.CurrencyCost;
|
||||
num2 = 1586357647;
|
||||
break;
|
||||
case 0:
|
||||
num2 = 1586357647;
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
int num8 = num9;
|
||||
num4 = 1;
|
||||
num5 = num8;
|
||||
int num10 = num5 ^ num4;
|
||||
int num11 = num5 & num4;
|
||||
num9 = num10 + (num11 + num11);
|
||||
num2 = 1586357640;
|
||||
break;
|
||||
}
|
||||
case 19:
|
||||
goto end_IL_009b;
|
||||
}
|
||||
continue;
|
||||
end_IL_009b:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private uint ConvertCurrencyItemId(uint costItemId, in SpecialShop shop)
|
||||
{
|
||||
int num = ((costItemId == 0) ? 1435581379 : 1435581385);
|
||||
uint num8 = default(uint);
|
||||
ushort num7 = default(ushort);
|
||||
bool flag = default(bool);
|
||||
while (true)
|
||||
{
|
||||
int num2 = num;
|
||||
int num3 = 1435581387;
|
||||
int num4 = num2;
|
||||
int num5 = num4 + num3;
|
||||
int num6 = num4 & num3;
|
||||
uint num10;
|
||||
switch (num5 - (num6 + num6))
|
||||
{
|
||||
case 3:
|
||||
num8 = SpecialCurrencies.GetValueOrDefault(costItemId, costItemId);
|
||||
num = 1435581387;
|
||||
break;
|
||||
case 7:
|
||||
num = ((num7 == 8) ? 1435581389 : 1435581390);
|
||||
break;
|
||||
case 4:
|
||||
num8 = costItemId;
|
||||
num = 1435581387;
|
||||
break;
|
||||
case 15:
|
||||
num10 = costItemId;
|
||||
goto IL_014f;
|
||||
case 12:
|
||||
flag = false;
|
||||
num = 1435581386;
|
||||
break;
|
||||
case 14:
|
||||
num7 = 16;
|
||||
num = 1435581403;
|
||||
break;
|
||||
case 5:
|
||||
num = ((num7 != 16) ? 1435581391 : 1435581384);
|
||||
break;
|
||||
case 16:
|
||||
num = ((num7 == 4) ? 1435581382 : 1435581388);
|
||||
break;
|
||||
case 11:
|
||||
num = 1435581385;
|
||||
break;
|
||||
case 8:
|
||||
return costItemId;
|
||||
case 17:
|
||||
{
|
||||
uint[] tomestoneItemIds = _tomestoneItemIds;
|
||||
num3 = 1;
|
||||
num4 = (int)costItemId;
|
||||
num10 = tomestoneItemIds[~(~num4 + num3)];
|
||||
goto IL_014f;
|
||||
}
|
||||
case 10:
|
||||
flag = true;
|
||||
num = 1435581386;
|
||||
break;
|
||||
case 2:
|
||||
num = ((costItemId < 8) ? 1435581378 : 1435581379);
|
||||
break;
|
||||
case 13:
|
||||
num = ((costItemId <= _tomestoneItemIds.Length) ? 1435581402 : 1435581380);
|
||||
break;
|
||||
case 0:
|
||||
return num8;
|
||||
case 6:
|
||||
num8 = 1u;
|
||||
num = 1435581387;
|
||||
break;
|
||||
case 1:
|
||||
num = ((!flag) ? 1435581403 : 1435581381);
|
||||
break;
|
||||
case 9:
|
||||
{
|
||||
num7 = shop.UseCurrencyType;
|
||||
num8 = shop.RowId;
|
||||
uint num9 = num8;
|
||||
num3 = 1770637;
|
||||
num4 = (int)num9;
|
||||
num = (((uint)(~(~num4 + num3)) > 1u) ? 1435581383 : 1435581377);
|
||||
break;
|
||||
}
|
||||
IL_014f:
|
||||
num8 = num10;
|
||||
num = 1435581387;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue