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

Close #1759

Reviewed-on: OpenWF/SpaceNinjaServer#1761
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
Sainan 2025-04-21 10:44:01 -07:00 committed by Sainan
parent bdf0ac722b
commit 72b28f1d75

View File

@ -191,6 +191,25 @@ const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined =>
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 (
inventory: TInventoryDatabaseDocument,
questKey: string,
@ -218,12 +237,10 @@ const handleQuestCompletion = async (
// Whispers in the Walls is unlocked once The New + Heart of Deimos are completed.
if (
(questKey == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain" &&
inventory.QuestKeys.find(
x => x.ItemType == "/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain"
)?.Completed) ||
(questKey == "/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain" &&
inventory.QuestKeys.find(x => x.ItemType == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain")?.Completed)
doesQuestCompletionFinishSet(inventory, questKey, [
"/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain",
"/Lotus/Types/Keys/InfestedMicroplanetQuest/InfestedMicroplanetQuestKeyChain"
])
) {
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);
logger.debug(`quest completion items`, questCompletionItems);
if (questCompletionItems) {