XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

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
Sainan <sainan@calamity.inc>
提交于

代码差异

4 个文件 +25 -23
Modified src/controllers/api/updateQuestController.ts +2 -17
@@ -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) {
Modified src/controllers/custom/manageQuestsController.ts +1 -1
@@ -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": {
Modified src/services/missionInventoryUpdateService.ts +1 -1
@@ -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);
Modified src/services/questService.ts +21 -4
@@ -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 = (