fix: handle quest completion via missionInventoryUpdate #1140
@ -1,10 +1,8 @@
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { parseString } from "@/src/helpers/general";
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { updateQuestKey, IUpdateQuestRequest } from "@/src/services/questService";
 | 
			
		||||
import { getQuestCompletionItems } from "@/src/services/itemDataService";
 | 
			
		||||
import { addItems, getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
			
		||||
 | 
			
		||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
			
		||||
@ -22,20 +20,7 @@ export const updateQuestController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const updateQuestResponse: { CustomData?: string; InventoryChanges?: IInventoryChanges; MissionRewards: [] } = {
 | 
			
		||||
        MissionRewards: []
 | 
			
		||||
    };
 | 
			
		||||
    updateQuestKey(inventory, updateQuestRequest.QuestKeys);
 | 
			
		||||
 | 
			
		||||
    if (updateQuestRequest.QuestKeys[0].Completed) {
 | 
			
		||||
        logger.debug(`completed quest ${updateQuestRequest.QuestKeys[0].ItemType} `);
 | 
			
		||||
        const questKeyName = updateQuestRequest.QuestKeys[0].ItemType;
 | 
			
		||||
        const questCompletionItems = getQuestCompletionItems(questKeyName);
 | 
			
		||||
        logger.debug(`quest completion items`, questCompletionItems);
 | 
			
		||||
 | 
			
		||||
        if (questCompletionItems) {
 | 
			
		||||
            const inventoryChanges = await addItems(inventory, questCompletionItems);
 | 
			
		||||
            updateQuestResponse.InventoryChanges = inventoryChanges;
 | 
			
		||||
        }
 | 
			
		||||
        inventory.ActiveQuest = "";
 | 
			
		||||
    }
 | 
			
		||||
    updateQuestResponse.InventoryChanges = await updateQuestKey(inventory, updateQuestRequest.QuestKeys);
 | 
			
		||||
 | 
			
		||||
    //TODO: might need to parse the custom data and add the associated items to inventory
 | 
			
		||||
    if (updateQuestRequest.QuestKeys[0].CustomData) {
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    switch (operation) {
 | 
			
		||||
        case "updateKey": {
 | 
			
		||||
            //TODO: if this is intended to be used, one needs to add a updateQuestKeyMultiple, the game does never intend to do it, so it errors for multiple keys.
 | 
			
		||||
            updateQuestKey(inventory, questKeyUpdate);
 | 
			
		||||
            await updateQuestKey(inventory, questKeyUpdate);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case "unlockAll": {
 | 
			
		||||
 | 
			
		||||
@ -95,7 +95,7 @@ export const addMissionInventoryUpdates = async (
 | 
			
		||||
                inventory.RegularCredits += value;
 | 
			
		||||
                break;
 | 
			
		||||
            case "QuestKeys":
 | 
			
		||||
                updateQuestKey(inventory, value);
 | 
			
		||||
                await updateQuestKey(inventory, value);
 | 
			
		||||
                break;
 | 
			
		||||
            case "AffiliationChanges":
 | 
			
		||||
                updateSyndicate(inventory, value);
 | 
			
		||||
 | 
			
		||||
@ -2,8 +2,13 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredIte
 | 
			
		||||
import { isEmptyObject } from "@/src/helpers/general";
 | 
			
		||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
			
		||||
import { createMessage } from "@/src/services/inboxService";
 | 
			
		||||
import { addItem, addKeyChainItems } from "@/src/services/inventoryService";
 | 
			
		||||
import { fromStoreItem, getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService";
 | 
			
		||||
import { addItem, addItems, addKeyChainItems } from "@/src/services/inventoryService";
 | 
			
		||||
import {
 | 
			
		||||
    fromStoreItem,
 | 
			
		||||
    getKeyChainMessage,
 | 
			
		||||
    getLevelKeyRewards,
 | 
			
		||||
    getQuestCompletionItems
 | 
			
		||||
} from "@/src/services/itemDataService";
 | 
			
		||||
import {
 | 
			
		||||
    IInventoryDatabase,
 | 
			
		||||
    IQuestKeyClient,
 | 
			
		||||
@ -25,10 +30,10 @@ export interface IUpdateQuestRequest {
 | 
			
		||||
    DoQuestReward: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const updateQuestKey = (
 | 
			
		||||
export const updateQuestKey = async (
 | 
			
		||||
    inventory: HydratedDocument<IInventoryDatabase>,
 | 
			
		||||
    questKeyUpdate: IUpdateQuestRequest["QuestKeys"]
 | 
			
		||||
): void => {
 | 
			
		||||
): Promise<IInventoryChanges> => {
 | 
			
		||||
    if (questKeyUpdate.length > 1) {
 | 
			
		||||
        logger.error(`more than 1 quest key not supported`);
 | 
			
		||||
        throw new Error("more than 1 quest key not supported");
 | 
			
		||||
@ -42,9 +47,21 @@ export const updateQuestKey = (
 | 
			
		||||
 | 
			
		||||
    inventory.QuestKeys[questKeyIndex] = questKeyUpdate[0];
 | 
			
		||||
 | 
			
		||||
    let inventoryChanges: IInventoryChanges = {};
 | 
			
		||||
    if (questKeyUpdate[0].Completed) {
 | 
			
		||||
        inventory.QuestKeys[questKeyIndex].CompletionDate = new Date();
 | 
			
		||||
 | 
			
		||||
        logger.debug(`completed quest ${questKeyUpdate[0].ItemType} `);
 | 
			
		||||
        const questKeyName = questKeyUpdate[0].ItemType;
 | 
			
		||||
        const questCompletionItems = getQuestCompletionItems(questKeyName);
 | 
			
		||||
        logger.debug(`quest completion items`, questCompletionItems);
 | 
			
		||||
 | 
			
		||||
        if (questCompletionItems) {
 | 
			
		||||
            inventoryChanges = await addItems(inventory as TInventoryDatabaseDocument, questCompletionItems);
 | 
			
		||||
        }
 | 
			
		||||
        inventory.ActiveQuest = "";
 | 
			
		||||
    }
 | 
			
		||||
    return inventoryChanges;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const updateQuestStage = (
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user