Added per-profile type redeem times to server

unheard has a 72 hour redeem time vs all other profiles 48
renamed `redeemTime` to `mailRedeemTimeHours`
This commit is contained in:
Dev 2024-05-20 11:31:45 +01:00
parent 493a54759b
commit 597ea96f34
5 changed files with 29 additions and 7 deletions

View File

@ -1,5 +1,8 @@
{
"redeemTime": 48,
"mailRedeemTimeHours": {
"default": 48,
"unheard_edition": 72
},
"usecOnlyQuests": [
"6179b5eabca27a099552e052",
"5e383a6386f77465910ce1f3",

View File

@ -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)),
);
}

View File

@ -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;
}
}

View File

@ -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,
);

View File

@ -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<string, number>
questTemplateIds: IPlayerTypeQuestIds
/** Show non-seasonal quests be shown to player */
showNonSeasonalEventQuests: boolean