diff --git a/Core/Controllers/BuildController.cs b/Core/Controllers/BuildController.cs
index 19cbd15a..eb63146f 100644
--- a/Core/Controllers/BuildController.cs
+++ b/Core/Controllers/BuildController.cs
@@ -1,13 +1,31 @@
using Core.Annotations;
+using Core.Helpers;
using Core.Models.Eft.Builds;
using Core.Models.Eft.PresetBuild;
using Core.Models.Eft.Profile;
+using Core.Models.Enums;
+using Core.Services;
+using Core.Utils.Cloners;
namespace Core.Controllers;
[Injectable]
public class BuildController
{
+ protected ProfileHelper _profileHelper;
+ protected DatabaseService _databaseService;
+ protected ICloner _cloner;
+
+ public BuildController(
+ ProfileHelper profileHelper,
+ DatabaseService databaseService,
+ ICloner cloner)
+ {
+ _profileHelper = profileHelper;
+ _databaseService = databaseService;
+ _cloner = cloner;
+ }
+
///
/// Handle client/handbook/builds/my/list
///
@@ -15,7 +33,45 @@ public class BuildController
///
public UserBuilds GetUserBuilds(string sessionID)
{
- throw new NotImplementedException();
+ var secureContainerSlotId = "SecuredContainer";
+ var profile = _profileHelper.GetFullProfile(sessionID);
+ if (profile.UserBuildData is null)
+ {
+ profile.UserBuildData = new UserBuilds{ EquipmentBuilds = [], WeaponBuilds = [], MagazineBuilds = [] };
+ }
+
+ // Ensure the secure container in the default presets match what the player has equipped
+ var defaultEquipmentPresetsClone = _cloner.Clone(
+ _databaseService.GetTemplates().DefaultEquipmentPresets);
+ var playerSecureContainer = profile.CharacterData.PmcData.Inventory.Items?.FirstOrDefault(
+ (x) => x.SlotId == secureContainerSlotId);
+ var firstDefaultItemsSecureContainer = defaultEquipmentPresetsClone[0]?.Items?.FirstOrDefault(
+ (x) => x.SlotId == secureContainerSlotId);
+ if (playerSecureContainer is not null && playerSecureContainer?.Template != firstDefaultItemsSecureContainer?.Template)
+ {
+ // Default equipment presets' secure container tpl doesn't match players secure container tpl
+ foreach (var defaultPreset in defaultEquipmentPresetsClone) {
+ // Find presets secure container
+ var secureContainer = defaultPreset.Items.FirstOrDefault((item) => item.SlotId == secureContainerSlotId);
+ if (secureContainer is not null)
+ {
+ secureContainer.Template = playerSecureContainer.Template;
+ }
+ }
+ }
+
+ // Clone player build data from profile and append the above defaults onto end
+ var userBuildsClone = _cloner.Clone(profile.UserBuildData);
+ userBuildsClone.EquipmentBuilds.AddRange(defaultEquipmentPresetsClone.Select(x => new EquipmentBuild
+ {
+ Id = x.Id,
+ BuildType = x.BuildType,
+ Items = x.Items,
+ Name = x.Name,
+ Root = x.Root
+ }));
+
+ return userBuildsClone;
}
///