From 2336c3018a6687e443377e906aa6f47b9fce3767 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sat, 20 Sep 2025 08:08:56 +0200 Subject: [PATCH 1/3] fix: correct checks for quest replay Closes #2797 --- src/services/questService.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/questService.ts b/src/services/questService.ts index d0a4a468..e01db084 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -159,7 +159,7 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest for (let i = 0; i < chainStageTotal; i++) { const stage = existingQuestKey.Progress[i]; - if (stage.c < run) { + if (stage.c <= run) { stage.c = run; await giveKeyChainStageTriggered(inventory, { KeyChain: questKey, ChainStage: i }); await giveKeyChainMissionReward(inventory, { KeyChain: questKey, ChainStage: i }); @@ -302,7 +302,7 @@ export const giveKeyChainItem = async ( ): Promise => { let inventoryChanges: IInventoryChanges = {}; - if (!isRerun) { + if (isRerun) { inventoryChanges = await addKeyChainItems(inventory, keyChainInfo); if (isEmptyObject(inventoryChanges)) { @@ -331,7 +331,7 @@ export const giveKeyChainMessage = async ( ): Promise => { const keyChainMessage = getKeyChainMessage(keyChainInfo); - if (!isRerun) { + if (isRerun) { keyChainMessage.att = []; keyChainMessage.countedAtt = []; } -- 2.47.2 From 34a23aa2dcaae0d7c9b4e217d38a90a87de10f93 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sat, 20 Sep 2025 10:07:02 +0200 Subject: [PATCH 2/3] check values directly in questKey --- .../api/giveKeyChainTriggeredItemsController.ts | 3 ++- .../api/giveKeyChainTriggeredMessageController.ts | 3 ++- src/services/questService.ts | 14 ++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/controllers/api/giveKeyChainTriggeredItemsController.ts b/src/controllers/api/giveKeyChainTriggeredItemsController.ts index 22d2fccc..1f875cd5 100644 --- a/src/controllers/api/giveKeyChainTriggeredItemsController.ts +++ b/src/controllers/api/giveKeyChainTriggeredItemsController.ts @@ -10,7 +10,8 @@ export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, const keyChainInfo = getJSONfromString((req.body as string).toString()); const inventory = await getInventory(accountId); - const inventoryChanges = await giveKeyChainItem(inventory, keyChainInfo); + const questKey = inventory.QuestKeys.find(qk => qk.ItemType === keyChainInfo.KeyChain)!; + const inventoryChanges = await giveKeyChainItem(inventory, keyChainInfo, questKey); await inventory.save(); res.send(inventoryChanges); diff --git a/src/controllers/api/giveKeyChainTriggeredMessageController.ts b/src/controllers/api/giveKeyChainTriggeredMessageController.ts index 6df1d8aa..39b18641 100644 --- a/src/controllers/api/giveKeyChainTriggeredMessageController.ts +++ b/src/controllers/api/giveKeyChainTriggeredMessageController.ts @@ -9,7 +9,8 @@ export const giveKeyChainTriggeredMessageController: RequestHandler = async (req const keyChainInfo = JSON.parse((req.body as Buffer).toString()) as IKeyChainRequest; const inventory = await getInventory(accountId, "QuestKeys accountOwnerId"); - await giveKeyChainMessage(inventory, keyChainInfo); + const questKey = inventory.QuestKeys.find(qk => qk.ItemType === keyChainInfo.KeyChain)!; + await giveKeyChainMessage(inventory, keyChainInfo, questKey); await inventory.save(); res.send(1); diff --git a/src/services/questService.ts b/src/services/questService.ts index e01db084..6e8c70cb 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -298,11 +298,11 @@ const handleQuestCompletion = async ( export const giveKeyChainItem = async ( inventory: TInventoryDatabaseDocument, keyChainInfo: IKeyChainRequest, - isRerun: boolean = false + questKey: IQuestKeyDatabase ): Promise => { let inventoryChanges: IInventoryChanges = {}; - if (isRerun) { + if (questKey.Progress![keyChainInfo.ChainStage].i) { inventoryChanges = await addKeyChainItems(inventory, keyChainInfo); if (isEmptyObject(inventoryChanges)) { @@ -327,11 +327,11 @@ export const giveKeyChainItem = async ( export const giveKeyChainMessage = async ( inventory: TInventoryDatabaseDocument, keyChainInfo: IKeyChainRequest, - isRerun: boolean = false + questKey: IQuestKeyDatabase ): Promise => { const keyChainMessage = getKeyChainMessage(keyChainInfo); - if (isRerun) { + if ((questKey.Progress![0].c ?? 0) > 0) { keyChainMessage.att = []; keyChainMessage.countedAtt = []; } @@ -391,14 +391,12 @@ export const giveKeyChainStageTriggered = async ( const questKey = inventory.QuestKeys.find(qk => qk.ItemType === keyChainInfo.KeyChain); if (chainStages && questKey) { - const run = questKey.Progress?.[0]?.c ?? 0; - if (chainStages[keyChainInfo.ChainStage].itemsToGiveWhenTriggered.length > 0) { - await giveKeyChainItem(inventory, keyChainInfo, run > 0); + await giveKeyChainItem(inventory, keyChainInfo, questKey); } if (chainStages[keyChainInfo.ChainStage].messageToSendWhenTriggered) { - await giveKeyChainMessage(inventory, keyChainInfo, run > 0); + await giveKeyChainMessage(inventory, keyChainInfo, questKey); } } }; -- 2.47.2 From 5d0ee2fc054d7551f82b652402173689cb596d03 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sat, 20 Sep 2025 10:09:34 +0200 Subject: [PATCH 3/3] lint --- src/services/questService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/questService.ts b/src/services/questService.ts index 6e8c70cb..8af53db9 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -331,7 +331,7 @@ export const giveKeyChainMessage = async ( ): Promise => { const keyChainMessage = getKeyChainMessage(keyChainInfo); - if ((questKey.Progress![0].c ?? 0) > 0) { + if (questKey.Progress![0].c > 0) { keyChainMessage.att = []; keyChainMessage.countedAtt = []; } -- 2.47.2