From 10d0366934a759a3e82a256edca50d15bead4c6c Mon Sep 17 00:00:00 2001 From: KnowOne Date: Tue, 25 Feb 2025 15:20:23 -0600 Subject: [PATCH] Quest Messenger From Beyond --- scripts/globals/quests.lua | 2 +- .../quests/sandoria/Messenger_From_Beyond.lua | 83 +++++++++++++++++++ .../Northern_San_dOria/DefaultActions.lua | 1 + .../Northern_San_dOria/npcs/Narcheral.lua | 41 +-------- .../zones/Valkurm_Dunes/DefaultActions.lua | 1 + scripts/zones/Valkurm_Dunes/IDs.lua | 2 + scripts/zones/Valkurm_Dunes/Zone.lua | 15 ++-- scripts/zones/Valkurm_Dunes/npcs/qm2.lua | 24 ------ 8 files changed, 97 insertions(+), 72 deletions(-) create mode 100644 scripts/quests/sandoria/Messenger_From_Beyond.lua delete mode 100644 scripts/zones/Valkurm_Dunes/npcs/qm2.lua diff --git a/scripts/globals/quests.lua b/scripts/globals/quests.lua index e0542692e26..6ee6c4f9ee2 100644 --- a/scripts/globals/quests.lua +++ b/scripts/globals/quests.lua @@ -82,7 +82,7 @@ xi.quest.id = THE_CRIMSON_TRIAL = 84, -- ± Converted ENVELOPED_IN_DARKNESS = 85, -- ± Converted PEACE_FOR_THE_SPIRIT = 86, -- ± - MESSENGER_FROM_BEYOND = 87, -- ± + MESSENGER_FROM_BEYOND = 87, -- ± Converted PRELUDE_OF_BLACK_AND_WHITE = 88, -- ± PIEUJES_DECISION = 89, -- + SHARPENING_THE_SWORD = 90, -- ± diff --git a/scripts/quests/sandoria/Messenger_From_Beyond.lua b/scripts/quests/sandoria/Messenger_From_Beyond.lua new file mode 100644 index 00000000000..a556ebdd9f2 --- /dev/null +++ b/scripts/quests/sandoria/Messenger_From_Beyond.lua @@ -0,0 +1,83 @@ +----------------------------------- +-- Messenger From Beyond +----------------------------------- +-- Log ID: 0, Quest ID: 87 +----------------------------------- +-- Narcheral : !pos 129 -11 126 231 +-- qm2 : !pos -716 -10 66 103 +----------------------------------- +local ID = zones[xi.zone.VALKURM_DUNES] + +local quest = Quest:new(xi.questLog.SANDORIA, xi.quest.id.sandoria.MESSENGER_FROM_BEYOND) + +quest.reward = +{ + item = xi.item.BLESSED_HAMMER, + fame = 20, +} + +quest.sections = +{ + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_AVAILABLE and + player:getMainLvl() >= xi.settings.main.AF1_QUEST_LEVEL and + player:getMainJob() == xi.job.WHM + end, + + [xi.zone.NORTHERN_SAN_DORIA] = + { + ['Narcheral'] = quest:progressEvent(689), + + onEventFinish = + { + [689] = function(player, csid, option, npc) + quest:begin(player) + end, + }, + }, + }, + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_ACCEPTED + end, + + [xi.zone.VALKURM_DUNES] = + { + ['qm2'] = + { + onTrigger = function(player, npc) + if + not player:hasItem(xi.item.TAVNAZIA_PASS) and + npcUtil.popFromQM(player, npc, ID.mob.MARCHELUTE, { hide = 0 }) + then + return quest:messageSpecial(ID.text.FOUL_PRESENCE) + end + end, + }, + }, + + [xi.zone.NORTHERN_SAN_DORIA] = + { + ['Narcheral'] = + { + onTrade = function(player, npc, trade) + if npcUtil.tradeHasExactly(trade, xi.item.TAVNAZIA_PASS) then + return quest:progressEvent(690) + end + end, + }, + + onEventFinish = + { + [690] = function(player, csid, option, npc) + if quest:complete(player) then + player:confirmTrade() + end + end, + }, + }, + }, +} + +return quest diff --git a/scripts/zones/Northern_San_dOria/DefaultActions.lua b/scripts/zones/Northern_San_dOria/DefaultActions.lua index fc37e46e7d1..ef3d04b5014 100644 --- a/scripts/zones/Northern_San_dOria/DefaultActions.lua +++ b/scripts/zones/Northern_San_dOria/DefaultActions.lua @@ -43,6 +43,7 @@ return { ['Miageau'] = { event = 517 }, ['Morjean'] = { event = 601 }, ['Morunaude'] = { event = 634 }, + ['Narcheral'] = { event = 688 }, ['Narsaude'] = { event = 668 }, ['Nouveil'] = { event = 574 }, ['Odyssean_Passage'] = { messageSpecial = ID.text.NOTHING_HAPPENS }, diff --git a/scripts/zones/Northern_San_dOria/npcs/Narcheral.lua b/scripts/zones/Northern_San_dOria/npcs/Narcheral.lua index 0f508c36d9e..fbaf10da1b6 100644 --- a/scripts/zones/Northern_San_dOria/npcs/Narcheral.lua +++ b/scripts/zones/Northern_San_dOria/npcs/Narcheral.lua @@ -10,14 +10,7 @@ local ID = zones[xi.zone.NORTHERN_SAN_DORIA] local entity = {} entity.onTrade = function(player, npc, trade) - if player:getQuestStatus(xi.questLog.SANDORIA, xi.quest.id.sandoria.MESSENGER_FROM_BEYOND) == xi.questStatus.QUEST_ACCEPTED then - if - trade:hasItemQty(xi.item.TAVNAZIA_PASS, 1) and - trade:getItemCount() == 1 - then - player:startEvent(690) -- Finish quest "Messenger from Beyond" - end - elseif player:getQuestStatus(xi.questLog.SANDORIA, xi.quest.id.sandoria.PRELUDE_OF_BLACK_AND_WHITE) == xi.questStatus.QUEST_ACCEPTED then + if player:getQuestStatus(xi.questLog.SANDORIA, xi.quest.id.sandoria.PRELUDE_OF_BLACK_AND_WHITE) == xi.questStatus.QUEST_ACCEPTED then if trade:hasItemQty(xi.item.CANTEEN_OF_YAGUDO_HOLY_WATER, 1) and trade:hasItemQty(xi.item.MOCCASINS, 1) and @@ -36,38 +29,8 @@ entity.onTrade = function(player, npc, trade) end end -entity.onTrigger = function(player, npc) - local messengerFromBeyond = player:getQuestStatus(xi.questLog.SANDORIA, xi.quest.id.sandoria.MESSENGER_FROM_BEYOND) - - -- Checking levels and jobs for af quest - local mLvl = player:getMainLvl() - local mJob = player:getMainJob() - - if - messengerFromBeyond == xi.questStatus.QUEST_AVAILABLE and - mJob == xi.job.WHM and - mLvl >= xi.settings.main.AF1_QUEST_LEVEL - then - player:startEvent(689) -- Start quest "Messenger from Beyond" - else - player:startEvent(688) -- Standard dialog - end -end - entity.onEventFinish = function(player, csid, option, npc) - if csid == 689 then - player:addQuest(xi.questLog.SANDORIA, xi.quest.id.sandoria.MESSENGER_FROM_BEYOND) - elseif csid == 690 then - if player:getFreeSlotsCount() == 0 then - player:messageSpecial(ID.text.ITEM_CANNOT_BE_OBTAINED, xi.item.BLESSED_HAMMER) - else - player:addItem(xi.item.BLESSED_HAMMER) - player:messageSpecial(ID.text.ITEM_OBTAINED, xi.item.BLESSED_HAMMER) -- Blessed Hammer - player:tradeComplete() - player:addFame(xi.fameArea.SANDORIA, 20) - player:completeQuest(xi.questLog.SANDORIA, xi.quest.id.sandoria.MESSENGER_FROM_BEYOND) - end - elseif csid == 691 then + if csid == 691 then if player:getFreeSlotsCount() == 0 then player:messageSpecial(ID.text.ITEM_CANNOT_BE_OBTAINED, xi.item.HEALERS_DUCKBILLS) -- Healer's Duckbills else diff --git a/scripts/zones/Valkurm_Dunes/DefaultActions.lua b/scripts/zones/Valkurm_Dunes/DefaultActions.lua index c97d06a328f..7c5b97f5d13 100644 --- a/scripts/zones/Valkurm_Dunes/DefaultActions.lua +++ b/scripts/zones/Valkurm_Dunes/DefaultActions.lua @@ -2,6 +2,7 @@ local ID = zones[xi.zone.VALKURM_DUNES] return { ['Beastmens_Banner'] = { messageSpecial = ID.text.BEASTMEN_BANNER }, + ['qm2'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, ['qm3'] = { messageSpecial = ID.text.YOU_SENSE_AN_EVIL_PRESENCE }, ['qm4'] = { messageSpecial = ID.text.MONSTERS_KILLED_ADVENTURERS }, ['Signpost1'] = { messageSpecial = ID.text.SIGNPOST1 }, diff --git a/scripts/zones/Valkurm_Dunes/IDs.lua b/scripts/zones/Valkurm_Dunes/IDs.lua index 60605ab8f3a..d8ab5f3bb61 100644 --- a/scripts/zones/Valkurm_Dunes/IDs.lua +++ b/scripts/zones/Valkurm_Dunes/IDs.lua @@ -33,6 +33,7 @@ zones[xi.zone.VALKURM_DUNES] = SIGNPOST2 = 7377, -- Northeast: La Theine Plateau Southeast: Konschtat Highlands West: Selbina SIGNPOST1 = 7378, -- Northeast: La Theine Plateau Southeast: Konschtat Highlands Southwest: Selbina CONQUEST = 7388, -- You've earned conquest points! + FOUL_PRESENCE = 7722, -- You sense a foul presence. YOU_SENSE_AN_EVIL_PRESENCE = 7732, -- You sense an evil presence... WHAT_DO_YOU_THINK = 7734, -- What do you think you are doing!? AN_EMPTY_LIGHT_SWIRLS = 7766, -- An empty light swirls about the cave, eating away at the surroundings... @@ -63,6 +64,7 @@ zones[xi.zone.VALKURM_DUNES] = { SUNSAND_QM = GetFirstID('qm1'), OVERSEER_BASE = GetFirstID('Quanteilleron_RK'), + WHM_AF1_QM = GetFirstID('qm2') }, } diff --git a/scripts/zones/Valkurm_Dunes/Zone.lua b/scripts/zones/Valkurm_Dunes/Zone.lua index afa0d3f576f..3753a9b31f9 100644 --- a/scripts/zones/Valkurm_Dunes/Zone.lua +++ b/scripts/zones/Valkurm_Dunes/Zone.lua @@ -12,11 +12,10 @@ zoneObject.onInitialize = function(zone) xi.conquest.setRegionalConquestOverseers(zone:getRegionID()) xi.mogTablet.onZoneInitialize(zone) - local results = zone:queryEntitiesByName('qm2') - if results ~= nil and results[1] ~= nil then - local qm2 = results[1] - - if VanadielHour() < 5 or VanadielHour() >= 18 then + local qm2 = GetNPCByID(ID.npc.WHM_AF1_QM) + if qm2 then + local time = VanadielHour() + if time < 5 or time >= 18 then qm2:setStatus(xi.status.NORMAL) else qm2:setStatus(xi.status.DISAPPEAR) @@ -72,9 +71,9 @@ zoneObject.onEventFinish = function(player, csid, option, npc) end zoneObject.onGameHour = function(zone) - local results = zone:queryEntitiesByName('qm2') - if results ~= nil and results[1] ~= nil then - local qm2 = results[1] + local qm2 = GetNPCByID(ID.npc.WHM_AF1_QM) + + if qm2 then if VanadielHour() == 5 then qm2:setStatus(xi.status.DISAPPEAR) end diff --git a/scripts/zones/Valkurm_Dunes/npcs/qm2.lua b/scripts/zones/Valkurm_Dunes/npcs/qm2.lua deleted file mode 100644 index 076ce63a719..00000000000 --- a/scripts/zones/Valkurm_Dunes/npcs/qm2.lua +++ /dev/null @@ -1,24 +0,0 @@ ------------------------------------ --- Area: Valkurm Dunes --- NPC: qm2 (???) --- Involved In Quest: Messenger from Beyond --- !pos -716 -10 66 103 ------------------------------------ -local ID = zones[xi.zone.VALKURM_DUNES] ------------------------------------ ----@type TNpcEntity -local entity = {} - -entity.onTrigger = function(player, npc) - if - not GetMobByID(ID.mob.MARCHELUTE):isSpawned() and - player:getQuestStatus(xi.questLog.SANDORIA, xi.quest.id.sandoria.MESSENGER_FROM_BEYOND) == xi.questStatus.QUEST_ACCEPTED and - not player:hasItem(xi.item.TAVNAZIA_PASS) - then - SpawnMob(ID.mob.MARCHELUTE):updateClaim(player) - else - player:messageSpecial(ID.text.NOTHING_OUT_OF_ORDINARY) - end -end - -return entity