diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index 41bf67ba..41b77e05 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -197,18 +197,16 @@ namespace SabreTools.DatFiles { foreach (string key in SortedKeys) { - // Perform filtering on items - List list = GetItemsForBucket(key, filter: true); + // Get the unfiltered list + List list = GetItemsForBucket(key, filter: false); - // Remove the current list - RemoveBucket(key); + foreach (DatItem datItem in list) + { + if (datItem.GetBoolFieldValue(DatItem.RemoveKey) != true) + continue; - // Add the filtered list back -#if NET40_OR_GREATER || NETCOREAPP - _ = _items.TryAdd(key, list); -#else - _items[key] = list; -#endif + RemoveItem(key, datItem); + } } } diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index af189cb0..dfc3dc8d 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -308,13 +308,13 @@ namespace SabreTools.DatFiles foreach (long itemIndex in itemIndices) { #if NET40_OR_GREATER || NETCOREAPP - if (!_items.TryGetValue(itemIndex, out var datItem)) + if (!_items.TryGetValue(itemIndex, out var datItem) || datItem == null) continue; #else var datItem = _items[itemIndex]; #endif - if (datItem == null || datItem.GetBoolFieldValue(DatItem.RemoveKey) != true) + if (datItem.GetBoolFieldValue(DatItem.RemoveKey) != true) continue; RemoveItem(itemIndex); @@ -545,15 +545,35 @@ namespace SabreTools.DatFiles public bool RemoveBucket(string key) { #if NET40_OR_GREATER || NETCOREAPP - return _buckets.TryRemove(key, out var list); + bool removed = _buckets.TryRemove(key, out var list); #else if (!_buckets.ContainsKey(key)) return false; + bool removed = true; var list = _buckets[key]; _buckets.Remove(key); - return true; #endif + if (list == null) + return removed; + + foreach (var index in list) + { +#if NET40_OR_GREATER || NETCOREAPP + if (!_items.TryGetValue(index, out var datItem) || datItem == null) + continue; +#else + if (!_items.ContainsKey(index)) + continue; + + var datItem = _items[index]; +#endif + + RemoveItem(index); + DatStatistics.RemoveItemStatistics(datItem); + } + + return removed; } ///