返回提交历史
Modified
src/controllers/api/updateQuestController.ts
+2
-17
Modified
src/controllers/custom/manageQuestsController.ts
+1
-1
Modified
src/services/missionInventoryUpdateService.ts
+1
-1
Modified
src/services/questService.ts
+21
-4
XFEstudio/XFESpaceNinjaServer
fix: handle quest completion via missionInventoryUpdate (#1140)
Partial fix for #1126 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1140 Co-authored-by: Sainan <sainan@calamity.inc> Co-committed-by: Sainan <sainan@calamity.inc>
b553097f
代码差异
4 个文件
+25
-23
@@ -1,10 +1,8 @@
1
1
import { RequestHandler } from "express";
2
2
import { parseString } from "@/src/helpers/general";
3
import { logger } from "@/src/utils/logger";
4
3
import { getJSONfromString } from "@/src/helpers/stringHelpers";
5
4
import { updateQuestKey, IUpdateQuestRequest } from "@/src/services/questService";
6
import { getQuestCompletionItems } from "@/src/services/itemDataService";
7
import { addItems, getInventory } from "@/src/services/inventoryService";
5
import { getInventory } from "@/src/services/inventoryService";
8
6
import { IInventoryChanges } from "@/src/types/purchaseTypes";
9
7
10
8
// eslint-disable-next-line @typescript-eslint/no-misused-promises
@@ -22,20 +20,7 @@ export const updateQuestController: RequestHandler = async (req, res) => {
22
20
const updateQuestResponse: { CustomData?: string; InventoryChanges?: IInventoryChanges; MissionRewards: [] } = {
23
21
MissionRewards: []
24
22
};
25
updateQuestKey(inventory, updateQuestRequest.QuestKeys);
26
27
if (updateQuestRequest.QuestKeys[0].Completed) {
28
logger.debug(`completed quest ${updateQuestRequest.QuestKeys[0].ItemType} `);
29
const questKeyName = updateQuestRequest.QuestKeys[0].ItemType;
30
const questCompletionItems = getQuestCompletionItems(questKeyName);
31
logger.debug(`quest completion items`, questCompletionItems);
32
33
if (questCompletionItems) {
34
const inventoryChanges = await addItems(inventory, questCompletionItems);
35
updateQuestResponse.InventoryChanges = inventoryChanges;
36
}
37
inventory.ActiveQuest = "";
38
}
23
updateQuestResponse.InventoryChanges = await updateQuestKey(inventory, updateQuestRequest.QuestKeys);
39
24
40
25
//TODO: might need to parse the custom data and add the associated items to inventory
41
26
if (updateQuestRequest.QuestKeys[0].CustomData) {
@@ -28,7 +28,7 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
28
28
switch (operation) {
29
29
case "updateKey": {
30
30
//TODO: if this is intended to be used, one needs to add a updateQuestKeyMultiple, the game does never intend to do it, so it errors for multiple keys.
31
updateQuestKey(inventory, questKeyUpdate);
31
await updateQuestKey(inventory, questKeyUpdate);
32
32
break;
33
33
}
34
34
case "unlockAll": {
@@ -95,7 +95,7 @@ export const addMissionInventoryUpdates = async (
95
95
inventory.RegularCredits += value;
96
96
break;
97
97
case "QuestKeys":
98
updateQuestKey(inventory, value);
98
await updateQuestKey(inventory, value);
99
99
break;
100
100
case "AffiliationChanges":
101
101
updateSyndicate(inventory, value);
@@ -2,8 +2,13 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredIte
2
2
import { isEmptyObject } from "@/src/helpers/general";
3
3
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
4
4
import { createMessage } from "@/src/services/inboxService";
5
import { addItem, addKeyChainItems } from "@/src/services/inventoryService";
6
import { fromStoreItem, getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService";
5
import { addItem, addItems, addKeyChainItems } from "@/src/services/inventoryService";
6
import {
7
fromStoreItem,
8
getKeyChainMessage,
9
getLevelKeyRewards,
10
getQuestCompletionItems
11
} from "@/src/services/itemDataService";
7
12
import {
8
13
IInventoryDatabase,
9
14
IQuestKeyClient,
@@ -25,10 +30,10 @@ export interface IUpdateQuestRequest {
25
30
DoQuestReward: boolean;
26
31
}
27
32
28
export const updateQuestKey = (
33
export const updateQuestKey = async (
29
34
inventory: HydratedDocument<IInventoryDatabase>,
30
35
questKeyUpdate: IUpdateQuestRequest["QuestKeys"]
31
): void => {
36
): Promise<IInventoryChanges> => {
32
37
if (questKeyUpdate.length > 1) {
33
38
logger.error(`more than 1 quest key not supported`);
34
39
throw new Error("more than 1 quest key not supported");
@@ -42,9 +47,21 @@ export const updateQuestKey = (
42
47
43
48
inventory.QuestKeys[questKeyIndex] = questKeyUpdate[0];
44
49
50
let inventoryChanges: IInventoryChanges = {};
45
51
if (questKeyUpdate[0].Completed) {
46
52
inventory.QuestKeys[questKeyIndex].CompletionDate = new Date();
53
54
logger.debug(`completed quest ${questKeyUpdate[0].ItemType} `);
55
const questKeyName = questKeyUpdate[0].ItemType;
56
const questCompletionItems = getQuestCompletionItems(questKeyName);
57
logger.debug(`quest completion items`, questCompletionItems);
58
59
if (questCompletionItems) {
60
inventoryChanges = await addItems(inventory as TInventoryDatabaseDocument, questCompletionItems);
61
}
62
inventory.ActiveQuest = "";
47
63
}
64
return inventoryChanges;
48
65
};
49
66
50
67
export const updateQuestStage = (