Improved logic inside GenerateBotLevel
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user