Improved logic inside GenerateBotLevel
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using System.Globalization;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Models.Common;
|
||||
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 botLevelRange = GetRelativePmcBotLevelRange(botGenerationDetails, levelDetails, expTable.Length);
|
||||
|
||||
// Get random level based on the exp table.
|
||||
var exp = 0;
|
||||
var level = int.Parse(ChooseBotLevel(botLevelRange.Min, botLevelRange.Max, 1, 1.15).ToString(CultureInfo.InvariantCulture)); // TODO - nasty double to string to int conversion
|
||||
for (var i = 0; i < level; i++)
|
||||
{
|
||||
exp += expTable[i].Experience;
|
||||
}
|
||||
// ChooseBotLevel now returns int directly
|
||||
var level = ChooseBotLevel(botLevelRange.Min, botLevelRange.Max, 1, 1.15);
|
||||
var maxLevelIndex = expTable.Length - 1;
|
||||
|
||||
// Sprinkle in some random exp within the level, unless we are at max level.
|
||||
if (level < expTable.Length - 1)
|
||||
{
|
||||
exp += randomUtil.GetInt(0, expTable[level].Experience - 1);
|
||||
}
|
||||
// Clamp chosen level to max
|
||||
level = Math.Clamp(level, 0, maxLevelIndex + 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>
|
||||
|
||||
Reference in New Issue
Block a user