diff --git a/Core/Generators/BotGenerator.cs b/Core/Generators/BotGenerator.cs index d359a345..4144b83a 100644 --- a/Core/Generators/BotGenerator.cs +++ b/Core/Generators/BotGenerator.cs @@ -1,21 +1,36 @@ -using Core.Annotations; +using Core.Annotations; using Core.Models.Common; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; +using Core.Models.Enums; +using Core.Models.Enums.RaidSettings; using Core.Models.Spt.Bots; using Core.Models.Spt.Config; +using Core.Services; +using Core.Utils.Cloners; using BodyPart = Core.Models.Eft.Common.Tables.BodyPart; +using ILogger = Core.Models.Utils.ILogger; namespace Core.Generators; [Injectable] public class BotGenerator { + private readonly ILogger _logger; + private readonly DatabaseService _databaseService; + private readonly ICloner _cloner; private BotConfig _botConfig; private PmcConfig _pmcConfig; - public BotGenerator() + public BotGenerator( + ILogger logger, + DatabaseService databaseService, + ICloner cloner + ) { + _logger = logger; + _databaseService = databaseService; + _cloner = cloner; } /// @@ -27,9 +42,30 @@ public class BotGenerator /// base bot template to use (e.g. assault/pmcbot) /// profile of player generating pscav /// BotBase - public PmcData GeneratePlayerScav(string sessionId, string role, string difficulty, BotType botTemplate, PmcData profile) + public BotBase GeneratePlayerScav(string sessionId, string role, string difficulty, BotType botTemplate, PmcData profile) { - throw new NotImplementedException(); + var bot = GetCloneOfBotBase(); + bot.Info.Settings.BotDifficulty = difficulty; + bot.Info.Settings.Role = role; + bot.Info.Side = "Savage"; + + var botGenDetails = new BotGenerationDetails{ + IsPmc = false, + Side = "Savage", + Role = role, + BotRelativeLevelDeltaMax = 0, + BotRelativeLevelDeltaMin = 0, + BotCountToGenerate = 1, + BotDifficulty = difficulty, + IsPlayerScav = true, + }; + + bot = GenerateBot(sessionId, bot, botTemplate, botGenDetails); + + // Sets the name after scav name shown in parentheses + bot.Info.MainProfileNickname = profile.Info.Nickname; + + return bot; } /// @@ -61,7 +97,7 @@ public class BotGenerator /// BotBase object public BotBase GetCloneOfBotBase() { - throw new NotImplementedException(); + return _cloner.Clone(_databaseService.GetBots().Base); } /// diff --git a/Core/Generators/PlayerScavGenerator.cs b/Core/Generators/PlayerScavGenerator.cs index ad0235ef..83bc4831 100644 --- a/Core/Generators/PlayerScavGenerator.cs +++ b/Core/Generators/PlayerScavGenerator.cs @@ -100,7 +100,7 @@ public class PlayerScavGenerator var baseBotNode = ConstructBotBaseTemplate(playerScavKarmaSettings.BotTypeForLoot); AdjustBotTemplateWithKarmaSpecificSettings(playerScavKarmaSettings, baseBotNode); - var scavData = _botGenerator.GeneratePlayerScav( + var scavData = (PmcData)_botGenerator.GeneratePlayerScav( sessionID, playerScavKarmaSettings.BotTypeForLoot.ToLower(), "easy", diff --git a/Core/Models/Enums/SideType.cs b/Core/Models/Enums/SideType.cs index 8da83b7d..585b104f 100644 --- a/Core/Models/Enums/SideType.cs +++ b/Core/Models/Enums/SideType.cs @@ -1,8 +1,8 @@ -namespace Core.Models.Enums; +namespace Core.Models.Enums; public enum SideType { - PMC, - SAVAGE, - RANDOM -} \ No newline at end of file + Pmc, + Savage, + Random +} diff --git a/Core/Models/Spt/Bots/BotGenerationDetails.cs b/Core/Models/Spt/Bots/BotGenerationDetails.cs index a1a58087..4d587ec1 100644 --- a/Core/Models/Spt/Bots/BotGenerationDetails.cs +++ b/Core/Models/Spt/Bots/BotGenerationDetails.cs @@ -1,5 +1,6 @@ using System.Text.Json.Serialization; using Core.Models.Common; +using Core.Models.Enums; namespace Core.Models.Spt.Bots; @@ -73,4 +74,4 @@ public class BotGenerationDetails [JsonPropertyName("allPmcsHaveSameNameAsPlayer")] public bool? AllPmcsHaveSameNameAsPlayer { get; set; } -} \ No newline at end of file +} diff --git a/Core/Utils/JsonUtil.cs b/Core/Utils/JsonUtil.cs index 0020128a..96912741 100644 --- a/Core/Utils/JsonUtil.cs +++ b/Core/Utils/JsonUtil.cs @@ -24,7 +24,8 @@ public class JsonUtil new EftEnumConverter(), new EftEnumConverter(), new EftEnumConverter(), - new EftEnumConverter() + new EftEnumConverter(), + new EftEnumConverter() } }; private static readonly JsonSerializerOptions jsonSerializerOptionsIndented = new(jsonSerializerOptionsNoIndent)