From 597ea96f34335f3d2ff6a1665c98d37b08896499 Mon Sep 17 00:00:00 2001 From: Dev Date: Mon, 20 May 2024 11:31:45 +0100 Subject: [PATCH] Added per-profile type redeem times to server unheard has a 72 hour redeem time vs all other profiles 48 renamed `redeemTime` to `mailRedeemTimeHours` --- project/assets/configs/quest.json | 5 ++++- project/src/controllers/QuestController.ts | 4 ++-- project/src/helpers/QuestHelper.ts | 18 +++++++++++++++++- project/src/helpers/RagfairOfferHelper.ts | 5 ++++- project/src/models/spt/config/IQuestConfig.ts | 4 ++-- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/project/assets/configs/quest.json b/project/assets/configs/quest.json index 2b40e203..386e5fb6 100644 --- a/project/assets/configs/quest.json +++ b/project/assets/configs/quest.json @@ -1,5 +1,8 @@ { - "redeemTime": 48, + "mailRedeemTimeHours": { + "default": 48, + "unheard_edition": 72 + }, "usecOnlyQuests": [ "6179b5eabca27a099552e052", "5e383a6386f77465910ce1f3", diff --git a/project/src/controllers/QuestController.ts b/project/src/controllers/QuestController.ts index b585d7d2..4a86422d 100644 --- a/project/src/controllers/QuestController.ts +++ b/project/src/controllers/QuestController.ts @@ -337,7 +337,7 @@ export class QuestController MessageType.QUEST_START, messageId, startedQuestRewardItems, - this.timeUtil.getHoursAsSeconds(this.questConfig.redeemTime), + this.timeUtil.getHoursAsSeconds(this.questHelper.getMailItemRedeemTimeHoursForProfile(pmcData)), ); // Having accepted new quest, look for newly unlocked quests and inform client of them @@ -644,7 +644,7 @@ export class QuestController MessageType.QUEST_SUCCESS, quest.successMessageText, questRewards, - this.timeUtil.getHoursAsSeconds(this.questConfig.redeemTime), + this.timeUtil.getHoursAsSeconds(this.questHelper.getMailItemRedeemTimeHoursForProfile(pmcData)), ); } diff --git a/project/src/helpers/QuestHelper.ts b/project/src/helpers/QuestHelper.ts index a86c7a86..7893db8a 100644 --- a/project/src/helpers/QuestHelper.ts +++ b/project/src/helpers/QuestHelper.ts @@ -755,7 +755,7 @@ export class QuestHelper MessageType.QUEST_FAIL, quest.failMessageText, questRewards, - this.timeUtil.getHoursAsSeconds(this.questConfig.redeemTime), + this.timeUtil.getHoursAsSeconds(this.getMailItemRedeemTimeHoursForProfile(pmcData)), ); } } @@ -1167,4 +1167,20 @@ export class QuestHelper return quest.conditions.Fail.some((condition) => condition.target?.includes(completedQuestId)); }); } + + /** + * Get the hours a mails items can be collected for by profile type + * @param pmcData Profile to get hours for + * @returns Hours item will be available for + */ + public getMailItemRedeemTimeHoursForProfile(pmcData: IPmcData): number + { + const value = this.questConfig.mailRedeemTimeHours[pmcData.Info.GameVersion]; + if (!value) + { + return this.questConfig.mailRedeemTimeHours["default"]; + } + + return value; + } } diff --git a/project/src/helpers/RagfairOfferHelper.ts b/project/src/helpers/RagfairOfferHelper.ts index e1de3e23..9306a904 100644 --- a/project/src/helpers/RagfairOfferHelper.ts +++ b/project/src/helpers/RagfairOfferHelper.ts @@ -33,6 +33,7 @@ import { RagfairOfferService } from "@spt-aki/services/RagfairOfferService"; import { RagfairRequiredItemsService } from "@spt-aki/services/RagfairRequiredItemsService"; import { HashUtil } from "@spt-aki/utils/HashUtil"; import { TimeUtil } from "@spt-aki/utils/TimeUtil"; +import { QuestHelper } from "./QuestHelper"; @injectable() export class RagfairOfferHelper @@ -53,6 +54,7 @@ export class RagfairOfferHelper @inject("PaymentHelper") protected paymentHelper: PaymentHelper, @inject("PresetHelper") protected presetHelper: PresetHelper, @inject("ProfileHelper") protected profileHelper: ProfileHelper, + @inject("QuestHelper") protected questHelper: QuestHelper, @inject("RagfairServerHelper") protected ragfairServerHelper: RagfairServerHelper, @inject("RagfairSortHelper") protected ragfairSortHelper: RagfairSortHelper, @inject("RagfairHelper") protected ragfairHelper: RagfairHelper, @@ -503,7 +505,8 @@ export class RagfairOfferHelper MessageType.FLEAMARKET_MESSAGE, this.getLocalisedOfferSoldMessage(itemTpl, boughtAmount), itemsToSend, - this.timeUtil.getHoursAsSeconds(this.questConfig.redeemTime), + this.timeUtil.getHoursAsSeconds( + this.questHelper.getMailItemRedeemTimeHoursForProfile(this.profileHelper.getPmcProfile(sessionID))), null, ragfairDetails, ); diff --git a/project/src/models/spt/config/IQuestConfig.ts b/project/src/models/spt/config/IQuestConfig.ts index 1e6fa308..53067fa6 100644 --- a/project/src/models/spt/config/IQuestConfig.ts +++ b/project/src/models/spt/config/IQuestConfig.ts @@ -6,8 +6,8 @@ import { IBaseConfig } from "@spt-aki/models/spt/config/IBaseConfig"; export interface IQuestConfig extends IBaseConfig { kind: "aki-quest" - // Hours to get/redeem items from quest mail - redeemTime: number + // Hours to get/redeem items from quest mail keyed by profile type + mailRedeemTimeHours: Record questTemplateIds: IPlayerTypeQuestIds /** Show non-seasonal quests be shown to player */ showNonSeasonalEventQuests: boolean