From d382fccc74a41f0d04d68809e4018445a6bd18d1 Mon Sep 17 00:00:00 2001 From: Crazyalextrebek Date: Fri, 22 May 2026 19:20:28 -0600 Subject: [PATCH 1/8] [quests] Added Abyssea quests 2, 3, and 9 --- scripts/enum/item.lua | 14 ++++++ .../zones/Abyssea-La_Theine/mobs/Lugarhoo.lua | 18 ++++++++ .../zones/Abyssea-La_Theine/npcs/Curilla.lua | 41 +++++++++++++++++ .../zones/Abyssea-La_Theine/npcs/Halver.lua | 46 +++++++++++++++++++ .../Abyssea-La_Theine/npcs/Secodiand.lua | 38 +++++++++++++++ 5 files changed, 157 insertions(+) create mode 100644 scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua create mode 100644 scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua create mode 100644 scripts/zones/Abyssea-La_Theine/npcs/Halver.lua create mode 100644 scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua diff --git a/scripts/enum/item.lua b/scripts/enum/item.lua index 4ea87eedafd..582fbd0fdd8 100644 --- a/scripts/enum/item.lua +++ b/scripts/enum/item.lua @@ -1905,9 +1905,23 @@ xi.item = SAFEHOLD_WAYSTONE = 2871, EMPIRE_WAYSTONE = 2872, NASHMAU_WAYSTONE = 2873, + LAMBENT_SCALE = 2874, + ETHEREAL_SQUAMA = 2875, + MUCULENT_INGOT = 2876, + INGOT_OF_BEFOULED_SILVER = 2877, + SQUARE_OF_SCARLET_KADIFE = 2878, + IGNEOUS_BARNACLE = 2879, + KIDNEY_STONE = 2880, EYE_OF_VERTHANDI = 2881, + BABY_BLOBDINGNAG = 2882, + RUTHVENS_NAIL = 2883, + KRABKATOA_SHELL = 2884, + ORCUS_MANDIBLE = 2885, MILDEWY_INGOT = 2886, DECAYED_INGOT = 2887, + SANGUINET = 2888, + LIMULE_PINCER = 2889, + CLIONID_WING = 2890, DRIED_CHIGOE = 2891, RAW_MUTTON_CHOP = 2892, GARGANTUAN_BLACK_TIGER_FANG = 2893, diff --git a/scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua b/scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua new file mode 100644 index 00000000000..451ddd09805 --- /dev/null +++ b/scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua @@ -0,0 +1,18 @@ +----------------------------------- +-- Area: Abyssea - La Theine +-- Mob: Lugarhoo +-- Involved in Quest: An Eye for Revenge +----------------------------------- +---@type TMobEntity +local entity = {} + +entity.onMobDeath = function(mob, player, optParams) + if + player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) == xi.questStatus.QUEST_ACCEPTED and + not player:hasKeyItem(xi.ki.LUGARHOOS_EYEBALL) + then + player:addKeyItem(xi.ki.LUGARHOOS_EYEBALL) + end +end + +return entity diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua b/scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua new file mode 100644 index 00000000000..4d2123267ca --- /dev/null +++ b/scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua @@ -0,0 +1,41 @@ +----------------------------------- +-- Area: Abyssea-La Theine +-- NPC: Curilla +-- Starts and Finishes Quest: An Eye for Revenge +-- !pos: -467.7 -3.5 -769.5 132 +----------------------------------- +---@type TNpcEntity + +local entity = {} + +entity.onTrigger = function(player, npc) + if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) ~= xi.questStatus.QUEST_COMPLETED then + if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) ~= xi.questStatus.QUEST_COMPLETED then + player:startEvent(189) -- Need to complete the quest "Lost Memories" (See Halver NPC) + elseif player:hasKeyItem(xi.ki.VIAL_OF_LAMBENT_POTION) then + player:startEvent(190) -- Begin quest "An Eye for Revenge" + elseif player:hasKeyItem(xi.ki.LUGARHOOS_EYEBALL) then + player:startEvent(192) -- Complete quest "An Eye for Revenge" + else + player:startEvent(191) -- Quest accepted but not yet completed + end + else + player:startEvent(193) -- Quest has already been completed + end +end + +entity.onEventFinish = function(player, csid, option, npc) + if csid == 190 then + player:delKeyItem(xi.ki.VIAL_OF_LAMBENT_POTION) + player:addQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) + elseif csid == 192 then + player:delKeyItem(xi.ki.LUGARHOOS_EYEBALL) + player:addCurrency('cruor', 800) + player:printToPlayer('You received 800 cruor from Curilla') --TODO implement cruor in npc_utils + player:printToPlayer('You received the Scarlet Abyssite of Furtherance') --TODO fix Abyssea messages so this section can be removed. + npcUtil.giveKeyItem(player, xi.ki.SCARLET_ABYSSITE_OF_FURTHERANCE) + player:completeQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) + end +end + +return entity diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Halver.lua b/scripts/zones/Abyssea-La_Theine/npcs/Halver.lua new file mode 100644 index 00000000000..a2e655027d4 --- /dev/null +++ b/scripts/zones/Abyssea-La_Theine/npcs/Halver.lua @@ -0,0 +1,46 @@ +----------------------------------- +-- Area: Abyssea-La Theine +-- NPC: Halver +-- Starts and Finishes Quest: Lost Memories +-- !pos: 600 40 -515 132 +----------------------------------- +---@type TNpcEntity + +local entity = {} + +entity.onTrade = function(player, npc, trade) + if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) ~= xi.questStatus.QUEST_AVAILABLE then + if npcUtil.tradeHas(trade, { { xi.item.LAMBENT_SCALE, 2 } }) then + player:startEvent(164) + end + end +end + +entity.onTrigger = function(player, npc) + if player:getFameLevel(xi.fameArea.ABYSSEA_LATHEINE) < 5 then + player:startEvent(162) -- Insufficient Fame + elseif + player:getFameLevel(xi.fameArea.ABYSSEA_LATHEINE) >= 5 and + player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) == xi.questStatus.QUEST_AVAILABLE + then + player:startEvent(165) -- Begin quest "Lost Memories" + elseif player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) == xi.questStatus.QUEST_ACCEPTED then + player:startEvent(163) -- During and after quest "Lost Memories" + end +end + +entity.onEventFinish = function(player, csid, option, npc) + if csid == 165 and option ~= 0 then + player:addQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) + elseif csid == 164 then + player:addCurrency('cruor', 480) + player:printToPlayer('You received 480 cruor from Halver') --TODO implement cruor in npc_utils + player:printToPlayer('You received a Vial of Lambent Potion from Halver') --TODO fix Abyssea messages so this section can be removed. + npcUtil.giveKeyItem(player, xi.ki.VIAL_OF_LAMBENT_POTION) + player:completeQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) + player:confirmTrade() + --TODO add repeat quest? + end +end + +return entity diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua b/scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua new file mode 100644 index 00000000000..aa9fb021236 --- /dev/null +++ b/scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua @@ -0,0 +1,38 @@ +----------------------------------- +-- Area: Abyssea-La Theine +-- NPC: Secodiand +-- Starts and Finishes Quest: Fear of the Dark III +-- !pos -489.5 -2.8 759.2 132 +----------------------------------- +---@type TNpcEntity +local entity = {} + +entity.onTrade = function(player, npc, trade) + if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) ~= xi.questStatus.QUEST_AVAILABLE then + if npcUtil.tradeHas(trade, { { xi.item.CLIONID_WING, 3 } }) then + player:startEvent(160) + end + end +end + +entity.onTrigger = function(player, npc) + if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) == xi.questStatus.QUEST_AVAILABLE then + player:startEvent(161) -- Start quest "Fear of the Dark III" + else + player:startEvent(159) -- During & after completed quest "Fear of the Dark III" + end +end + +entity.onEventFinish = function(player, csid, option, npc) + if csid == 161 and option ~= 0 then + player:addQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) + elseif csid == 160 then + player:addCurrency('cruor', 200) + player:printToPlayer('You received 200 cruor') --TODO implement cruor in npc_utils + player:addFame(xi.fameArea.ABYSSEA_LATHEINE, 10) --TODO confirm retail fame amount. Reported Rank 6 w/ about 40 quest completions => around 10 fame per completion. + player:completeQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) + player:confirmTrade() + end +end + +return entity From 5abcf02c2e1f9fe6b82cc38303cb6ca3f8a59e79 Mon Sep 17 00:00:00 2001 From: Crazyalextrebek <47584189+cwalke39@users.noreply.github.com> Date: Sat, 23 May 2026 17:20:14 -0600 Subject: [PATCH 2/8] Delete scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua --- .../zones/Abyssea-La_Theine/npcs/Curilla.lua | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua b/scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua deleted file mode 100644 index 4d2123267ca..00000000000 --- a/scripts/zones/Abyssea-La_Theine/npcs/Curilla.lua +++ /dev/null @@ -1,41 +0,0 @@ ------------------------------------ --- Area: Abyssea-La Theine --- NPC: Curilla --- Starts and Finishes Quest: An Eye for Revenge --- !pos: -467.7 -3.5 -769.5 132 ------------------------------------ ----@type TNpcEntity - -local entity = {} - -entity.onTrigger = function(player, npc) - if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) ~= xi.questStatus.QUEST_COMPLETED then - if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) ~= xi.questStatus.QUEST_COMPLETED then - player:startEvent(189) -- Need to complete the quest "Lost Memories" (See Halver NPC) - elseif player:hasKeyItem(xi.ki.VIAL_OF_LAMBENT_POTION) then - player:startEvent(190) -- Begin quest "An Eye for Revenge" - elseif player:hasKeyItem(xi.ki.LUGARHOOS_EYEBALL) then - player:startEvent(192) -- Complete quest "An Eye for Revenge" - else - player:startEvent(191) -- Quest accepted but not yet completed - end - else - player:startEvent(193) -- Quest has already been completed - end -end - -entity.onEventFinish = function(player, csid, option, npc) - if csid == 190 then - player:delKeyItem(xi.ki.VIAL_OF_LAMBENT_POTION) - player:addQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) - elseif csid == 192 then - player:delKeyItem(xi.ki.LUGARHOOS_EYEBALL) - player:addCurrency('cruor', 800) - player:printToPlayer('You received 800 cruor from Curilla') --TODO implement cruor in npc_utils - player:printToPlayer('You received the Scarlet Abyssite of Furtherance') --TODO fix Abyssea messages so this section can be removed. - npcUtil.giveKeyItem(player, xi.ki.SCARLET_ABYSSITE_OF_FURTHERANCE) - player:completeQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) - end -end - -return entity From fda5ac1783e657bdfe6540af6f097101522abf3b Mon Sep 17 00:00:00 2001 From: Crazyalextrebek <47584189+cwalke39@users.noreply.github.com> Date: Sat, 23 May 2026 17:20:22 -0600 Subject: [PATCH 3/8] Delete scripts/zones/Abyssea-La_Theine/npcs/Halver.lua --- .../zones/Abyssea-La_Theine/npcs/Halver.lua | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 scripts/zones/Abyssea-La_Theine/npcs/Halver.lua diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Halver.lua b/scripts/zones/Abyssea-La_Theine/npcs/Halver.lua deleted file mode 100644 index a2e655027d4..00000000000 --- a/scripts/zones/Abyssea-La_Theine/npcs/Halver.lua +++ /dev/null @@ -1,46 +0,0 @@ ------------------------------------ --- Area: Abyssea-La Theine --- NPC: Halver --- Starts and Finishes Quest: Lost Memories --- !pos: 600 40 -515 132 ------------------------------------ ----@type TNpcEntity - -local entity = {} - -entity.onTrade = function(player, npc, trade) - if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) ~= xi.questStatus.QUEST_AVAILABLE then - if npcUtil.tradeHas(trade, { { xi.item.LAMBENT_SCALE, 2 } }) then - player:startEvent(164) - end - end -end - -entity.onTrigger = function(player, npc) - if player:getFameLevel(xi.fameArea.ABYSSEA_LATHEINE) < 5 then - player:startEvent(162) -- Insufficient Fame - elseif - player:getFameLevel(xi.fameArea.ABYSSEA_LATHEINE) >= 5 and - player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) == xi.questStatus.QUEST_AVAILABLE - then - player:startEvent(165) -- Begin quest "Lost Memories" - elseif player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) == xi.questStatus.QUEST_ACCEPTED then - player:startEvent(163) -- During and after quest "Lost Memories" - end -end - -entity.onEventFinish = function(player, csid, option, npc) - if csid == 165 and option ~= 0 then - player:addQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) - elseif csid == 164 then - player:addCurrency('cruor', 480) - player:printToPlayer('You received 480 cruor from Halver') --TODO implement cruor in npc_utils - player:printToPlayer('You received a Vial of Lambent Potion from Halver') --TODO fix Abyssea messages so this section can be removed. - npcUtil.giveKeyItem(player, xi.ki.VIAL_OF_LAMBENT_POTION) - player:completeQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) - player:confirmTrade() - --TODO add repeat quest? - end -end - -return entity From b0dd231c6598452d63e69d2aa16711da155b37e9 Mon Sep 17 00:00:00 2001 From: Crazyalextrebek <47584189+cwalke39@users.noreply.github.com> Date: Sat, 23 May 2026 17:20:30 -0600 Subject: [PATCH 4/8] Delete scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua --- .../Abyssea-La_Theine/npcs/Secodiand.lua | 38 ------------------- 1 file changed, 38 deletions(-) delete mode 100644 scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua diff --git a/scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua b/scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua deleted file mode 100644 index aa9fb021236..00000000000 --- a/scripts/zones/Abyssea-La_Theine/npcs/Secodiand.lua +++ /dev/null @@ -1,38 +0,0 @@ ------------------------------------ --- Area: Abyssea-La Theine --- NPC: Secodiand --- Starts and Finishes Quest: Fear of the Dark III --- !pos -489.5 -2.8 759.2 132 ------------------------------------ ----@type TNpcEntity -local entity = {} - -entity.onTrade = function(player, npc, trade) - if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) ~= xi.questStatus.QUEST_AVAILABLE then - if npcUtil.tradeHas(trade, { { xi.item.CLIONID_WING, 3 } }) then - player:startEvent(160) - end - end -end - -entity.onTrigger = function(player, npc) - if player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) == xi.questStatus.QUEST_AVAILABLE then - player:startEvent(161) -- Start quest "Fear of the Dark III" - else - player:startEvent(159) -- During & after completed quest "Fear of the Dark III" - end -end - -entity.onEventFinish = function(player, csid, option, npc) - if csid == 161 and option ~= 0 then - player:addQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) - elseif csid == 160 then - player:addCurrency('cruor', 200) - player:printToPlayer('You received 200 cruor') --TODO implement cruor in npc_utils - player:addFame(xi.fameArea.ABYSSEA_LATHEINE, 10) --TODO confirm retail fame amount. Reported Rank 6 w/ about 40 quest completions => around 10 fame per completion. - player:completeQuest(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) - player:confirmTrade() - end -end - -return entity From 46291cb9d7737745579211690c795e9037eccbc1 Mon Sep 17 00:00:00 2001 From: Crazyalextrebek <47584189+cwalke39@users.noreply.github.com> Date: Sat, 23 May 2026 17:21:08 -0600 Subject: [PATCH 5/8] Delete scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua --- .../zones/Abyssea-La_Theine/mobs/Lugarhoo.lua | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua diff --git a/scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua b/scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua deleted file mode 100644 index 451ddd09805..00000000000 --- a/scripts/zones/Abyssea-La_Theine/mobs/Lugarhoo.lua +++ /dev/null @@ -1,18 +0,0 @@ ------------------------------------ --- Area: Abyssea - La Theine --- Mob: Lugarhoo --- Involved in Quest: An Eye for Revenge ------------------------------------ ----@type TMobEntity -local entity = {} - -entity.onMobDeath = function(mob, player, optParams) - if - player:getQuestStatus(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) == xi.questStatus.QUEST_ACCEPTED and - not player:hasKeyItem(xi.ki.LUGARHOOS_EYEBALL) - then - player:addKeyItem(xi.ki.LUGARHOOS_EYEBALL) - end -end - -return entity From 72fe1a60547632a35490815ef3b4f9ffd5d14455 Mon Sep 17 00:00:00 2001 From: Crazyalextrebek Date: Sat, 23 May 2026 18:02:46 -0600 Subject: [PATCH 6/8] [quests] Abyssea Quests 2, 3, and 9 --- scripts/quests/abyssea/An_Eye_for_Revenge.lua | 8 ++++---- scripts/quests/abyssea/Fear_of_the_Dark_III.lua | 8 ++++---- scripts/quests/abyssea/Lost_Memories.lua | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/quests/abyssea/An_Eye_for_Revenge.lua b/scripts/quests/abyssea/An_Eye_for_Revenge.lua index 68a70798b58..7e899dc8c06 100644 --- a/scripts/quests/abyssea/An_Eye_for_Revenge.lua +++ b/scripts/quests/abyssea/An_Eye_for_Revenge.lua @@ -45,7 +45,7 @@ quest.sections = return quest:event(190) end, }, - + onEventFinish = { [190] = function(player, csid, option, npc) @@ -54,7 +54,7 @@ quest.sections = }, }, }, - + { check = function(player, status, vars) return status == xi.questStatus.QUEST_ACCEPTED @@ -72,7 +72,7 @@ quest.sections = end end, }, - + ['Lugarhoo'] = { onMobDeath = function(mob, player, optParams) @@ -81,7 +81,7 @@ quest.sections = end end, }, - + onEventFinish = { [192] = function(player, csid, option, npc) diff --git a/scripts/quests/abyssea/Fear_of_the_Dark_III.lua b/scripts/quests/abyssea/Fear_of_the_Dark_III.lua index 06cdd27ecc0..1efa7911ab0 100644 --- a/scripts/quests/abyssea/Fear_of_the_Dark_III.lua +++ b/scripts/quests/abyssea/Fear_of_the_Dark_III.lua @@ -27,7 +27,7 @@ quest.sections = return quest:event(161) end, }, - + onEventFinish = { [161] = function(player, csid, option, npc) @@ -38,7 +38,7 @@ quest.sections = }, }, }, - + { check = function(player, status, vars) return status ~= xi.questStatus.QUEST_AVAILABLE @@ -51,14 +51,14 @@ quest.sections = onTrigger = function(player, npc) return quest:event(159) end, - + onTrade = function(player, npc, trade) if npcUtil.tradeHas(trade, { { xi.item.CLIONID_WING, 3 } }) then return quest:event(160) end end, }, - + onEventFinish = { [160] = function(player, csid, option, npc) diff --git a/scripts/quests/abyssea/Lost_Memories.lua b/scripts/quests/abyssea/Lost_Memories.lua index b0c44828eb8..0271f13861f 100644 --- a/scripts/quests/abyssea/Lost_Memories.lua +++ b/scripts/quests/abyssea/Lost_Memories.lua @@ -44,7 +44,7 @@ quest.sections = return quest:event(165) end, }, - + onEventFinish = { [165] = function(player, csid, option, npc) @@ -55,7 +55,7 @@ quest.sections = }, }, }, - + { check = function(player, status, vars) return status == xi.questStatus.QUEST_ACCEPTED @@ -68,14 +68,14 @@ quest.sections = onTrigger = function(player, npc) return quest:event(163) end, - + onTrade = function(player, npc, trade) if npcUtil.tradeHas(trade, { { xi.item.LAMBENT_SCALE, 2 } }) then return quest:event(164) end end, }, - + onEventFinish = { [164] = function(player, csid, option, npc) From 231501394ac500949ff349bced97b8dee933212f Mon Sep 17 00:00:00 2001 From: Crazyalextrebek Date: Sat, 23 May 2026 18:57:58 -0600 Subject: [PATCH 7/8] [Quests] Adding Abyssea Quests 2, 3, and 9 --- scripts/quests/abyssea/An_Eye_for_Revenge.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/quests/abyssea/An_Eye_for_Revenge.lua b/scripts/quests/abyssea/An_Eye_for_Revenge.lua index 7e899dc8c06..ba8f2eb8621 100644 --- a/scripts/quests/abyssea/An_Eye_for_Revenge.lua +++ b/scripts/quests/abyssea/An_Eye_for_Revenge.lua @@ -77,7 +77,7 @@ quest.sections = { onMobDeath = function(mob, player, optParams) if not player:hasKeyItem(xi.ki.LUGARHOOS_EYEBALL) then - npcUtil.giveKeyItem(xi.ki.LUGARHOOS_EYEBALL) + player:addKeyItem(xi.ki.LUGARHOOS_EYEBALL) end end, }, From 9073291cde99e4422d6d184586666ea45953709b Mon Sep 17 00:00:00 2001 From: Crazyalextrebek Date: Sun, 24 May 2026 14:23:09 -0600 Subject: [PATCH 8/8] [Quests] Adding Abyssea Quests 2, 3, and 9 --- scripts/quests/abyssea/An_Eye_for_Revenge.lua | 7 +- .../quests/abyssea/Fear_of_the_Dark_III.lua | 5 +- scripts/quests/abyssea/Lost_Memories.lua | 7 +- scripts/zones/Abyssea-La_Theine/IDs.lua | 120 +++++++++--------- 4 files changed, 70 insertions(+), 69 deletions(-) diff --git a/scripts/quests/abyssea/An_Eye_for_Revenge.lua b/scripts/quests/abyssea/An_Eye_for_Revenge.lua index ba8f2eb8621..41d8918b12b 100644 --- a/scripts/quests/abyssea/An_Eye_for_Revenge.lua +++ b/scripts/quests/abyssea/An_Eye_for_Revenge.lua @@ -4,6 +4,8 @@ -- !addquest 8 3 -- Curilla : !pos: -467.7 -3.5 -769.5 132 ----------------------------------- +local ID = zones[xi.zone.ABYSSEA_LA_THEINE] +----------------------------------- local quest = Quest:new(xi.questLog.ABYSSEA, xi.quest.id.abyssea.AN_EYE_FOR_REVENGE) @@ -78,6 +80,7 @@ quest.sections = onMobDeath = function(mob, player, optParams) if not player:hasKeyItem(xi.ki.LUGARHOOS_EYEBALL) then player:addKeyItem(xi.ki.LUGARHOOS_EYEBALL) + player:messageSpecial(ID.text.KEYITEM_OBTAINED, xi.ki.LUGARHOOS_EYEBALL) end end, }, @@ -86,10 +89,8 @@ quest.sections = { [192] = function(player, csid, option, npc) player:delKeyItem(xi.ki.LUGARHOOS_EYEBALL) - --TODO cruor not implemented in npc_utils & quest rewards player:addCurrency('cruor', 800) - player:printToPlayer('You received 800 cruor') - player:printToPlayer('You received the Scarlet Abyssite of Furtherance') + player:messageSpecial(ID.text.CRUOR_TOTAL, 800, player:getCurrency('cruor')) quest:complete(player) end, }, diff --git a/scripts/quests/abyssea/Fear_of_the_Dark_III.lua b/scripts/quests/abyssea/Fear_of_the_Dark_III.lua index 1efa7911ab0..eaa2883b2e4 100644 --- a/scripts/quests/abyssea/Fear_of_the_Dark_III.lua +++ b/scripts/quests/abyssea/Fear_of_the_Dark_III.lua @@ -4,6 +4,8 @@ -- !addquest 8 2 -- Secodiand : !pos -489.5 -2.8 759.2 132 ----------------------------------- +local ID = zones[xi.zone.ABYSSEA_LA_THEINE] +----------------------------------- local quest = Quest:new(xi.questLog.ABYSSEA, xi.quest.id.abyssea.FEAR_OF_THE_DARK_III) @@ -63,9 +65,8 @@ quest.sections = { [160] = function(player, csid, option, npc) player:confirmTrade() - --TODO cruor not implemented in npc_utils & quest rewards player:addCurrency('cruor', 200) - player:printToPlayer('You received 200 cruor') + player:messageSpecial(ID.text.CRUOR_TOTAL, 200, player:getCurrency('cruor')) quest:complete(player) end, }, diff --git a/scripts/quests/abyssea/Lost_Memories.lua b/scripts/quests/abyssea/Lost_Memories.lua index 0271f13861f..0d34dc43beb 100644 --- a/scripts/quests/abyssea/Lost_Memories.lua +++ b/scripts/quests/abyssea/Lost_Memories.lua @@ -4,6 +4,8 @@ -- !addquest 8 9 -- Halver : !pos: 600 40 -515 132 ----------------------------------- +local ID = zones[xi.zone.ABYSSEA_LA_THEINE] +----------------------------------- local quest = Quest:new(xi.questLog.ABYSSEA, xi.quest.id.abyssea.LOST_MEMORIES) @@ -80,12 +82,9 @@ quest.sections = { [164] = function(player, csid, option, npc) player:confirmTrade() - --TODO cruor not implemented in npc_utils & quest rewards - --TODO remove system messages after Abyssea messages are fixed --TODO add repeat quest functionality? player:addCurrency('cruor', 480) - player:printToPlayer('You received 480 cruor') - player:printToPlayer('You received a Vial of Lambent Potion') + player:messageSpecial(ID.text.CRUOR_TOTAL, 480, player:getCurrency('cruor')) quest:complete(player) end, }, diff --git a/scripts/zones/Abyssea-La_Theine/IDs.lua b/scripts/zones/Abyssea-La_Theine/IDs.lua index d30c713f1ac..bb4c4884df0 100644 --- a/scripts/zones/Abyssea-La_Theine/IDs.lua +++ b/scripts/zones/Abyssea-La_Theine/IDs.lua @@ -8,66 +8,66 @@ zones[xi.zone.ABYSSEA_LA_THEINE] = text = { ITEM_CANNOT_BE_OBTAINED = 6385, -- You cannot obtain the . Come back after sorting your inventory. - ITEM_OBTAINED = 6393, -- Obtained: . - GIL_OBTAINED = 6394, -- Obtained gil. - KEYITEM_OBTAINED = 6396, -- Obtained key item: . - LOST_KEYITEM = 6397, -- Lost key item: . - CRUOR_TOTAL = 6991, -- Obtained cruor. (Total: ) - CARRIED_OVER_POINTS = 7004, -- You have carried over login point[/s]. - LOGIN_CAMPAIGN_UNDERWAY = 7005, -- The [/January/February/March/April/May/June/July/August/September/October/November/December] Login Campaign is currently underway! - LOGIN_NUMBER = 7006, -- In celebration of your most recent login (login no. ), we have provided you with points! You currently have a total of points. - MEMBERS_LEVELS_ARE_RESTRICTED = 7026, -- Your party is unable to participate because certain members' levels are restricted. - PLAYER_KEYITEM_OBTAINED = 7332, -- obtained the key item: ! - LIGHTS_MESSAGE_1 = 7337, -- Visitant Light Intensity Pearlescent: / Ebon: Golden: / Silvery: - LIGHTS_MESSAGE_2 = 7338, -- Azure: / Ruby: / Amber: - STAGGERED = 7339, -- 's attack staggers the fiend! - YELLOW_STAGGER = 7340, -- The fiend is unable to cast magic. - BLUE_STAGGER = 7341, -- The fiend is unable to use special attacks. - RED_STAGGER = 7342, -- The fiend is frozen in its tracks. - YELLOW_WEAKNESS = 7343, -- The fiend appears vulnerable to [/fire/ice/wind/earth/lightning/water/light/darkness] elemental magic! - BLUE_WEAKNESS = 7344, -- The fiend appears vulnerable to [/hand-to-hand/dagger/sword/great sword/axe/great axe/scythe/polearm/katana/great katana/club/staff/archery/marksmanship] weapon skills! - RED_WEAKNESS = 7345, -- The fiend appears vulnerable to [/fire/ice/wind/earth/lightning/water/light/darkness] elemental weapon skills! - ABYSSEA_TIME_OFFSET = 7346, -- Your visitant status will wear off in [second/minute]. - RETURNING_TO_SEARING_IN = 7355, -- Returning to the Searing Ward in [second/seconds]. - NO_VISITANT_WARD = 7356, -- You do not have visitant status. Returning to the Searing Ward in [second/seconds]. - RETURNING_TO_WARD = 7358, -- Returning to the Searing Ward now. - NO_VISITANT_STATUS = 7415, -- You do not have visitant status. Please proceed to the nearest Conflux Surveyor to have it granted. - ATMA_INFUSED = 7458, -- expends cruor and is now infused with ! - ATMA_PURGED = 7459, -- has been purged of the . - ALL_ATMA_PURGED = 7460, -- has been purged of all infused atma. - PREVIOUS_ATMA_INFUSED = 7466, -- expends cruor and [his/her] previous atma configuration is restored! - HISTORY_ATMA_INFUSED = 7473, -- expends cruor and is now infused with [his/her] chosen atma set! - MONSTER_CONCEALED_CHEST = 7498, -- The monster was concealing a treasure chest! - OBTAINS_TEMP_ITEM = 7508, -- obtains the temporary item: ! - OBTAINS_ITEM = 7509, -- obtains the item: ! - OBTAINS_KEYITEM = 7510, -- obtains the key item: ! - ADD_SPOILS_TO_TREASURE = 7511, -- transferred the contents of the pyxis to the cache of lottable spoils. - TEMP_ITEM_DISAPPEARED = 7514, -- That temporary item had already disappeared. - KEYITEM_DISAPPEARED = 7515, -- That key item had already disappeared. - ITEM_DISAPPEARED = 7516, -- That item had already disappeared. - CHEST_DESPAWNED = 7517, -- The treasure chest had already disappeared. - CRUOR_OBTAINED = 7518, -- obtained cruor. - OBTAINS_SEVERAL_TEMPS = 7519, -- obtains several temporary items! - BODY_EMITS_OFFSET = 7520, -- 's body emits [a faint/a mild/a strong] pearlescent light! - CANNOT_OPEN_CHEST = 7527, -- You cannot open that treasure chest. - PLAYER_HAS_CLAIM_OF_CHEST = 7528, -- has claim over that treasure chest. - PARTY_NOT_OWN_CHEST = 7529, -- Your party does not have claim over that treasure chest. - CHEST_DISAPPEARED = 7532, -- The treasure chest has disappeared. - RANDOM_SUCCESS_FAIL_GUESS = 7554, -- The randomly generated number was ! guessed [successfully/unsuccessfully]! - AIR_PRESSURE_CHANGE = 7558, -- [reduced/increased] the air pressure by units. Current air pressure: [/ (minimum)/ (maximum)] - INPUT_SUCCESS_FAIL_GUESS = 7563, -- inputs the number [, but nothing happens./, successfully unlocking the chest!] - GREATER_OR_LESS_THAN = 7564, -- You have a hunch that the lock's combination is [greater/less] than . - HUNCH_SECOND_FIRST_EVEN_ODD = 7565, -- You have a hunch that the [second/first] digit is [even/odd]. - HUNCH_SECOND_FIRST_IS = 7566, -- You have a hunch that the [second/first] digit is . - HUNCH_SECOND_FIRST_IS_OR = 7567, -- You have a hunch that the [second/first] digit is , , or . - HUNCH_ONE_DIGIT_IS = 7568, -- You have a hunch that one of the digits is . - HUNCH_SUM_EQUALS = 7569, -- You have a hunch that the sum of the two digits is . - PLAYER_OPENED_LOCK = 7570, -- succeeded in opening the lock! - PLAYER_FAILED_LOCK = 7571, -- failed to open the lock. - TRADE_KEY_OPEN = 7572, -- uses and opens the lock! - BOUNDLESS_RAGE = 7595, -- You sense an aura of boundless rage... - INFO_KI = 7596, -- Your keen senses tell you that something may happen if only you had [this item/these items]. - USE_KI = 7599, -- Use the [key item/key items]? Yes. No. + ITEM_OBTAINED = 6391, -- Obtained: . + GIL_OBTAINED = 6393, -- Obtained gil. + KEYITEM_OBTAINED = 6394, -- Obtained key item: . + LOST_KEYITEM = 6395, -- Lost key item: . + CRUOR_TOTAL = 6990, -- Obtained cruor. (Total: ) + CARRIED_OVER_POINTS = 7002, -- You have carried over login point[/s]. + LOGIN_CAMPAIGN_UNDERWAY = 7003, -- The [/January/February/March/April/May/June/July/August/September/October/November/December] Login Campaign is currently underway! + LOGIN_NUMBER = 7004, -- In celebration of your most recent login (login no. ), we have provided you with points! You currently have a total of points. + MEMBERS_LEVELS_ARE_RESTRICTED = 7024, -- Your party is unable to participate because certain members' levels are restricted. + PLAYER_KEYITEM_OBTAINED = 7330, -- obtained the key item: ! + LIGHTS_MESSAGE_1 = 7335, -- Visitant Light Intensity Pearlescent: / Ebon: Golden: / Silvery: + LIGHTS_MESSAGE_2 = 7336, -- Azure: / Ruby: / Amber: + STAGGERED = 7337, -- 's attack staggers the fiend! + YELLOW_STAGGER = 7338, -- The fiend is unable to cast magic. + BLUE_STAGGER = 7339, -- The fiend is unable to use special attacks. + RED_STAGGER = 7340, -- The fiend is frozen in its tracks. + YELLOW_WEAKNESS = 7341, -- The fiend appears vulnerable to [/fire/ice/wind/earth/lightning/water/light/darkness] elemental magic! + BLUE_WEAKNESS = 7342, -- The fiend appears vulnerable to [/hand-to-hand/dagger/sword/great sword/axe/great axe/scythe/polearm/katana/great katana/club/staff/archery/marksmanship] weapon skills! + RED_WEAKNESS = 7343, -- The fiend appears vulnerable to [/fire/ice/wind/earth/lightning/water/light/darkness] elemental weapon skills! + ABYSSEA_TIME_OFFSET = 7344, -- Your visitant status will wear off in [second/minute]. + RETURNING_TO_SEARING_IN = 7353, -- Returning to the Searing Ward in [second/seconds]. + NO_VISITANT_WARD = 7354, -- You do not have visitant status. Returning to the Searing Ward in [second/seconds]. + RETURNING_TO_WARD = 7356, -- Returning to the Searing Ward now. + NO_VISITANT_STATUS = 7413, -- You do not have visitant status. Please proceed to the nearest Conflux Surveyor to have it granted. + ATMA_INFUSED = 7456, -- expends cruor and is now infused with ! + ATMA_PURGED = 7457, -- has been purged of the . + ALL_ATMA_PURGED = 7458, -- has been purged of all infused atma. + PREVIOUS_ATMA_INFUSED = 7464, -- expends cruor and [his/her] previous atma configuration is restored! + HISTORY_ATMA_INFUSED = 7471, -- expends cruor and is now infused with [his/her] chosen atma set! + MONSTER_CONCEALED_CHEST = 7496, -- The monster was concealing a treasure chest! + OBTAINS_TEMP_ITEM = 7506, -- obtains the temporary item: ! + OBTAINS_ITEM = 7507, -- obtains the item: ! + OBTAINS_KEYITEM = 7508, -- obtains the key item: ! + ADD_SPOILS_TO_TREASURE = 7509, -- transferred the contents of the pyxis to the cache of lottable spoils. + TEMP_ITEM_DISAPPEARED = 7512, -- That temporary item had already disappeared. + KEYITEM_DISAPPEARED = 7513, -- That key item had already disappeared. + ITEM_DISAPPEARED = 7514, -- That item had already disappeared. + CHEST_DESPAWNED = 7515, -- The treasure chest had already disappeared. + CRUOR_OBTAINED = 7516, -- obtained cruor. + OBTAINS_SEVERAL_TEMPS = 7517, -- obtains several temporary items! + BODY_EMITS_OFFSET = 7518, -- 's body emits [a faint/a mild/a strong] pearlescent light! + CANNOT_OPEN_CHEST = 7525, -- You cannot open that treasure chest. + PLAYER_HAS_CLAIM_OF_CHEST = 7526, -- has claim over that treasure chest. + PARTY_NOT_OWN_CHEST = 7527, -- Your party does not have claim over that treasure chest. + CHEST_DISAPPEARED = 7530, -- The treasure chest has disappeared. + RANDOM_SUCCESS_FAIL_GUESS = 7552, -- The randomly generated number was ! guessed [successfully/unsuccessfully]! + AIR_PRESSURE_CHANGE = 7556, -- [reduced/increased] the air pressure by units. Current air pressure: [/ (minimum)/ (maximum)] + INPUT_SUCCESS_FAIL_GUESS = 7561, -- inputs the number [, but nothing happens./, successfully unlocking the chest!] + GREATER_OR_LESS_THAN = 7562, -- You have a hunch that the lock's combination is [greater/less] than . + HUNCH_SECOND_FIRST_EVEN_ODD = 7563, -- You have a hunch that the [second/first] digit is [even/odd]. + HUNCH_SECOND_FIRST_IS = 7564, -- You have a hunch that the [second/first] digit is . + HUNCH_SECOND_FIRST_IS_OR = 7565, -- You have a hunch that the [second/first] digit is , , or . + HUNCH_ONE_DIGIT_IS = 7566, -- You have a hunch that one of the digits is . + HUNCH_SUM_EQUALS = 7567, -- You have a hunch that the sum of the two digits is . + PLAYER_OPENED_LOCK = 7568, -- succeeded in opening the lock! + PLAYER_FAILED_LOCK = 7569, -- failed to open the lock. + TRADE_KEY_OPEN = 7570, -- uses and opens the lock! + BOUNDLESS_RAGE = 7593, -- You sense an aura of boundless rage... + INFO_KI = 7594, -- Your keen senses tell you that something may happen if only you had [this item/these items]. + USE_KI = 7597, -- Use the [key item/key items]? Yes. No. }, mob = {