From e3192a748733b0084d076488db27caed664aed53 Mon Sep 17 00:00:00 2001 From: Chris Adamson Date: Sat, 3 May 2025 16:26:04 -0500 Subject: [PATCH] fixed missing bonuses in quest rewards (#229) * fixed missing bonuses in quest rewards * fixes based on feedback --------- Co-authored-by: Chomp <27521899+chompDev@users.noreply.github.com> --- .../Helpers/QuestRewardHelper.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs index ad5efb84..f4935965 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs @@ -125,11 +125,11 @@ public class QuestRewardHelper( // 5100 becomes 0.51, add 1 to it, 1.51 // We multiply the money reward bonuses by the hideout management skill multiplier, giving the new result var hideoutManagementBonusMultiplier = hideoutManagementSkill != null - ? 1 + hideoutManagementSkill.Progress / 1000 + ? 2 + hideoutManagementSkill.Progress / 1000 : 1; // e.g 15% * 1.4 - return moneyRewardBonusPercent * hideoutManagementBonusMultiplier ?? 1; + return moneyRewardBonusPercent + hideoutManagementBonusMultiplier ?? 1; } /** @@ -142,22 +142,22 @@ public class QuestRewardHelper( public Quest ApplyMoneyBoost(Quest quest, double bonusPercent, QuestStatusEnum questStatus) { var clonedQuest = _cloner.Clone(quest); - var rewards = (List) clonedQuest.Rewards.GetType() - .GetProperties() - .FirstOrDefault(p => p.Name == questStatus.ToString()) - .GetValue(quest.Rewards) ?? - new List(); - var currencyRewards = rewards.Where(r => - r.Type.ToString() == "Item" && - _paymentHelper.IsMoneyTpl(r.Items.FirstOrDefault().Template) - ); - foreach (var reward in currencyRewards) + + if (clonedQuest.Rewards.Success == null) return clonedQuest; + + var itemRewards = 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) { // Add % bonus to existing StackObjectsCount - var rewardItem = reward.Items[0]; - var newCurrencyAmount = Math.Floor((rewardItem.Upd.StackObjectsCount ?? 0) * (1 + bonusPercent / 100)); + var rewardItem = moneyReward.Items[0]; + var newCurrencyAmount = Math.Floor((rewardItem.Upd.StackObjectsCount ?? 0) * (1 + (bonusPercent / 100))); rewardItem.Upd.StackObjectsCount = newCurrencyAmount; - reward.Value = newCurrencyAmount; + moneyReward.Value = newCurrencyAmount; } return clonedQuest;