partial implementation of GetUserBuilds

This commit is contained in:
Chomp
2025-01-16 17:25:03 +00:00
parent d7f27820c8
commit a2f82fa81b
+57 -1
View File
@@ -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;
}
/// <summary>
/// Handle client/handbook/builds/my/list
/// </summary>
@@ -15,7 +33,45 @@ public class BuildController
/// <returns></returns>
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;
}
/// <summary>