fix: ensure quest progress exists (#1000)

Reviewed-on: OpenWF/SpaceNinjaServer#1000
Co-authored-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
This commit is contained in:
OrdisPrime 2025-02-24 06:14:47 -08:00 committed by OrdisPrime
parent ebb28d56d5
commit 9de57668ab
3 changed files with 29 additions and 14 deletions

View File

@ -532,7 +532,7 @@ const questProgressSchema = new Schema<IQuestStage>(
const questKeysSchema = new Schema<IQuestKeyDatabase>( const questKeysSchema = new Schema<IQuestKeyDatabase>(
{ {
Progress: { type: [questProgressSchema], default: undefined }, Progress: { type: [questProgressSchema], default: [] },
unlock: Boolean, unlock: Boolean,
Completed: Boolean, Completed: Boolean,
CustomData: String, CustomData: String,

View File

@ -58,7 +58,7 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredIte
import { toOid } from "../helpers/inventoryHelpers"; import { toOid } from "../helpers/inventoryHelpers";
import { generateRewardSeed } from "@/src/controllers/api/getNewRewardSeedController"; import { generateRewardSeed } from "@/src/controllers/api/getNewRewardSeedController";
import { addStartingGear } from "@/src/controllers/api/giveStartingGearController"; import { addStartingGear } from "@/src/controllers/api/giveStartingGearController";
import { completeQuest } from "@/src/services/questService"; import { addQuestKey, completeQuest } from "@/src/services/questService";
export const createInventory = async ( export const createInventory = async (
accountOwnerId: Types.ObjectId, accountOwnerId: Types.ObjectId,
@ -327,16 +327,24 @@ export const addItem = async (
} }
if (typeName in ExportKeys) { if (typeName in ExportKeys) {
// Note: "/Lotus/Types/Keys/" contains some EmailItems // Note: "/Lotus/Types/Keys/" contains some EmailItems
inventory.QuestKeys.push({ ItemType: typeName }); const key = ExportKeys[typeName];
return {
InventoryChanges: { if (key.chainStages) {
QuestKeys: [ const key = addQuestKey(inventory, { ItemType: typeName });
{ if (key) {
ItemType: typeName 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) { if (typeName in ExportDrones) {
const inventoryChanges = addDrone(inventory, typeName); const inventoryChanges = addDrone(inventory, typeName);

View File

@ -5,7 +5,12 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento
import { createMessage } from "@/src/services/inboxService"; import { createMessage } from "@/src/services/inboxService";
import { addItem, addKeyChainItems } from "@/src/services/inventoryService"; import { addItem, addKeyChainItems } from "@/src/services/inventoryService";
import { getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService"; 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 { logger } from "@/src/utils/logger";
import { HydratedDocument } from "mongoose"; import { HydratedDocument } from "mongoose";
import { ExportKeys } from "warframe-public-export-plus"; import { ExportKeys } from "warframe-public-export-plus";
@ -69,12 +74,14 @@ export const updateQuestStage = (
Object.assign(questStage, questStageUpdate); 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)) { if (inventory.QuestKeys.some(q => q.ItemType === questKey.ItemType)) {
logger.error(`quest key ${questKey.ItemType} already exists`); logger.error(`quest key ${questKey.ItemType} already exists`);
return; return;
} }
inventory.QuestKeys.push(questKey); const index = inventory.QuestKeys.push(questKey);
return inventory.QuestKeys[index - 1].toJSON<IQuestKeyClient>();
}; };
export const completeQuest = async (inventory: TInventoryDatabaseDocument, questKey: string) => { export const completeQuest = async (inventory: TInventoryDatabaseDocument, questKey: string) => {