返回提交历史
Modified
src/models/inventoryModels/inventoryModel.ts
+1
-1
Modified
src/services/inventoryService.ts
+18
-10
Modified
src/services/questService.ts
+10
-3
XFEstudio/XFESpaceNinjaServer
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
代码差异
3 个文件
+29
-14
@@ -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,
@@ -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);
@@ -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) => {