diff --git a/Core/Controllers/BuildController.cs b/Core/Controllers/BuildController.cs
index f9939942..a0358ae7 100644
--- a/Core/Controllers/BuildController.cs
+++ b/Core/Controllers/BuildController.cs
@@ -3,56 +3,50 @@ 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
+public class BuildController(
+ ProfileHelper _profileHelper,
+ DatabaseService _databaseService,
+ ICloner _cloner
+)
{
- 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
///
///
///
- public UserBuilds GetUserBuilds(string sessionID)
+ public UserBuilds? GetUserBuilds(string sessionID)
{
- var secureContainerSlotId = "SecuredContainer";
+ const string secureContainerSlotId = "SecuredContainer";
var profile = _profileHelper.GetFullProfile(sessionID);
- if (profile.UserBuildData is null)
+ if (profile is not null && profile.UserBuildData is null)
{
- profile.UserBuildData = new UserBuilds{ EquipmentBuilds = [], WeaponBuilds = [], MagazineBuilds = [] };
+ 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)
+ _databaseService.GetTemplates().DefaultEquipmentPresets
+ );
+ var playerSecureContainer = profile?.CharacterData?.PmcData?.Inventory?.Items?.FirstOrDefault(
+ x => x.SlotId == secureContainerSlotId
+ );
+ var firstDefaultItemsSecureContainer = defaultEquipmentPresetsClone?.FirstOrDefault()
+ ?.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) {
+ foreach (var defaultPreset in defaultEquipmentPresetsClone ?? [])
+ {
// Find presets secure container
- var secureContainer = defaultPreset.Items.FirstOrDefault((item) => item.SlotId == secureContainerSlotId);
+ var secureContainer = defaultPreset.Items?.FirstOrDefault(item => item.SlotId == secureContainerSlotId);
if (secureContainer is not null)
{
secureContainer.Template = playerSecureContainer.Template;
@@ -61,8 +55,8 @@ public class BuildController
}
// Clone player build data from profile and append the above defaults onto end
- var userBuildsClone = _cloner.Clone(profile.UserBuildData);
- userBuildsClone.EquipmentBuilds.AddRange(defaultEquipmentPresetsClone);
+ var userBuildsClone = _cloner.Clone(profile?.UserBuildData);
+ userBuildsClone?.EquipmentBuilds?.AddRange(defaultEquipmentPresetsClone ?? []);
return userBuildsClone;
}
@@ -94,7 +88,8 @@ public class BuildController
///
public void RemoveBuild(string sessionId, RemoveBuildRequestData request)
{
- RemovePlayerBuild(request.Id, sessionId);
+ if (request.Id is not null)
+ RemovePlayerBuild(request.Id, sessionId);
}
///