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;