Updated how money reward bonuses are calculated, slightly more accurate but still not identical to live
This commit is contained in:
parent
e6b05a6660
commit
c359f41c63
@ -578,22 +578,19 @@ export class QuestHelper {
|
|||||||
/**
|
/**
|
||||||
* Adjust quest money rewards by passed in multiplier
|
* Adjust quest money rewards by passed in multiplier
|
||||||
* @param quest Quest to multiple money rewards
|
* @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
|
* @param questStatus Status of quest to apply money boost to rewards of
|
||||||
* @returns Updated quest
|
* @returns Updated quest
|
||||||
*/
|
*/
|
||||||
public applyMoneyBoost(quest: IQuest, bonusPercent: number, questStatus: QuestStatus): IQuest {
|
public applyMoneyBoost(quest: IQuest, bonusPercent: number, questStatus: QuestStatus): IQuest {
|
||||||
const rewards: IQuestReward[] = quest.rewards?.[QuestStatus[questStatus]] ?? [];
|
const rewards: IQuestReward[] = quest.rewards?.[QuestStatus[questStatus]] ?? [];
|
||||||
const multipler = bonusPercent / 100 + 1;
|
const currencyRewards = rewards.filter(
|
||||||
for (const reward of rewards) {
|
(reward) => reward.type === "Item" && this.paymentHelper.isMoneyTpl(reward.items[0]._tpl),
|
||||||
// Skip non-money items
|
);
|
||||||
if (reward.type !== "Item" || !this.paymentHelper.isMoneyTpl(reward.items[0]._tpl)) {
|
for (const reward of currencyRewards) {
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add % bonus to existing StackObjectsCount
|
// Add % bonus to existing StackObjectsCount
|
||||||
const rewardItem = reward.items[0];
|
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;
|
rewardItem.upd.StackObjectsCount = newCurrencyAmount;
|
||||||
reward.value = newCurrencyAmount;
|
reward.value = newCurrencyAmount;
|
||||||
}
|
}
|
||||||
@ -879,10 +876,10 @@ export class QuestHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for and apply intel center money bonus if it exists
|
// Check for and apply intel center money bonus if it exists
|
||||||
const questMoneyRewardBonusPercent = this.getQuestMoneyRewardBonus(pmcProfile);
|
const questMoneyRewardBonusMultiplier = this.getQuestMoneyRewardBonusMultiplier(pmcProfile);
|
||||||
if (questMoneyRewardBonusPercent > 0) {
|
if (questMoneyRewardBonusMultiplier > 0) {
|
||||||
// Apply additional bonus from hideout skill
|
// 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'
|
// e.g. 'Success' or 'AvailableForFinish'
|
||||||
@ -997,23 +994,20 @@ export class QuestHelper {
|
|||||||
* @param pmcData player profile
|
* @param pmcData player profile
|
||||||
* @returns bonus as a percent
|
* @returns bonus as a percent
|
||||||
*/
|
*/
|
||||||
protected getQuestMoneyRewardBonus(pmcData: IPmcData): number {
|
protected getQuestMoneyRewardBonusMultiplier(pmcData: IPmcData): number {
|
||||||
// Check player has intel center
|
// Check player has intel center
|
||||||
const moneyRewardBonuses = pmcData.Bonuses.filter((x) => x.type === "QuestMoneyReward");
|
const moneyRewardBonuses = pmcData.Bonuses.filter((profileBonus) => profileBonus.type === "QuestMoneyReward");
|
||||||
if (!moneyRewardBonuses) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get a total of the quest money rewards
|
// Get a total of the quest money reward percent bonuses
|
||||||
let moneyRewardBonus = moneyRewardBonuses.reduce((acc, cur) => acc + cur.value, 0);
|
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);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user