103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import { IInventoryDatabaseDocument, IQuestKeyDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
|
|
import { IUpdateQuestRequest, IUpdateQuestResponse } from "@/src/types/questTypes";
|
|
import { addItem, getInventory } from "@/src/services/inventoryService";
|
|
import { logger } from "@/src/utils/logger";
|
|
import { ExportKeys } from "warframe-public-export-plus";
|
|
|
|
export const setActiveQuest = async (accountId: string, quest: string) => {
|
|
const inventory = await getInventory(accountId);
|
|
const questKey = inventory.QuestKeys.find(q => q.ItemType == quest);
|
|
if (questKey == null) inventory.QuestKeys.push({ ItemType: quest });
|
|
inventory.ActiveQuest = quest;
|
|
await inventory.save();
|
|
|
|
return {
|
|
inventoryChanges: {
|
|
QuestKey: [
|
|
{
|
|
ItemType: quest
|
|
}
|
|
],
|
|
Herses: [],
|
|
PremiumCreditsFree: 0,
|
|
PremiumCredits: 0,
|
|
RegularCredits: 0
|
|
}
|
|
};
|
|
};
|
|
|
|
export const updateQuestKeys = async (inventory: IInventoryDatabaseDocument, questKeys: IQuestKeyDatabase[]) => {
|
|
const questKeyIndex = inventory.QuestKeys.findIndex(questKey => questKey.ItemType === questKeys[0].ItemType);
|
|
|
|
inventory.QuestKeys[questKeyIndex] = questKeys[0];
|
|
|
|
if (questKeys[0].Completed) {
|
|
inventory.QuestKeys[questKeyIndex].CompletionDate = new Date();
|
|
}
|
|
|
|
await inventory.save();
|
|
};
|
|
|
|
export const updateQuest = async (accountId: string, updateQuest: IUpdateQuestRequest) => {
|
|
const inventory = await getInventory(accountId);
|
|
|
|
await updateQuestKeys(inventory, updateQuest.QuestKeys);
|
|
|
|
const result: IUpdateQuestResponse = {
|
|
MissionRewards: []
|
|
};
|
|
|
|
if (updateQuest.QuestKeys[0].Completed) {
|
|
const quest = ExportKeys[updateQuest.QuestKeys[0].ItemType];
|
|
if (quest.rewards != null) {
|
|
for (const reward of quest.rewards) {
|
|
switch (reward.rewardType) {
|
|
case "RT_STORE_ITEM":
|
|
await addItem(accountId, reward.itemType.replace("/Lotus/StoreItems/", "/Lotus/"), 1);
|
|
break;
|
|
case "RT_RECIPE":
|
|
await addItem(accountId, reward.itemType, 1);
|
|
break;
|
|
case "RT_CREDITS":
|
|
inventory.RegularCredits += reward.amount;
|
|
await inventory.save();
|
|
break;
|
|
}
|
|
// push MissionRewards
|
|
// result.MissionRewards.push({});
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
export const giveKeyChainTriggeredItems = async (accountId: string, keyChain: string, chainStage: number) => {
|
|
logger.debug("keyChain: " + keyChain + " chainStage: " + chainStage);
|
|
|
|
// TODO:rewards
|
|
const quest = ExportKeys[keyChain];
|
|
|
|
if (quest.chainStages) {
|
|
for (const chainStage of quest.chainStages) {
|
|
if (chainStage.itemsToGiveWhenTriggered.length > 0) {
|
|
let itemType = chainStage.itemsToGiveWhenTriggered[0];
|
|
if (itemType.indexOf("") > 0) {
|
|
itemType = itemType.replace("/Lotus/StoreItems/", "/Lotus/");
|
|
}
|
|
await addItem(accountId, itemType, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
export const giveKeyChainTriggeredMessage = async (accountId: string, keyChain: string, chainStage: number) => {
|
|
logger.debug("keyChain: " + keyChain + " chainStage: " + chainStage);
|
|
|
|
// TODO:message
|
|
|
|
return null;
|
|
};
|