using System.Diagnostics; using System.Reflection; using EFT; using EFT.HealthSystem; using EFT.UI; using LootValueEX.Extensions; using SPT.Reflection.Patching; 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 tcsInventory = new(); CancellationTokenSource ctsInventory = new CancellationTokenSource(5000); Task 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()}"); } sw.Stop(); Plugin.Log.LogDebug($"Equipment processing finished in {sw.ElapsedMilliseconds}ms"); tcsInventory.SetResult(true); }, ctsInventory.Token); if(___lootItemClass != null) { LootItemClass lootItemClass = ___lootItemClass; TaskCompletionSource tcsLoot = new(); CancellationTokenSource ctsLoot = new CancellationTokenSource(5000); Task 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()}"); } Plugin.Log.LogDebug($"LootItemClass processing finished in {sw.ElapsedMilliseconds}ms"); tcsLoot.SetResult(true); }, ctsLoot.Token); } } } }