From 7a12d17fb64633b27935c017a4ca0e7fa824b586 Mon Sep 17 00:00:00 2001 From: Chomp Date: Thu, 6 Feb 2025 22:19:54 +0000 Subject: [PATCH] Improved nullguarding in `GetuserBuilds` method --- Libraries/Core/Controllers/BuildController.cs | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Libraries/Core/Controllers/BuildController.cs b/Libraries/Core/Controllers/BuildController.cs index 84489a10..39884f89 100644 --- a/Libraries/Core/Controllers/BuildController.cs +++ b/Libraries/Core/Controllers/BuildController.cs @@ -34,24 +34,27 @@ public class BuildController( public UserBuilds? GetUserBuilds(string sessionID) { const string secureContainerSlotId = "SecuredContainer"; + var profile = _profileHelper.GetFullProfile(sessionID); - if (profile is not null && profile.UserBuildData is null) + 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 defaultEquipmentPresetsClone = _cloner.Clone(_databaseService.GetTemplates().DefaultEquipmentPresets) + .ToList(); + + // Get players secure container var playerSecureContainer = profile?.CharacterData?.PmcData?.Inventory?.Items?.FirstOrDefault( x => x.SlotId == secureContainerSlotId ); - var firstDefaultItemsSecureContainer = defaultEquipmentPresetsClone?.FirstOrDefault() - ?.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); @@ -60,7 +63,9 @@ 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 ?? []); + + userBuildsClone.EquipmentBuilds ??= []; + userBuildsClone?.EquipmentBuilds?.AddRange(defaultEquipmentPresetsClone); return userBuildsClone; }