fix: ensure quest progress exists #1000
@ -509,7 +509,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,
|
||||||
|
@ -56,7 +56,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,
|
||||||
@ -325,16 +325,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] } };
|
||||||
}
|
}
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path-based duck typing
|
// Path-based duck typing
|
||||||
|
@ -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) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user