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: ensure quest progress exists (#1000)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1000 Co-authored-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com> Co-committed-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>

9de57668
OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
提交于

代码差异

3 个文件 +29 -14
Modified src/models/inventoryModels/inventoryModel.ts +1 -1
@@ -532,7 +532,7 @@ const questProgressSchema = new Schema<IQuestStage>(
532 532
533 533 const questKeysSchema = new Schema<IQuestKeyDatabase>(
534 534 {
535 Progress: { type: [questProgressSchema], default: undefined },
535 Progress: { type: [questProgressSchema], default: [] },
536 536 unlock: Boolean,
537 537 Completed: Boolean,
538 538 CustomData: String,
Modified src/services/inventoryService.ts +18 -10
@@ -58,7 +58,7 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredIte
58 58 import { toOid } from "../helpers/inventoryHelpers";
59 59 import { generateRewardSeed } from "@/src/controllers/api/getNewRewardSeedController";
60 60 import { addStartingGear } from "@/src/controllers/api/giveStartingGearController";
61 import { completeQuest } from "@/src/services/questService";
61 import { addQuestKey, completeQuest } from "@/src/services/questService";
62 62
63 63 export const createInventory = async (
64 64 accountOwnerId: Types.ObjectId,
@@ -327,16 +327,24 @@ export const addItem = async (
327 327 }
328 328 if (typeName in ExportKeys) {
329 329 // Note: "/Lotus/Types/Keys/" contains some EmailItems
330 inventory.QuestKeys.push({ ItemType: typeName });
331 return {
332 InventoryChanges: {
333 QuestKeys: [
334 {
335 ItemType: typeName
336 }
337 ]
330 const key = ExportKeys[typeName];
331
332 if (key.chainStages) {
333 const key = addQuestKey(inventory, { ItemType: typeName });
334 if (key) {
335 return { InventoryChanges: { QuestKeys: [key] } };
338 336 }
339 };
337 } else {
338 const key = { ItemType: typeName, ItemCount: quantity };
339
340 const index = inventory.LevelKeys.findIndex(levelKey => levelKey.ItemType == typeName);
341 if (index) {
342 inventory.LevelKeys[index].ItemCount += quantity;
343 } else {
344 inventory.LevelKeys.push(key);
345 }
346 return { InventoryChanges: { LevelKeys: [key] } };
347 }
340 348 }
341 349 if (typeName in ExportDrones) {
342 350 const inventoryChanges = addDrone(inventory, typeName);
Modified src/services/questService.ts +10 -3
@@ -5,7 +5,12 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento
5 5 import { createMessage } from "@/src/services/inboxService";
6 6 import { addItem, addKeyChainItems } from "@/src/services/inventoryService";
7 7 import { getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService";
8 import { IInventoryDatabase, IQuestKeyDatabase, IQuestStage } from "@/src/types/inventoryTypes/inventoryTypes";
8 import {
9 IInventoryDatabase,
10 IQuestKeyClient,
11 IQuestKeyDatabase,
12 IQuestStage
13 } from "@/src/types/inventoryTypes/inventoryTypes";
9 14 import { logger } from "@/src/utils/logger";
10 15 import { HydratedDocument } from "mongoose";
11 16 import { ExportKeys } from "warframe-public-export-plus";
@@ -69,12 +74,14 @@ export const updateQuestStage = (
69 74 Object.assign(questStage, questStageUpdate);
70 75 };
71 76
72 export const addQuestKey = (inventory: TInventoryDatabaseDocument, questKey: IQuestKeyDatabase): void => {
77 export const addQuestKey = (inventory: TInventoryDatabaseDocument, questKey: IQuestKeyDatabase) => {
73 78 if (inventory.QuestKeys.some(q => q.ItemType === questKey.ItemType)) {
74 79 logger.error(`quest key ${questKey.ItemType} already exists`);
75 80 return;
76 81 }
77 inventory.QuestKeys.push(questKey);
82 const index = inventory.QuestKeys.push(questKey);
83
84 return inventory.QuestKeys[index - 1].toJSON<IQuestKeyClient>();
78 85 };
79 86
80 87 export const completeQuest = async (inventory: TInventoryDatabaseDocument, questKey: string) => {