using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.Models.Common; 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 _, MongoId 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 _, MongoId sessionID) { var splitUrl = url.Split('/'); var type = splitUrl[^2].ToLowerInvariant(); 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 _, MongoId sessionID ) { return new ValueTask( httpResponseUtil.NoBody(botController.GetAllBotDifficulties()) ); } /// /// Handle client/game/bot/generate /// /// public ValueTask GenerateBots( string url, GenerateBotsRequestData info, MongoId sessionID ) { return new ValueTask( httpResponseUtil.GetBody(botController.Generate(sessionID, info)) ); } /// /// Handle singleplayer/settings/bot/maxCap /// /// public ValueTask GetBotCap(string url, EmptyRequestData _, MongoId 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())); } }