Improved nullguarding in GetuserBuilds method
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user