127 lines
4.2 KiB
C#
127 lines
4.2 KiB
C#
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>
|
|
/// <param name="sessionID"></param>
|
|
/// <returns></returns>
|
|
public UserBuilds GetUserBuilds(string sessionID)
|
|
{
|
|
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>
|
|
/// Handle client/builds/weapon/save
|
|
/// </summary>
|
|
/// <param name="sessionId"></param>
|
|
/// <param name="body"></param>
|
|
public void SaveWeaponBuild(string sessionId, PresetBuildActionRequestData body)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Handle client/builds/equipment/save event
|
|
/// </summary>
|
|
/// <param name="sessionId"></param>
|
|
/// <param name="request"></param>
|
|
public void SaveEquipmentBuild(string sessionId, PresetBuildActionRequestData request)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Handle client/builds/delete
|
|
/// </summary>
|
|
/// <param name="sessionId"></param>
|
|
/// <param name="request"></param>
|
|
public void RemoveBuild(string sessionId, RemoveBuildRequestData request)
|
|
{
|
|
RemovePlayerBuild(request.Id, sessionId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Handle client/builds/magazine/save
|
|
/// </summary>
|
|
/// <param name="sessionId"></param>
|
|
/// <param name="request"></param>
|
|
public void CreateMagazineTemplate(string sessionId, SetMagazineRequest request)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="idToRemove"></param>
|
|
/// <param name="sessionId"></param>
|
|
private void RemovePlayerBuild(string idToRemove, string sessionId)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|