mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
Fix some quests failing twice (chemical part 4), reducing rep twice as much as it should
Quest failure is handled by client now, no need to find and fail quests in server on quest completion Move `getQuestsFailedByCompletingQuest()` to questHelper
This commit is contained in:
parent
4efb75ea58
commit
47a84e508b
@ -495,13 +495,6 @@ export class QuestController
|
||||
completeQuestResponse,
|
||||
);
|
||||
|
||||
// Check for linked failed + unrestartable quests
|
||||
const questsToFail = this.getQuestsFailedByCompletingQuest(completedQuestId);
|
||||
if (questsToFail?.length > 0)
|
||||
{
|
||||
this.failQuests(sessionID, pmcData, questsToFail, completeQuestResponse);
|
||||
}
|
||||
|
||||
// Show modal on player screen
|
||||
this.sendSuccessDialogMessageOnQuestComplete(sessionID, pmcData, completedQuestId, questRewards);
|
||||
|
||||
@ -509,7 +502,7 @@ export class QuestController
|
||||
const questDelta = this.questHelper.getDeltaQuests(beforeQuests, this.getClientQuests(sessionID));
|
||||
|
||||
// Check newly available + failed quests for timegates and add them to profile
|
||||
this.addTimeLockedQuestsToProfile(pmcData, [...questDelta, ...questsToFail], body.qid);
|
||||
this.addTimeLockedQuestsToProfile(pmcData, [...questDelta], body.qid);
|
||||
|
||||
// Inform client of quest changes
|
||||
completeQuestResponse.profileChanges[sessionID].quests.push(...questDelta);
|
||||
@ -674,26 +667,6 @@ export class QuestController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of quests that would fail when supplied quest is completed
|
||||
* @param completedQuestId quest completed id
|
||||
* @returns array of IQuest objects
|
||||
*/
|
||||
protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]
|
||||
{
|
||||
const questsInDb = this.questHelper.getQuestsFromDb();
|
||||
return questsInDb.filter((quest) =>
|
||||
{
|
||||
// No fail conditions, exit early
|
||||
if (!quest.conditions.Fail || quest.conditions.Fail.length === 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return quest.conditions.Fail.some((condition) => condition.target?.includes(completedQuestId));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Fail the provided quests
|
||||
* Update quest in profile, otherwise add fresh quest object with failed status
|
||||
@ -720,15 +693,19 @@ export class QuestController
|
||||
const isActiveQuestInPlayerProfile = pmcData.Quests.find((y) => y.qid === questToFail._id);
|
||||
if (isActiveQuestInPlayerProfile)
|
||||
{
|
||||
const failBody: IFailQuestRequestData = {
|
||||
Action: "QuestFail",
|
||||
qid: questToFail._id,
|
||||
removeExcessItems: true,
|
||||
};
|
||||
this.questHelper.failQuest(pmcData, failBody, sessionID, output);
|
||||
if (isActiveQuestInPlayerProfile.status !== QuestStatus.Fail)
|
||||
{
|
||||
const failBody: IFailQuestRequestData = {
|
||||
Action: "QuestFail",
|
||||
qid: questToFail._id,
|
||||
removeExcessItems: true,
|
||||
};
|
||||
this.questHelper.failQuest(pmcData, failBody, sessionID, output);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Failing an entirely new quest that doesnt exist in profile
|
||||
const statusTimers = {};
|
||||
statusTimers[QuestStatus.Fail] = this.timeUtil.getTimestamp();
|
||||
const questData: IQuestStatus = {
|
||||
|
@ -1077,4 +1077,24 @@ export class QuestHelper
|
||||
quests.splice(quests.indexOf(pmcQuestToReplaceStatus, 1));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of quests that would fail when supplied quest is completed
|
||||
* @param completedQuestId quest completed id
|
||||
* @returns array of IQuest objects
|
||||
*/
|
||||
public getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]
|
||||
{
|
||||
const questsInDb = this.getQuestsFromDb();
|
||||
return questsInDb.filter((quest) =>
|
||||
{
|
||||
// No fail conditions, exit early
|
||||
if (!quest.conditions.Fail || quest.conditions.Fail.length === 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return quest.conditions.Fail.some((condition) => condition.target?.includes(completedQuestId));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user