diff --git a/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs index 71871e0e..69c56b4c 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs @@ -1,3 +1,4 @@ +using System.Collections.Concurrent; using SPTarkov.Server.Core.Helpers; using SPTarkov.Server.Core.Models.Eft.Common.Tables; using SPTarkov.Server.Core.Models.Enums; @@ -22,9 +23,9 @@ public class PMCLootGenerator private readonly SeasonalEventService _seasonalEventService; private readonly WeightedRandomHelper _weightedRandomHelper; - private Dictionary? _backpackLootPool; - private Dictionary? _pocketLootPool; - private Dictionary? _vestLootPool; + private ConcurrentDictionary? _backpackLootPool; + private ConcurrentDictionary? _pocketLootPool; + private ConcurrentDictionary? _vestLootPool; public PMCLootGenerator( ISptLogger logger, @@ -54,12 +55,12 @@ public class PMCLootGenerator /// /// /// Dictionary of string and number - public Dictionary GeneratePMCPocketLootPool(string botRole) + public ConcurrentDictionary GeneratePMCPocketLootPool(string botRole) { // Hydrate loot dictionary if empty if (_pocketLootPool is null) { - _pocketLootPool = new Dictionary(); + _pocketLootPool = new ConcurrentDictionary(); var items = _databaseService.GetItems(); var pmcPriceOverrides = _databaseService.GetBots().Types[string.Equals(botRole, "pmcbear", StringComparison.OrdinalIgnoreCase) ? "bear" : "usec"].BotInventory.Items.Pockets; @@ -82,7 +83,7 @@ public class PMCLootGenerator { if (pmcPriceOverrides.TryGetValue(tpl, out var priceOverride)) { - _pocketLootPool.Add(tpl, priceOverride); + _pocketLootPool.TryAdd(tpl, priceOverride); } else { @@ -122,12 +123,12 @@ public class PMCLootGenerator /// /// /// Dictionary of string and number - public Dictionary GeneratePMCVestLootPool(string botRole) + public ConcurrentDictionary GeneratePMCVestLootPool(string botRole) { // Hydrate loot dictionary if empty if (_vestLootPool is null) { - _vestLootPool = new Dictionary(); + _vestLootPool = new ConcurrentDictionary(); var items = _databaseService.GetItems(); var pmcPriceOverrides = _databaseService.GetBots().Types[string.Equals(botRole, "pmcbear", StringComparison.OrdinalIgnoreCase) ? "bear" : "usec"].BotInventory.Items.TacticalVest; @@ -150,7 +151,7 @@ public class PMCLootGenerator { if (pmcPriceOverrides.TryGetValue(tpl, out var overridePrice)) { - _vestLootPool.Add(tpl, overridePrice); + _vestLootPool.TryAdd(tpl, overridePrice); } else { @@ -205,12 +206,12 @@ public class PMCLootGenerator /// /// /// Dictionary of string and number - public Dictionary GeneratePMCBackpackLootPool(string botRole) + public ConcurrentDictionary GeneratePMCBackpackLootPool(string botRole) { // Hydrate loot dictionary if empty if (_backpackLootPool is null) { - _backpackLootPool = new Dictionary(); + _backpackLootPool = new ConcurrentDictionary(); var items = _databaseService.GetItems(); var pmcPriceOverrides = _databaseService.GetBots().Types[string.Equals(botRole, "pmcbear", StringComparison.OrdinalIgnoreCase) ? "bear" : "usec"].BotInventory.Items.Backpack; @@ -232,7 +233,7 @@ public class PMCLootGenerator { if (pmcPriceOverrides.TryGetValue(tpl, out var priceOverride)) { - _backpackLootPool.Add(tpl, priceOverride); + _backpackLootPool.TryAdd(tpl, priceOverride); } else { diff --git a/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs b/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs index afa4a8ce..00868849 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs @@ -165,9 +165,9 @@ public class BotLootCacheService( if (isPmc) { // Replace lootPool from bot json with our own generated list for PMCs - lootPool.Backpack = _cloner.Clone(_pmcLootGenerator.GeneratePMCBackpackLootPool(botRole)); - lootPool.Pockets = _cloner.Clone(_pmcLootGenerator.GeneratePMCPocketLootPool(botRole)); - lootPool.TacticalVest = _cloner.Clone(_pmcLootGenerator.GeneratePMCVestLootPool(botRole)); + lootPool.Backpack = _cloner.Clone(_pmcLootGenerator.GeneratePMCBackpackLootPool(botRole)).ToDictionary(); + lootPool.Pockets = _cloner.Clone(_pmcLootGenerator.GeneratePMCPocketLootPool(botRole)).ToDictionary(); + lootPool.TacticalVest = _cloner.Clone(_pmcLootGenerator.GeneratePMCVestLootPool(botRole)).ToDictionary(); } // Backpack/Pockets etc