From e41d4a10bfc382a3007d3f1c06a3b34bd8d7923e Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 21 May 2025 10:37:51 +0100 Subject: [PATCH] Added nullguards inside `ApplyMoneyBoost()` Renamed variables to improve clarity Converted comments --- .../Helpers/QuestRewardHelper.cs | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs index 6ae48945..ed4233a9 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs @@ -133,29 +133,41 @@ public class QuestRewardHelper( return moneyRewardBonusPercent + hideoutManagementBonusMultiplier ?? 1; } - /** - * Adjust quest money rewards by passed in multiplier - * @param quest Quest to multiple money rewards - * @param bonusPercent Percent to adjust money rewards by - * @param questStatus Status of quest to apply money boost to rewards of - * @returns Updated quest - */ + + /// + /// Adjust a quests money rewards by supplied multiplier + /// + /// Quest to apply bonus to + /// Percent to adjust money rewards by + /// Status of quest to apply money boost to rewards of + /// Updated quest public Quest ApplyMoneyBoost(Quest quest, double bonusPercent, QuestStatusEnum questStatus) { var clonedQuest = _cloner.Clone(quest); + if (clonedQuest?.Rewards?.Success == null) + { + return clonedQuest; + } - if (clonedQuest.Rewards.Success == null) return clonedQuest; - - var itemRewards = clonedQuest.Rewards.Success + // Grab just the money rewards from quest reward pool + var moneyRewards = clonedQuest.Rewards.Success .Where(reward => reward.Type == RewardType.Item && reward.Items != null && reward.Items.Count > 0 && _paymentHelper.IsMoneyTpl(reward.Items.FirstOrDefault().Template) ); - foreach (var moneyReward in itemRewards) + + foreach (var moneyReward in moneyRewards) { // Add % bonus to existing StackObjectsCount - var rewardItem = moneyReward.Items[0]; + var rewardItem = moneyReward.Items?.FirstOrDefault(); + if (rewardItem is null) + { + _logger.Error($"Unable to apply money reward bonus to quest: {quest.Name} as no money item found"); + + continue; + } + var newCurrencyAmount = Math.Floor((rewardItem.Upd.StackObjectsCount ?? 0) * (1 + (bonusPercent / 100))); rewardItem.Upd.StackObjectsCount = newCurrencyAmount; moneyReward.Value = newCurrencyAmount;