From 07aa4c89775ce6c1a8589ec632d5e7966527ebee Mon Sep 17 00:00:00 2001 From: GrooveypenguinX <79855395+GrooveypenguinX@users.noreply.github.com> Date: Sun, 26 Oct 2025 04:49:39 -0400 Subject: [PATCH] Implemented Modded Trader Customization Services (#660) Co-authored-by: GrooveypenguinX Co-authored-by: Chomp <27521899+chompDev@users.noreply.github.com> --- .../ModdedTraderCustomizationCallbacks.cs | 23 +++++++++++++++ .../ModdedTraderCustomizationController.cs | 28 +++++++++++++++++++ .../Spt/Mod/ModdedTraderListResponse.cs | 6 ++++ .../Static/ModdedTraderCustomizationRouter.cs | 20 +++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs create mode 100644 Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs create mode 100644 Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs create mode 100644 Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs new file mode 100644 index 00000000..682c2cb0 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs @@ -0,0 +1,23 @@ +using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Controllers; +using SPTarkov.Server.Core.Models.Common; +using SPTarkov.Server.Core.Models.Eft.Common; +using SPTarkov.Server.Core.Utils; + +namespace SPTarkov.Server.Core.Callbacks; + +[Injectable] +public class ModdedTraderCustomizationCallbacks( + ModdedTraderCustomizationController moddedTraderCustomizationController, + HttpResponseUtil httpResponseUtil +) +{ + /// + /// Handle /singleplayer/moddedTraders + /// + /// + public ValueTask GetCustomizationTraders(string url, EmptyRequestData _, MongoId sessionID) + { + return new ValueTask(httpResponseUtil.NoBody(moddedTraderCustomizationController.GetCustomizationSellerIds())); + } +} diff --git a/Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs b/Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs new file mode 100644 index 00000000..66d97808 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs @@ -0,0 +1,28 @@ +using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Models.Enums; +using SPTarkov.Server.Core.Models.Spt.Mod; +using SPTarkov.Server.Core.Services; + +namespace SPTarkov.Server.Core.Controllers; + +[Injectable] +public class ModdedTraderCustomizationController(DatabaseService databaseService) +{ + public ModdedTraderListResponse GetCustomizationSellerIds() + { + var traders = databaseService.GetTraders(); + var customizationSellers = new ModdedTraderListResponse + { + ModdedTraders = [] + }; + + foreach (var trader in traders) + { + if (trader.Value.Base.CustomizationSeller!.Value && trader.Key != Traders.RAGMAN) + { + customizationSellers.ModdedTraders.Add(trader.Key); + } + } + return customizationSellers; + } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs new file mode 100644 index 00000000..0c3dbc6d --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs @@ -0,0 +1,6 @@ +namespace SPTarkov.Server.Core.Models.Spt.Mod; + +public record ModdedTraderListResponse +{ + public List? ModdedTraders { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs new file mode 100644 index 00000000..7d47ea68 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs @@ -0,0 +1,20 @@ +using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Callbacks; +using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Eft.Common; +using SPTarkov.Server.Core.Utils; + +namespace SPTarkov.Server.Core.Routers.Static; + +[Injectable] +public class ModdedTraderCustomizationRouter(JsonUtil jsonUtil, ModdedTraderCustomizationCallbacks moddedTraderCustomizationCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/singleplayer/moddedTraders", + async (url, info, sessionID, output) => + await moddedTraderCustomizationCallbacks.GetCustomizationTraders(url, info, sessionID) + ) + ] + ) { }