From c359f41c63412d4beb7130767ed39c0eafdfeb99 Mon Sep 17 00:00:00 2001 From: Dev Date: Sun, 1 Sep 2024 16:53:48 +0100 Subject: [PATCH] Updated how money reward bonuses are calculated, slightly more accurate but still not identical to live --- project/src/helpers/QuestHelper.ts | 42 +++++++++++++----------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/project/src/helpers/QuestHelper.ts b/project/src/helpers/QuestHelper.ts index cce2c005..d6f46a24 100644 --- a/project/src/helpers/QuestHelper.ts +++ b/project/src/helpers/QuestHelper.ts @@ -578,22 +578,19 @@ export class QuestHelper { /** * Adjust quest money rewards by passed in multiplier * @param quest Quest to multiple money rewards - * @param bonusPercent Value to adjust money rewards by + * @param bonusPercent Pecent to adjust money rewards by * @param questStatus Status of quest to apply money boost to rewards of * @returns Updated quest */ public applyMoneyBoost(quest: IQuest, bonusPercent: number, questStatus: QuestStatus): IQuest { const rewards: IQuestReward[] = quest.rewards?.[QuestStatus[questStatus]] ?? []; - const multipler = bonusPercent / 100 + 1; - for (const reward of rewards) { - // Skip non-money items - if (reward.type !== "Item" || !this.paymentHelper.isMoneyTpl(reward.items[0]._tpl)) { - continue; - } - + const currencyRewards = rewards.filter( + (reward) => reward.type === "Item" && this.paymentHelper.isMoneyTpl(reward.items[0]._tpl), + ); + for (const reward of currencyRewards) { // Add % bonus to existing StackObjectsCount const rewardItem = reward.items[0]; - const newCurrencyAmount = Math.floor(rewardItem.upd.StackObjectsCount * multipler); + const newCurrencyAmount = Math.floor(rewardItem.upd.StackObjectsCount * (1 + bonusPercent / 100)); rewardItem.upd.StackObjectsCount = newCurrencyAmount; reward.value = newCurrencyAmount; } @@ -879,10 +876,10 @@ export class QuestHelper { } // Check for and apply intel center money bonus if it exists - const questMoneyRewardBonusPercent = this.getQuestMoneyRewardBonus(pmcProfile); - if (questMoneyRewardBonusPercent > 0) { + const questMoneyRewardBonusMultiplier = this.getQuestMoneyRewardBonusMultiplier(pmcProfile); + if (questMoneyRewardBonusMultiplier > 0) { // Apply additional bonus from hideout skill - questDetails = this.applyMoneyBoost(questDetails, questMoneyRewardBonusPercent, state); // money = money + (money * intelCenterBonus / 100) + questDetails = this.applyMoneyBoost(questDetails, questMoneyRewardBonusMultiplier, state); // money = money + (money * intelCenterBonus / 100) } // e.g. 'Success' or 'AvailableForFinish' @@ -997,23 +994,20 @@ export class QuestHelper { * @param pmcData player profile * @returns bonus as a percent */ - protected getQuestMoneyRewardBonus(pmcData: IPmcData): number { + protected getQuestMoneyRewardBonusMultiplier(pmcData: IPmcData): number { // Check player has intel center - const moneyRewardBonuses = pmcData.Bonuses.filter((x) => x.type === "QuestMoneyReward"); - if (!moneyRewardBonuses) { - return 0; - } + const moneyRewardBonuses = pmcData.Bonuses.filter((profileBonus) => profileBonus.type === "QuestMoneyReward"); - // Get a total of the quest money rewards - let moneyRewardBonus = moneyRewardBonuses.reduce((acc, cur) => acc + cur.value, 0); + // Get a total of the quest money reward percent bonuses + const moneyRewardBonusPercent = moneyRewardBonuses.reduce((acc, cur) => acc + cur.value, 0); - // Apply hideout management bonus to money reward (up to 51% bonus) + // Calculate hideout management bonus as a percentage (up to 51% bonus) const hideoutManagementSkill = this.profileHelper.getSkillFromProfile(pmcData, SkillTypes.HIDEOUT_MANAGEMENT); - if (hideoutManagementSkill) { - moneyRewardBonus *= 1 + hideoutManagementSkill.Progress / 10000; // 5100 becomes 0.51, add 1 to it, 1.51, multiply the moneyreward bonus by it (e.g. 15 x 51) - } - return moneyRewardBonus; + // 5100 becomes 0.51, add 1 to it, 1.51, multiply the moneyreward bonus by it (e.g. 15 x 51) + const hideoutManagementBonusPercent = hideoutManagementSkill ? hideoutManagementSkill.Progress / 100 : 0; + + return moneyRewardBonusPercent + hideoutManagementBonusPercent; } /**