58 lines
2.5 KiB
C#
58 lines
2.5 KiB
C#
using System.Diagnostics;
|
|
using System.Reflection;
|
|
using EFT;
|
|
using EFT.HealthSystem;
|
|
using EFT.UI;
|
|
using LootValueEX.Extensions;
|
|
using SPT.Reflection.Patching;
|
|
// ReSharper disable InconsistentNaming
|
|
|
|
namespace LootValueEX.Patches.Screens
|
|
{
|
|
internal class InventoryScreenPatch : ModulePatch
|
|
{
|
|
protected override MethodBase GetTargetMethod() => typeof(InventoryScreen).GetMethods().SingleOrDefault(method => method.Name == "Show" && method.GetParameters()[0].ParameterType == typeof(IHealthController));
|
|
|
|
[PatchPostfix]
|
|
private static void PatchPostfix(ref Profile ___profile_0, ref LootItemClass ___lootItemClass)
|
|
{
|
|
Profile profile = ___profile_0;
|
|
|
|
TaskCompletionSource<bool> tcsInventory = new();
|
|
CancellationTokenSource ctsInventory = new CancellationTokenSource(5000);
|
|
Task<bool> taskInventory = tcsInventory.Task;
|
|
Task.Factory.StartNew(async () =>
|
|
{
|
|
Stopwatch sw = Stopwatch.StartNew();
|
|
foreach(EFT.InventoryLogic.Item item in profile.Inventory.GetPlayerItems(EFT.InventoryLogic.EPlayerItems.Equipment))
|
|
{
|
|
//Plugin.Log.LogDebug($"Equip Process: {item.LocalizedName()} ({item.TemplateId}): {await item.GetCustomHashAsync()}");
|
|
continue;
|
|
}
|
|
sw.Stop();
|
|
Plugin.Log.LogDebug($"Equipment processing finished in {sw.ElapsedMilliseconds}ms");
|
|
tcsInventory.SetResult(true);
|
|
}, ctsInventory.Token);
|
|
|
|
if(___lootItemClass != null)
|
|
{
|
|
LootItemClass lootItemClass = ___lootItemClass;
|
|
TaskCompletionSource<bool> tcsLoot = new();
|
|
CancellationTokenSource ctsLoot = new CancellationTokenSource(5000);
|
|
Task<bool> taskLoot = tcsLoot.Task;
|
|
Task.Factory.StartNew(async () =>
|
|
{
|
|
Stopwatch sw = Stopwatch.StartNew();
|
|
foreach (EFT.InventoryLogic.Item item in lootItemClass.GetAllItems())
|
|
{
|
|
//Plugin.Log.LogDebug($"LootItemClass process: {item.LocalizedName()} ({item.TemplateId}): {await item.GetCustomHashAsync()}");
|
|
continue;
|
|
}
|
|
Plugin.Log.LogDebug($"LootItemClass processing finished in {sw.ElapsedMilliseconds}ms");
|
|
tcsLoot.SetResult(true);
|
|
}, ctsLoot.Token);
|
|
}
|
|
}
|
|
}
|
|
}
|