diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 0288cf42..af50028f 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 3721f54d..92fc007d 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 b23d0e5d..e9899721 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) => {