From 80b50af7324b4b5154c678e44c7406bd19126d59 Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 25 Jun 2025 13:39:18 +0100 Subject: [PATCH] Refactored `RemoveBlacklistedLootFromBotTemplate` to not use reflection --- .../Generators/BotGenerator.cs | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs index abfb6d8e..aeb6a8bb 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs @@ -474,29 +474,32 @@ public class BotGenerator( /// Bot to filter public void RemoveBlacklistedLootFromBotTemplate(BotTypeInventory botInventory) { - List lootContainersToFilter = ["Backpack", "Pockets", "TacticalVest"]; - var props = botInventory.Items.GetType().GetProperties(); - - // Remove blacklisted loot from loot containers - foreach (var lootContainerKey in lootContainersToFilter) + var containersToProcess = new List> { - var propInfo = props.FirstOrDefault(x => - string.Equals(x.Name, lootContainerKey, StringComparison.CurrentCultureIgnoreCase) - ); - var prop = (Dictionary?)propInfo.GetValue(botInventory.Items); + botInventory.Items.Backpack, + botInventory.Items.Pockets, + botInventory.Items.TacticalVest, + }; - // No container, skip - if (prop is null) + foreach (var container in containersToProcess) + { + if (!container.Any()) { + // Nothing in container, skip continue; } - var newProp = prop.Where(tpl => - { - return !_itemFilterService.IsLootableItemBlacklisted(tpl.Key); - }) - .ToDictionary(); - propInfo.SetValue(botInventory.Items, newProp); + // Create a set of tpls to remove + var keysToRemove = container + .Where(item => _itemFilterService.IsLootableItemBlacklisted(item.Key)) + .Select(item => item.Key) + .ToHashSet(); + + // Remove from container by key + foreach (var key in keysToRemove) + { + container.Remove(key); + } } }