From bb566e32ad5b34faf57b9fe56883b0a18230b1b2 Mon Sep 17 00:00:00 2001 From: Chomp Date: Tue, 19 Aug 2025 10:28:50 +0100 Subject: [PATCH] Fixed pscav generation failure during prestige #556 --- .../Generators/BotGenerator.cs | 3 ++- .../Generators/BotInventoryGenerator.cs | 5 ++++- .../Generators/PlayerScavGenerator.cs | 14 +++++++++----- .../Models/Spt/Bots/BotGenerationDetails.cs | 6 ++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs index 140eea56..a15717ed 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs @@ -65,6 +65,7 @@ public class BotGenerator( BotCountToGenerate = 1, BotDifficulty = difficulty, IsPlayerScav = true, + ClearBotContainerCacheAfterGeneration = false, }; bot = GenerateBot(sessionId, bot, botTemplate, botGenDetails); @@ -173,7 +174,7 @@ public class BotGenerator( var botRoleLowercase = botGenerationDetails.Role.ToLowerInvariant(); var botLevel = botLevelGenerator.GenerateBotLevel(botJsonTemplate.BotExperience.Level, botGenerationDetails, bot); - // Generate new bot ID + // Generate Id/AId for bot AddIdsToBot(bot, botGenerationDetails); // Only filter bot equipment, never players diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs index a153a184..f31b7f3e 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs @@ -127,7 +127,10 @@ public class BotInventoryGenerator( botLootGenerator.GenerateLoot(botId, sessionId, botJsonTemplate, botGenerationDetails, isPmc, botRole, botInventory, botLevel); // Inventory cache isn't needed, clear to save memory - botInventoryContainerService.ClearCache(botId); + if (botGenerationDetails.ClearBotContainerCacheAfterGeneration) + { + botInventoryContainerService.ClearCache(botId); + } return botInventory; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs index ecbb0bcd..acdaf312 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs @@ -29,6 +29,7 @@ public class PlayerScavGenerator( FenceService fenceService, BotLootCacheService botLootCacheService, ServerLocalisationService serverLocalisationService, + BotInventoryContainerService botInventoryContainerService, BotGenerator botGenerator, ConfigServer configServer, ICloner cloner, @@ -88,7 +89,7 @@ public class PlayerScavGenerator( scavData.Savage = null; scavData.Aid = pmcDataClone.Aid; scavData.TradersInfo = pmcDataClone.TradersInfo; - scavData.Info.Settings = new BotInfoSettings(); + scavData.Info.Settings = new(); scavData.Info.Bans = []; scavData.Info.RegistrationDate = pmcDataClone.Info.RegistrationDate; scavData.Info.GameVersion = pmcDataClone.Info.GameVersion; @@ -106,10 +107,10 @@ public class PlayerScavGenerator( scavData.Info.Level = GetScavLevel(existingScavDataClone); scavData.Info.Experience = GetScavExperience(existingScavDataClone); scavData.Quests = existingScavDataClone.Quests ?? []; - scavData.TaskConditionCounters = existingScavDataClone.TaskConditionCounters ?? new Dictionary(); + scavData.TaskConditionCounters = existingScavDataClone.TaskConditionCounters ?? new(); scavData.Notes = existingScavDataClone.Notes ?? new Notes { DataNotes = [] }; scavData.WishList = existingScavDataClone.WishList ?? new(); - scavData.Encyclopedia = pmcDataClone.Encyclopedia ?? new Dictionary(); + scavData.Encyclopedia = pmcDataClone.Encyclopedia ?? new(); // Add additional items to player scav as loot AddAdditionalLootToPlayerScavContainers( @@ -119,13 +120,16 @@ public class PlayerScavGenerator( [EquipmentSlots.TacticalVest, EquipmentSlots.Pockets, EquipmentSlots.Backpack] ); + // No need for cache data, clear up + botInventoryContainerService.ClearCache(scavData.Id.Value); + // Remove secure container scavData = profileHelper.RemoveSecureContainer(scavData); - // set cooldown timer + // Set cooldown timer scavData = SetScavCooldownTimer(scavData, pmcDataClone); - // add scav to profile + // Add scav to profile saveServer.GetProfile(sessionID).CharacterData.ScavData = scavData; return scavData; diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs index 20d83e68..7b4acb1d 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs @@ -81,4 +81,10 @@ public record BotGenerationDetails /// Map bots will be spawned on /// public string? Location { get; set; } + + /// + /// Should the bot container cache be cleared after generating bot equipment + loot + /// + [JsonPropertyName("clearBotContainerCacheAfterGeneration")] + public bool ClearBotContainerCacheAfterGeneration { get; set; } = true; }