mirror of
https://github.com/sp-tarkov/modules.git
synced 2025-02-13 02:30:44 -05:00
Reduce bot difficulty requests (!111)
Requires server-side changes (will need your help @TheSparta for this!). This combined all the single bot difficulty requests into a single GET request (`/singleplayer/bot/difficulties`) with the following data structure: ```json [ { "role": "assault", "difficulty": "easy", "data": "assets/database/bots/types/assault.json difficulty easy contents" }, { "role": "pmcbot", "difficulty": "normal", "data": "assets/database/bots/types/pmcbot.json difficulty normal contents" } ] ``` The request expects all roles and all their respective difficulties to be in the response. Co-authored-by: Merijn Hendriks <merijnhendriks@users.noreply.github.com> Reviewed-on: SPT-AKI/Modules#111 Reviewed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com> Co-authored-by: Merijn Hendriks <senko-san@noreply.dev.sp-tarkov.com> Co-committed-by: Merijn Hendriks <senko-san@noreply.dev.sp-tarkov.com>
This commit is contained in:
parent
d5fc27e383
commit
accb0ab9f6
24
project/Aki.Custom/Models/DifficultyInfo.cs
Normal file
24
project/Aki.Custom/Models/DifficultyInfo.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Aki.Custom.Models
|
||||
{
|
||||
[DataContract]
|
||||
public struct DifficultyInfo
|
||||
{
|
||||
[DataMember(Name = "role")]
|
||||
public string Role;
|
||||
|
||||
[DataMember(Name = "difficulty")]
|
||||
public string Difficulty;
|
||||
|
||||
[DataMember(Name = "data")]
|
||||
public string Data;
|
||||
|
||||
public DifficultyInfo(string role, string difficulty, string data)
|
||||
{
|
||||
Role = role;
|
||||
Difficulty = difficulty;
|
||||
Data = data;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
using Aki.Common.Http;
|
||||
using Aki.Custom.Utils;
|
||||
using Aki.Reflection.Patching;
|
||||
using Aki.Reflection.Utils;
|
||||
using EFT;
|
||||
@ -21,7 +21,7 @@ namespace Aki.Custom.Patches
|
||||
[PatchPrefix]
|
||||
private static bool PatchPrefix(ref string __result, BotDifficulty botDifficulty, WildSpawnType role)
|
||||
{
|
||||
__result = RequestHandler.GetJson($"/singleplayer/settings/bot/difficulty/{role}/{botDifficulty}");
|
||||
__result = DifficultyManager.Get(botDifficulty, role);
|
||||
var resultIsNullEmpty = string.IsNullOrWhiteSpace(__result);
|
||||
if (resultIsNullEmpty)
|
||||
{
|
||||
|
@ -2,6 +2,7 @@ using Aki.Reflection.Patching;
|
||||
using Aki.Reflection.Utils;
|
||||
using Aki.Common.Http;
|
||||
using System.Reflection;
|
||||
using Aki.Custom.Utils;
|
||||
|
||||
namespace Aki.Custom.Patches
|
||||
{
|
||||
@ -19,6 +20,11 @@ namespace Aki.Custom.Patches
|
||||
[PatchPrefix]
|
||||
private static bool PatchPrefix(ref string __result)
|
||||
{
|
||||
// core difficulty is requested before the others
|
||||
// so update the others now!
|
||||
DifficultyManager.Update();
|
||||
|
||||
// update core difficulty
|
||||
__result = RequestHandler.GetJson("/singleplayer/settings/bot/difficulty/core/core");
|
||||
return string.IsNullOrWhiteSpace(__result);
|
||||
}
|
||||
|
42
project/Aki.Custom/Utils/DifficultyManager.cs
Normal file
42
project/Aki.Custom/Utils/DifficultyManager.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System.Collections.Generic;
|
||||
using EFT;
|
||||
using Aki.Common.Http;
|
||||
using Aki.Common.Utils;
|
||||
using Aki.Custom.Models;
|
||||
|
||||
namespace Aki.Custom.Utils
|
||||
{
|
||||
public static class DifficultyManager
|
||||
{
|
||||
public static List<DifficultyInfo> Difficulties { get; private set; }
|
||||
|
||||
static DifficultyManager()
|
||||
{
|
||||
Difficulties = new List<DifficultyInfo>();
|
||||
}
|
||||
|
||||
public static void Update()
|
||||
{
|
||||
// remove existing list
|
||||
Difficulties.Clear();
|
||||
|
||||
// get new difficulties
|
||||
var json = RequestHandler.GetJson("/singleplayer/settings/bot/difficulties");
|
||||
Difficulties = Json.Deserialize<List<DifficultyInfo>>(json);
|
||||
}
|
||||
|
||||
public static string Get(BotDifficulty botDifficulty, WildSpawnType role)
|
||||
{
|
||||
foreach (var entry in Difficulties)
|
||||
{
|
||||
if (botDifficulty.ToString().ToLower() == entry.Difficulty
|
||||
&& role.ToString().ToLower() == entry.Role)
|
||||
{
|
||||
return entry.Data;
|
||||
}
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user