From 098374820171ea6f8f7f625d21b923d492fea952 Mon Sep 17 00:00:00 2001 From: Chomp Date: Tue, 2 Sep 2025 10:50:00 +0100 Subject: [PATCH] Improved safety of accessing static loot dictionary inside `GetPossibleLootItemsForContainer` Moved code around for tiny optimisation --- .../Generators/LocationLootGenerator.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs index e9a7f719..5234f964 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs @@ -580,34 +580,34 @@ public class LocationLootGenerator( Dictionary staticLootDist ) { - var seasonalEventActive = seasonalEventService.SeasonalEventEnabled(); - var seasonalItemTplBlacklist = seasonalEventService.GetInactiveSeasonalEventItems(); - - var itemDistribution = new ProbabilityObjectArray(cloner); - - var itemContainerDistribution = staticLootDist[containerTypeId]?.ItemDistribution; - if (itemContainerDistribution is null) + if (!staticLootDist.TryGetValue(containerTypeId, out var staticLoot) || staticLoot?.ItemDistribution is null) { logger.Warning(serverLocalisationService.GetText("location-missing_item_distribution_data", containerTypeId)); - return itemDistribution; + return new ProbabilityObjectArray(cloner); } - foreach (var icd in itemContainerDistribution) + var itemDistribution = new ProbabilityObjectArray(cloner); + var seasonalEventActive = seasonalEventService.SeasonalEventEnabled(); + var seasonalItemTplBlacklist = seasonalEventService.GetInactiveSeasonalEventItems(); + + foreach (var itemWithProbability in staticLoot.ItemDistribution) { - if (!seasonalEventActive && seasonalItemTplBlacklist.Contains(icd.Tpl)) + if (!seasonalEventActive && seasonalItemTplBlacklist.Contains(itemWithProbability.Tpl)) { - // Skip seasonal event items if they're not enabled + // Prevent seasonal loot when not inside season continue; } - if (itemFilterService.IsLootableItemBlacklisted(icd.Tpl)) + if (itemFilterService.IsLootableItemBlacklisted(itemWithProbability.Tpl)) { - // Ensure no blacklisted lootable items are in pool + // Prevent non-loot items getting into pool continue; } - itemDistribution.Add(new ProbabilityObject(icd.Tpl, icd.RelativeProbability.Value, null)); + itemDistribution.Add( + new ProbabilityObject(itemWithProbability.Tpl, itemWithProbability.RelativeProbability.Value, null) + ); } return itemDistribution;