返回提交历史
Modified
src/controllers/api/giveKeyChainTriggeredItemsController.ts
+2
-2
Added
src/controllers/api/reverseQuestProgressController.ts
+17
-0
Modified
src/routes/api.ts
+2
-0
Modified
src/services/questService.ts
+24
-0
XFEstudio/SpaceNinjaServer
feat: reverseQuestProgress (#2948)
Closes #2939 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2948 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
f3072e84
代码差异
4 个文件
+45
-2
@@ -1,12 +1,12 @@
1
1
import type { RequestHandler } from "express";
2
import { parseString } from "../../helpers/general.ts";
3
2
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
4
3
import { getInventory } from "../../services/inventoryService.ts";
5
4
import { giveKeyChainItem } from "../../services/questService.ts";
6
5
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
6
import { getAccountIdForRequest } from "../../services/loginService.ts";
7
7
8
8
export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
9
const accountId = parseString(req.query.accountId);
9
const accountId = await getAccountIdForRequest(req);
10
10
const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
11
11
12
12
const inventory = await getInventory(accountId);
@@ -0,0 +1,17 @@
1
import type { RequestHandler } from "express";
2
import { getAccountIdForRequest } from "../../services/loginService.ts";
3
import { resetQuestKeyToStage } from "../../services/questService.ts";
4
import { getInventory } from "../../services/inventoryService.ts";
5
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
6
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
7
8
export const reverseQuestProgressController: RequestHandler = async (req, res) => {
9
const accountId = await getAccountIdForRequest(req);
10
const keyChainInfo = getJSONfromString<IKeyChainRequest>((req.body as string).toString());
11
12
const inventory = await getInventory(accountId);
13
resetQuestKeyToStage(inventory, keyChainInfo);
14
await inventory.save();
15
16
res.end();
17
};
@@ -120,6 +120,7 @@ import { rerollRandomModController } from "../controllers/api/rerollRandomModCon
120
120
import { researchMushroomController } from "../controllers/api/researchMushroomController.ts";
121
121
import { resetQuestProgressController } from "../controllers/api/resetQuestProgressController.ts";
122
122
import { retrievePetFromStasisController } from "../controllers/api/retrievePetFromStasisController.ts";
123
import { reverseQuestProgressController } from "../controllers/api/reverseQuestProgressController.ts";
123
124
import { saveDialogueController } from "../controllers/api/saveDialogueController.ts";
124
125
import { saveLoadoutController } from "../controllers/api/saveLoadoutController.ts";
125
126
import { saveSettingsController } from "../controllers/api/saveSettingsController.ts";
@@ -323,6 +324,7 @@ apiRouter.post("/renamePet.php", renamePetController);
323
324
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
324
325
apiRouter.post("/researchMushroom.php", researchMushroomController);
325
326
apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
327
apiRouter.post("/reverseQuestProgress.php", reverseQuestProgressController);
326
328
apiRouter.post("/saveDialogue.php", saveDialogueController);
327
329
apiRouter.post("/saveLoadout.php", saveLoadoutController);
328
330
apiRouter.post("/saveSettings.php", saveSettingsController);
@@ -92,6 +92,30 @@ export const updateQuestStage = (
92
92
}
93
93
};
94
94
95
export const resetQuestKeyToStage = (
96
inventory: TInventoryDatabaseDocument,
97
{ KeyChain, ChainStage }: IKeyChainRequest
98
): void => {
99
const quest = inventory.QuestKeys.find(quest => quest.ItemType === KeyChain);
100
101
if (!quest) {
102
throw new Error(`Quest ${KeyChain} not found in QuestKeys`);
103
}
104
105
quest.Progress ??= [];
106
107
quest.Progress.splice(1 + ChainStage); // remove stages past the target
108
109
const questStage = quest.Progress[ChainStage];
110
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
111
if (questStage) {
112
const run = quest.Progress[0].c;
113
if (run >= 0) {
114
questStage.c = run - 1;
115
}
116
}
117
};
118
95
119
export const addQuestKey = (
96
120
inventory: TInventoryDatabaseDocument,
97
121
questKey: IQuestKeyDatabase