Add endpoint to allow getting all bot difficulty data in one call

This commit is contained in:
Dev 2024-04-06 16:57:01 +01:00
parent 18b28a6d0b
commit 13ab57298b
3 changed files with 44 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import { BotController } from "@spt-aki/controllers/BotController";
import { IGenerateBotsRequestData } from "@spt-aki/models/eft/bot/IGenerateBotsRequestData"; import { IGenerateBotsRequestData } from "@spt-aki/models/eft/bot/IGenerateBotsRequestData";
import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData";
import { IBotBase } from "@spt-aki/models/eft/common/tables/IBotBase"; import { IBotBase } from "@spt-aki/models/eft/common/tables/IBotBase";
import { Difficulties } from "@spt-aki/models/eft/common/tables/IBotType";
import { IGetBodyResponseData } from "@spt-aki/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt-aki/models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil";
@ -44,6 +45,15 @@ export class BotCallbacks
return this.httpResponse.noBody(this.botController.getBotDifficulty(type, difficulty)); return this.httpResponse.noBody(this.botController.getBotDifficulty(type, difficulty));
} }
/**
* Handle singleplayer/settings/bot/difficulties
* @returns dictionary of every bot and its diffiulty settings
*/
public getAllBotDifficulties(url: string, info: IEmptyRequestData, sessionID: string): Record<string, Difficulties>
{
return this.httpResponse.noBody(this.botController.getAllBotDifficulties());
}
/** /**
* Handle client/game/bot/generate * Handle client/game/bot/generate
* @returns IGetBodyResponseData * @returns IGetBodyResponseData

View File

@ -83,7 +83,7 @@ export class BotController
/** /**
* Get bot difficulty settings * Get bot difficulty settings
* adjust PMC settings to ensure they engage the correct bot types * Adjust PMC settings to ensure they engage the correct bot types
* @param type what bot the server is requesting settings for * @param type what bot the server is requesting settings for
* @param diffLevel difficulty level server requested settings for * @param diffLevel difficulty level server requested settings for
* @returns Difficulty object * @returns Difficulty object
@ -104,7 +104,7 @@ export class BotController
// Check value chosen in pre-raid difficulty dropdown // Check value chosen in pre-raid difficulty dropdown
// If value is not 'asonline', change requested difficulty to be what was chosen in dropdown // If value is not 'asonline', change requested difficulty to be what was chosen in dropdown
const botDifficultyDropDownValue = raidConfig.wavesSettings.botDifficulty.toLowerCase(); const botDifficultyDropDownValue = raidConfig?.wavesSettings.botDifficulty.toLowerCase() ?? "asonline";
if (botDifficultyDropDownValue !== "asonline") if (botDifficultyDropDownValue !== "asonline")
{ {
difficulty = this.botDifficultyHelper.convertBotDifficultyDropdownToBotDifficulty( difficulty = this.botDifficultyHelper.convertBotDifficultyDropdownToBotDifficulty(
@ -140,6 +140,31 @@ export class BotController
return difficultySettings; return difficultySettings;
} }
public getAllBotDifficulties(): Record<string, any>
{
const result = {};
const botDb = this.databaseServer.getTables().bots.types;
const botTypes = Object.keys(botDb);
for (const botType of botTypes)
{
const botDetails = botDb[botType];
if (!botDetails.difficulty)
{
continue;
}
const botDifficulties = Object.keys(botDetails.difficulty);
result[botType] = {};
for (const difficulty of botDifficulties)
{
result[botType][difficulty] = this.getBotDifficulty(botType, difficulty);
}
}
return result;
}
/** /**
* Generate bot profiles and store in cache * Generate bot profiles and store in cache
* @param sessionId Session id * @param sessionId Session id

View File

@ -23,6 +23,13 @@ export class BotDynamicRouter extends DynamicRouter
return this.botCallbacks.getBotDifficulty(url, info, sessionID); return this.botCallbacks.getBotDifficulty(url, info, sessionID);
}, },
), ),
new RouteAction(
"/singleplayer/settings/bot/difficulties/",
(url: string, info: any, sessionID: string, output: string): any =>
{
return this.botCallbacks.getAllBotDifficulties(url, info, sessionID);
},
),
new RouteAction( new RouteAction(
"/singleplayer/settings/bot/maxCap", "/singleplayer/settings/bot/maxCap",
(url: string, info: any, sessionID: string, output: string): any => (url: string, info: any, sessionID: string, output: string): any =>