feat: send hex quest email when The Lotus Eaters and The Duviri Paradox are complete #1761

Merged
Sainan merged 2 commits from hex-quest into main 2025-04-21 10:44:01 -07:00

View File

@ -191,6 +191,25 @@ const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined =>
return items; return items;
}; };
// Checks that `questKey` is in `requirements`, and if so, that all other quests in `requirements` are also already completed.
const doesQuestCompletionFinishSet = (
inventory: TInventoryDatabaseDocument,
questKey: string,
requirements: string[]
): boolean => {
let holds = false;
for (const requirement of requirements) {
if (questKey == requirement) {
holds = true;
} else {
if (!inventory.QuestKeys.find(x => x.ItemType == requirement)?.Completed) {
return false;
}
}
}
return holds;
};
const handleQuestCompletion = async ( const handleQuestCompletion = async (
inventory: TInventoryDatabaseDocument, inventory: TInventoryDatabaseDocument,
questKey: string, questKey: string,
@ -218,12 +237,10 @@ const handleQuestCompletion = async (
// Whispers in the Walls is unlocked once The New + Heart of Deimos are completed. // Whispers in the Walls is unlocked once The New + Heart of Deimos are completed.
if ( if (
(questKey == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain" && doesQuestCompletionFinishSet(inventory, questKey, [
inventory.QuestKeys.find( "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain",
x => x.ItemType == "/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain" "/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain"
)?.Completed) || ])
(questKey == "/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain" &&
inventory.QuestKeys.find(x => x.ItemType == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain")?.Completed)
) { ) {
await createMessage(inventory.accountOwnerId, [ await createMessage(inventory.accountOwnerId, [
{ {
@ -237,6 +254,25 @@ const handleQuestCompletion = async (
]); ]);
} }
// The Hex (Quest) is unlocked once The Lotus Eaters + The Duviri Paradox are completed.
if (
doesQuestCompletionFinishSet(inventory, questKey, [
"/Lotus/Types/Keys/1999PrologueQuest/1999PrologueQuestKeyChain",
"/Lotus/Types/Keys/DuviriQuest/DuviriQuestKeyChain"
])
) {
await createMessage(inventory.accountOwnerId, [
{
sndr: "/Lotus/Language/NewWar/P3M1ChooseMara",
msg: "/Lotus/Language/1999Quest/1999QuestInboxBody",
att: ["/Lotus/Types/Keys/1999Quest/1999QuestKeyChain"],
sub: "/Lotus/Language/1999Quest/1999QuestInboxSubject",
icon: "/Lotus/Interface/Icons/Npcs/Operator.png",
highPriority: true
}
]);
}
const questCompletionItems = getQuestCompletionItems(questKey); const questCompletionItems = getQuestCompletionItems(questKey);
logger.debug(`quest completion items`, questCompletionItems); logger.debug(`quest completion items`, questCompletionItems);
if (questCompletionItems) { if (questCompletionItems) {