using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.Models.Eft.Bot; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] public class BotCallbacks(BotController _botController, HttpResponseUtil _httpResponseUtil) { /// /// Handle singleplayer/settings/bot/limit /// Is called by client to define each bot roles wave limit /// /// public ValueTask GetBotLimit(string url, EmptyRequestData _, string sessionID) { var splitUrl = url.Split('/'); var type = splitUrl[^1]; return new ValueTask( _httpResponseUtil.NoBody(_botController.GetBotPresetGenerationLimit(type)) ); } /// /// Handle singleplayer/settings/bot/difficulty /// /// public ValueTask GetBotDifficulty(string url, EmptyRequestData _, string sessionID) { var splitUrl = url.Split('/'); var type = splitUrl[^2].ToLower(); var difficulty = splitUrl[^1]; if (difficulty == "core") { return new ValueTask( _httpResponseUtil.NoBody(_botController.GetBotCoreDifficulty()) ); } return new ValueTask( _httpResponseUtil.NoBody(_botController.GetBotDifficulty(sessionID, type, difficulty)) ); } /// /// Handle singleplayer/settings/bot/difficulties /// /// public ValueTask GetAllBotDifficulties(string url, EmptyRequestData _, string sessionID) { return new ValueTask( _httpResponseUtil.NoBody(_botController.GetAllBotDifficulties()) ); } /// /// Handle client/game/bot/generate /// /// public ValueTask GenerateBots( string url, GenerateBotsRequestData info, string sessionID ) { return new ValueTask( _httpResponseUtil.GetBody(_botController.Generate(sessionID, info)) ); } /// /// Handle singleplayer/settings/bot/maxCap /// /// public ValueTask GetBotCap(string url, EmptyRequestData _, string sessionID) { var splitUrl = url.Split('/'); var location = splitUrl[^1]; return new ValueTask(_httpResponseUtil.NoBody(_botController.GetBotCap(location))); } /// /// Handle singleplayer/settings/bot/getBotBehaviours /// /// public ValueTask GetBotBehaviours() { return new ValueTask(_httpResponseUtil.NoBody(_botController.GetAiBotBrainTypes())); } }