forked from OpenWF/SpaceNinjaServer
		
	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:
		
							parent
							
								
									ebb28d56d5
								
							
						
					
					
						commit
						9de57668ab
					
				@ -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,
 | 
				
			||||||
 | 
				
			|||||||
@ -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);
 | 
				
			||||||
 | 
				
			|||||||
@ -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