feat: reverseQuestProgress (#2948)
Closes #2939 Reviewed-on: #2948 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
parent
b2749765a3
commit
f3072e84c9
@ -1,12 +1,12 @@
|
||||
import type { RequestHandler } from "express";
|
||||
import { parseString } from "../../helpers/general.ts";
|
||||
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||
import { getInventory } from "../../services/inventoryService.ts";
|
||||
import { giveKeyChainItem } from "../../services/questService.ts";
|
||||
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
|
||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||
|
||||
export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
|
||||
const accountId = parseString(req.query.accountId);
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
|
||||
|
||||
const inventory = await getInventory(accountId);
|
||||
|
||||
17
src/controllers/api/reverseQuestProgressController.ts
Normal file
17
src/controllers/api/reverseQuestProgressController.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import type { RequestHandler } from "express";
|
||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||
import { resetQuestKeyToStage } from "../../services/questService.ts";
|
||||
import { getInventory } from "../../services/inventoryService.ts";
|
||||
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
|
||||
|
||||
export const reverseQuestProgressController: RequestHandler = async (req, res) => {
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
|
||||
|
||||
const inventory = await getInventory(accountId);
|
||||
resetQuestKeyToStage(inventory, keyChainInfo);
|
||||
await inventory.save();
|
||||
|
||||
res.end();
|
||||
};
|
||||
@ -120,6 +120,7 @@ import { rerollRandomModController } from "../controllers/api/rerollRandomModCon
|
||||
import { researchMushroomController } from "../controllers/api/researchMushroomController.ts";
|
||||
import { resetQuestProgressController } from "../controllers/api/resetQuestProgressController.ts";
|
||||
import { retrievePetFromStasisController } from "../controllers/api/retrievePetFromStasisController.ts";
|
||||
import { reverseQuestProgressController } from "../controllers/api/reverseQuestProgressController.ts";
|
||||
import { saveDialogueController } from "../controllers/api/saveDialogueController.ts";
|
||||
import { saveLoadoutController } from "../controllers/api/saveLoadoutController.ts";
|
||||
import { saveSettingsController } from "../controllers/api/saveSettingsController.ts";
|
||||
@ -323,6 +324,7 @@ apiRouter.post("/renamePet.php", renamePetController);
|
||||
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
|
||||
apiRouter.post("/researchMushroom.php", researchMushroomController);
|
||||
apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
|
||||
apiRouter.post("/reverseQuestProgress.php", reverseQuestProgressController);
|
||||
apiRouter.post("/saveDialogue.php", saveDialogueController);
|
||||
apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
||||
apiRouter.post("/saveSettings.php", saveSettingsController);
|
||||
|
||||
@ -92,6 +92,30 @@ export const updateQuestStage = (
|
||||
}
|
||||
};
|
||||
|
||||
export const resetQuestKeyToStage = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
{ KeyChain, ChainStage }: IKeyChainRequest
|
||||
): void => {
|
||||
const quest = inventory.QuestKeys.find(quest => quest.ItemType === KeyChain);
|
||||
|
||||
if (!quest) {
|
||||
throw new Error(`Quest ${KeyChain} not found in QuestKeys`);
|
||||
}
|
||||
|
||||
quest.Progress ??= [];
|
||||
|
||||
quest.Progress.splice(1 + ChainStage); // remove stages past the target
|
||||
|
||||
const questStage = quest.Progress[ChainStage];
|
||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||||
if (questStage) {
|
||||
const run = quest.Progress[0].c;
|
||||
if (run >= 0) {
|
||||
questStage.c = run - 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const addQuestKey = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
questKey: IQuestKeyDatabase
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user