mirror of
https://github.com/sp-tarkov/modules.git
synced 2025-02-13 05:30:43 -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.Patching;
|
||||||
using Aki.Reflection.Utils;
|
using Aki.Reflection.Utils;
|
||||||
using EFT;
|
using EFT;
|
||||||
@ -21,7 +21,7 @@ namespace Aki.Custom.Patches
|
|||||||
[PatchPrefix]
|
[PatchPrefix]
|
||||||
private static bool PatchPrefix(ref string __result, BotDifficulty botDifficulty, WildSpawnType role)
|
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);
|
var resultIsNullEmpty = string.IsNullOrWhiteSpace(__result);
|
||||||
if (resultIsNullEmpty)
|
if (resultIsNullEmpty)
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,7 @@ using Aki.Reflection.Patching;
|
|||||||
using Aki.Reflection.Utils;
|
using Aki.Reflection.Utils;
|
||||||
using Aki.Common.Http;
|
using Aki.Common.Http;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Aki.Custom.Utils;
|
||||||
|
|
||||||
namespace Aki.Custom.Patches
|
namespace Aki.Custom.Patches
|
||||||
{
|
{
|
||||||
@ -19,6 +20,11 @@ namespace Aki.Custom.Patches
|
|||||||
[PatchPrefix]
|
[PatchPrefix]
|
||||||
private static bool PatchPrefix(ref string __result)
|
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");
|
__result = RequestHandler.GetJson("/singleplayer/settings/bot/difficulty/core/core");
|
||||||
return string.IsNullOrWhiteSpace(__result);
|
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