From 87da94658da38b9e37373007c8af000e4901089a Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sun, 21 Sep 2025 02:53:05 -0700 Subject: [PATCH] fix: correct checks for quest replay (#2798) Closes #2797 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2798 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> --- .../api/giveKeyChainTriggeredItemsController.ts | 3 ++- .../giveKeyChainTriggeredMessageController.ts | 3 ++- src/services/questService.ts | 16 +++++++--------- 3 files changed, 11 insertions(+), 11 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 d0a4a468..8af53db9 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 }); @@ -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) { 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); } } };