From 1f6231ce6b4af2b383d4b54ba21c13a6c52781b1 Mon Sep 17 00:00:00 2001 From: Chomp Date: Thu, 24 Jul 2025 18:16:13 +0100 Subject: [PATCH] Improved readability of `GetRelativePmcBotLevelRange` --- .../Generators/BotLevelGenerator.cs | 18 +++++++----------- .../Models/Spt/Bots/BotGenerationDetails.cs | 4 ++-- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs index 6348947f..491316c9 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs @@ -81,6 +81,7 @@ public class BotLevelGenerator( ) { var levelOverride = botGenerationDetails.LocationSpecificPmcLevelOverride; + var playerLevel = botGenerationDetails.PlayerLevel ?? 1; // Create a min limit PMCs level cannot fall below var minPossibleLevel = levelOverride is not null @@ -95,19 +96,14 @@ public class BotLevelGenerator( ? Math.Min(levelOverride.Max, maxAvailableLevel) // Is PMC and have a level override : Math.Min(levelDetails.Max, maxAvailableLevel); // Not pmc with override or non-pmc - // Get min level relative to player if value exists - var minLevel = botGenerationDetails.PlayerLevel.HasValue - ? botGenerationDetails.PlayerLevel.Value - - botGenerationDetails.BotRelativeLevelDeltaMin.Value - : 1 - botGenerationDetails.BotRelativeLevelDeltaMin.Value; + // Get min level relative to player level + // May be negative, is clamped to 1 below + var minLevel = playerLevel - botGenerationDetails.BotRelativeLevelDeltaMin; - // Get max level relative to player if value exists - var maxLevel = botGenerationDetails.PlayerLevel.HasValue - ? botGenerationDetails.PlayerLevel.Value - + botGenerationDetails.BotRelativeLevelDeltaMax.Value - : 1 + botGenerationDetails.BotRelativeLevelDeltaMin.Value; + // Get max level relative to player level + var maxLevel = playerLevel + botGenerationDetails.BotRelativeLevelDeltaMax; - // Bound the level to the min/max possible + // Clamp the level to the min/max possible maxLevel = Math.Clamp(maxLevel, minPossibleLevel, maxPossibleLevel); minLevel = Math.Clamp(minLevel, minPossibleLevel, maxPossibleLevel); diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs index 3a5d1c6f..af99ef49 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Bots/BotGenerationDetails.cs @@ -45,13 +45,13 @@ public record BotGenerationDetails /// Delta of highest level of bot e.g. 50 means 50 levels above player /// [JsonPropertyName("botRelativeLevelDeltaMax")] - public int? BotRelativeLevelDeltaMax { get; set; } + public int BotRelativeLevelDeltaMax { get; set; } /// /// Delta of lowest level of bot e.g. 50 means 50 levels below player /// [JsonPropertyName("botRelativeLevelDeltaMin")] - public int? BotRelativeLevelDeltaMin { get; set; } + public int BotRelativeLevelDeltaMin { get; set; } /// /// How many to create and store