Improved logic inside GenerateBotLevel

This commit is contained in:
Chomp
2025-08-06 21:17:12 +01:00
parent c57533a07f
commit a8702c9cdf
@@ -1,4 +1,3 @@
using System.Globalization;
using SPTarkov.DI.Annotations; using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Bot; using SPTarkov.Server.Core.Models.Eft.Bot;
@@ -30,26 +29,25 @@ public class BotLevelGenerator(ISptLogger<BotLevelGenerator> logger, RandomUtil
var expTable = databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable; var expTable = databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable;
var botLevelRange = GetRelativePmcBotLevelRange(botGenerationDetails, levelDetails, expTable.Length); var botLevelRange = GetRelativePmcBotLevelRange(botGenerationDetails, levelDetails, expTable.Length);
// Get random level based on the exp table. // ChooseBotLevel now returns int directly
var exp = 0; var level = ChooseBotLevel(botLevelRange.Min, botLevelRange.Max, 1, 1.15);
var level = int.Parse(ChooseBotLevel(botLevelRange.Min, botLevelRange.Max, 1, 1.15).ToString(CultureInfo.InvariantCulture)); // TODO - nasty double to string to int conversion var maxLevelIndex = expTable.Length - 1;
for (var i = 0; i < level; i++)
{
exp += expTable[i].Experience;
}
// Sprinkle in some random exp within the level, unless we are at max level. // Clamp chosen level to max
if (level < expTable.Length - 1) level = Math.Clamp(level, 0, maxLevelIndex + 1);
{
exp += randomUtil.GetInt(0, expTable[level].Experience - 1);
}
return new RandomisedBotLevelResult { Level = level, Exp = exp }; // Sum up total exp required for all full levels before desired
var baseExp = expTable.Take(level).Sum(entry => entry.Experience);
// Sprinkle in some random exp within the level, unless we are at max level
var fractionalExp = level < maxLevelIndex ? randomUtil.GetInt(0, expTable[level].Experience - 1) : 0;
return new RandomisedBotLevelResult { Exp = baseExp + fractionalExp, Level = level };
} }
public double ChooseBotLevel(double min, double max, int shift, double number) public int ChooseBotLevel(double min, double max, int shift, double number)
{ {
return randomUtil.GetBiasedRandomNumber(min, max, shift, number); return (int)randomUtil.GetBiasedRandomNumber(min, max, shift, number);
} }
/// <summary> /// <summary>