From 9c248719e7fee2adb59a5ae1d272918ea8ad7547 Mon Sep 17 00:00:00 2001 From: Cj Date: Wed, 4 Sep 2024 08:30:24 +0000 Subject: [PATCH] Clothing service fix (!165) Client implementation of my `TraderServiceFix` mod into the SPT code base. Details on server PR, also is required to be merged with the accompanying server PR. Co-authored-by: Cj <161484149+CJ-SPT@users.noreply.github.com> Reviewed-on: https://dev.sp-tarkov.com/SPT/Modules/pulls/165 Co-authored-by: Cj Co-committed-by: Cj --- .../Models/MainMenu/ModdedTraders.cs | 8 +++ .../SPT.SinglePlayer/SPTSingleplayerPlugin.cs | 6 +++ .../Utils/MainMenu/TraderServiceManager.cs | 49 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 project/SPT.SinglePlayer/Models/MainMenu/ModdedTraders.cs create mode 100644 project/SPT.SinglePlayer/Utils/MainMenu/TraderServiceManager.cs diff --git a/project/SPT.SinglePlayer/Models/MainMenu/ModdedTraders.cs b/project/SPT.SinglePlayer/Models/MainMenu/ModdedTraders.cs new file mode 100644 index 0000000..1dbef99 --- /dev/null +++ b/project/SPT.SinglePlayer/Models/MainMenu/ModdedTraders.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace SPT.SinglePlayer.Models.MainMenu; + +public class ModdedTraders +{ + public List clothingService { get; set; } +} \ No newline at end of file diff --git a/project/SPT.SinglePlayer/SPTSingleplayerPlugin.cs b/project/SPT.SinglePlayer/SPTSingleplayerPlugin.cs index 52beca3..5be6adb 100644 --- a/project/SPT.SinglePlayer/SPTSingleplayerPlugin.cs +++ b/project/SPT.SinglePlayer/SPTSingleplayerPlugin.cs @@ -5,6 +5,7 @@ using SPT.SinglePlayer.Patches.Progression; using SPT.SinglePlayer.Patches.RaidFix; using SPT.SinglePlayer.Patches.ScavMode; using BepInEx; +using SPT.SinglePlayer.Utils.MainMenu; namespace SPT.SinglePlayer { @@ -67,5 +68,10 @@ namespace SPT.SinglePlayer Logger.LogInfo("Completed: SPT.SinglePlayer"); } + + public void Start() + { + TraderServiceManager.GetModdedTraderData(); + } } } diff --git a/project/SPT.SinglePlayer/Utils/MainMenu/TraderServiceManager.cs b/project/SPT.SinglePlayer/Utils/MainMenu/TraderServiceManager.cs new file mode 100644 index 0000000..01bfbfc --- /dev/null +++ b/project/SPT.SinglePlayer/Utils/MainMenu/TraderServiceManager.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using System.Reflection; +using EFT; +using HarmonyLib; +using Newtonsoft.Json; +using SPT.Common.Http; +using SPT.SinglePlayer.Models.MainMenu; + +namespace SPT.SinglePlayer.Utils.MainMenu; + +public static class TraderServiceManager +{ + private static Dictionary _traderIdToTraderServiceDict = new() + { + { + "5ac3b934156ae10c4430e83c", + Profile.ETraderServiceSource.Ragman + }, + { + "6617beeaa9cfa777ca915b7c", + Profile.ETraderServiceSource.ArenaManager + } + }; + + private static FieldInfo _traderIdToTraderServiceField; + + static TraderServiceManager() + { + _traderIdToTraderServiceField = AccessTools.Field(typeof(Profile.TraderInfo), "TraderIdToTraderService"); + } + + public static void GetModdedTraderData() + { + var req = RequestHandler.GetJson("/singleplayer/moddedTraders"); + var moddedTraders = JsonConvert.DeserializeObject(req); + + AddModdedTradersToClothingServiceDict(moddedTraders); + } + + private static void AddModdedTradersToClothingServiceDict(ModdedTraders traders) + { + foreach (var trader in traders.clothingService) + { + _traderIdToTraderServiceDict.Add(trader, Profile.ETraderServiceSource.Ragman); + } + + _traderIdToTraderServiceField.SetValue(_traderIdToTraderServiceField, _traderIdToTraderServiceDict); + } +} \ No newline at end of file