diff --git a/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs b/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs index cad84e03..11fd6eef 100644 --- a/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs @@ -18,6 +18,7 @@ public class ItemBaseClassService( { private bool _cacheGenerated; private Dictionary> _itemBaseClassesCache = []; + private HashSet rootNodeIds = []; /// /// Create cache and store inside ItemBaseClassService
@@ -29,18 +30,22 @@ public class ItemBaseClassService( _itemBaseClassesCache = new Dictionary>(); var items = databaseService.GetItems(); - var filteredDbItems = items.Where(x => - string.Equals(x.Value.Type, "Item", StringComparison.OrdinalIgnoreCase) - ); - foreach (var item in filteredDbItems) + foreach (var item in items) { - var itemIdToUpdate = item.Value.Id; - if (!_itemBaseClassesCache.ContainsKey(item.Value.Id)) + if (string.Equals(item.Value.Type, "Item", StringComparison.OrdinalIgnoreCase)) { - _itemBaseClassesCache[item.Value.Id] = []; - } + var itemIdToUpdate = item.Value.Id; + if (!_itemBaseClassesCache.ContainsKey(item.Value.Id)) + { + _itemBaseClassesCache[item.Value.Id] = []; + } - AddBaseItems(itemIdToUpdate, item.Value); + AddBaseItems(itemIdToUpdate, item.Value); + } + else + { + rootNodeIds.Add(item.Key); + } } _cacheGenerated = true; @@ -84,7 +89,7 @@ public class ItemBaseClassService( // The cache is only generated for item templates with `_type == "Item"`, so return false for any other type, // including item templates that simply don't exist. - if (!CachedItemIsOfItemType(itemTpl)) + if (rootNodeIds.Contains(itemTpl)) { return false; } @@ -118,20 +123,6 @@ public class ItemBaseClassService( return false; } - /// - /// Check if cached item template is of type Item - /// - /// ItemTemplateId item to check - /// True if item is of type Item - private bool CachedItemIsOfItemType(MongoId itemTemplateId) - { - return string.Equals( - databaseService.GetItems()[itemTemplateId]?.Type, - "Item", - StringComparison.OrdinalIgnoreCase - ); - } - /// /// Get base classes item inherits from ///