From 9de57668ab961eb2c0646b1a44ff6cba731487dd Mon Sep 17 00:00:00 2001 From: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com> Date: Mon, 24 Feb 2025 06:14:47 -0800 Subject: [PATCH] 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> --- src/models/inventoryModels/inventoryModel.ts | 2 +- src/services/inventoryService.ts | 28 +++++++++++++------- src/services/questService.ts | 13 ++++++--- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 0288cf426..af50028ff 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -532,7 +532,7 @@ const questProgressSchema = new Schema( const questKeysSchema = new Schema( { - Progress: { type: [questProgressSchema], default: undefined }, + Progress: { type: [questProgressSchema], default: [] }, unlock: Boolean, Completed: Boolean, CustomData: String, diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 3721f54de..92fc007df 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -58,7 +58,7 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredIte import { toOid } from "../helpers/inventoryHelpers"; import { generateRewardSeed } from "@/src/controllers/api/getNewRewardSeedController"; import { addStartingGear } from "@/src/controllers/api/giveStartingGearController"; -import { completeQuest } from "@/src/services/questService"; +import { addQuestKey, completeQuest } from "@/src/services/questService"; export const createInventory = async ( accountOwnerId: Types.ObjectId, @@ -327,16 +327,24 @@ export const addItem = async ( } if (typeName in ExportKeys) { // Note: "/Lotus/Types/Keys/" contains some EmailItems - inventory.QuestKeys.push({ ItemType: typeName }); - return { - InventoryChanges: { - QuestKeys: [ - { - ItemType: typeName - } - ] + const key = ExportKeys[typeName]; + + if (key.chainStages) { + const key = addQuestKey(inventory, { ItemType: typeName }); + if (key) { + return { InventoryChanges: { QuestKeys: [key] } }; } - }; + } else { + const key = { ItemType: typeName, ItemCount: quantity }; + + const index = inventory.LevelKeys.findIndex(levelKey => levelKey.ItemType == typeName); + if (index) { + inventory.LevelKeys[index].ItemCount += quantity; + } else { + inventory.LevelKeys.push(key); + } + return { InventoryChanges: { LevelKeys: [key] } }; + } } if (typeName in ExportDrones) { const inventoryChanges = addDrone(inventory, typeName); diff --git a/src/services/questService.ts b/src/services/questService.ts index b23d0e5d0..e9899721d 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -5,7 +5,12 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento import { createMessage } from "@/src/services/inboxService"; import { addItem, addKeyChainItems } from "@/src/services/inventoryService"; import { getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService"; -import { IInventoryDatabase, IQuestKeyDatabase, IQuestStage } from "@/src/types/inventoryTypes/inventoryTypes"; +import { + IInventoryDatabase, + IQuestKeyClient, + IQuestKeyDatabase, + IQuestStage +} from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { HydratedDocument } from "mongoose"; import { ExportKeys } from "warframe-public-export-plus"; @@ -69,12 +74,14 @@ export const updateQuestStage = ( Object.assign(questStage, questStageUpdate); }; -export const addQuestKey = (inventory: TInventoryDatabaseDocument, questKey: IQuestKeyDatabase): void => { +export const addQuestKey = (inventory: TInventoryDatabaseDocument, questKey: IQuestKeyDatabase) => { if (inventory.QuestKeys.some(q => q.ItemType === questKey.ItemType)) { logger.error(`quest key ${questKey.ItemType} already exists`); return; } - inventory.QuestKeys.push(questKey); + const index = inventory.QuestKeys.push(questKey); + + return inventory.QuestKeys[index - 1].toJSON(); }; export const completeQuest = async (inventory: TInventoryDatabaseDocument, questKey: string) => {