mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-21 12:17:46 +00:00
398 lines
No EOL
14 KiB
Lua
398 lines
No EOL
14 KiB
Lua
require("global");
|
|
|
|
--[[
|
|
|
|
Quest Script
|
|
|
|
Name: Legends Adrift
|
|
Code: Man1l0
|
|
Id: 110003
|
|
Prereq: Treasures of the Main (Man0l1 - 110002)
|
|
|
|
]]
|
|
|
|
-- Sequence Numbers
|
|
SEQ_000 = 0; -- Echo intance with Y'shtola, Baderon, Etc. Talk to Y'shtola.
|
|
SEQ_010 = 10; -- Echo instance, talk with Baderon.
|
|
SEQ_020 = 20; -- Head to MRD guild and talk to Waekbyrt.
|
|
SEQ_030 = 30; -- Head down the Astalicia to the push trigger.
|
|
SEQ_040 = 40; -- Head up the Astalicia to the push trigger.
|
|
SEQ_050 = 50; -- Contact Baderon on the Link Pearl.
|
|
SEQ_060 = 60; -- Head to the FSH guild and push the trigger.
|
|
SEQ_070 = 70; -- Head to a spot in Lower La Noscea.
|
|
SEQ_080 = 80; -- Contact Baderon on the Link Pearl.
|
|
SEQ_090 = 90; -- Speak to P'tahjha at the ACN guild.
|
|
SEQ_100 = 100; -- Echo instance, head downstairs to push a trigger and cutscene.
|
|
SEQ_110 = 110; -- Echo instance still, head upstairs to trigger a cutscene.
|
|
SEQ_120 = 120; -- Contact Baderon on the Link Pearl.
|
|
SEQ_122 = 122; -- Head back to Baderon to finish the quest.
|
|
|
|
-- Quest Actors
|
|
BADERON = 1000137;
|
|
YSHTOLA = 1000001;
|
|
|
|
-- ADV Guild Echo
|
|
ADVENTURER = 1000101;
|
|
WHISPERING_ADVENTURER = 1000102;
|
|
UNAPPROACHABLE_ADVENTURER = 1000103;
|
|
FISH_SMELLING_ADVENTURER = 1000104;
|
|
SPEAR_WIELDING_ADVENTURER = 1000105;
|
|
TRIGGER_ADVGUILD = 1090080;
|
|
|
|
-- MRD Guild Echo
|
|
WAEKBYRT = 1000003;
|
|
HULKING_CUDA_KNIGHT = 1000182;
|
|
SOPHISTICATED_CUDA_KNIGHT = 1000108;
|
|
FRIGHTENED_CUDA_KNIGHT = 1000110;
|
|
ZEALOUS_PIRATE = 1000112;
|
|
ENRAGED_PIRATE = 1000113;
|
|
TRIGGER_MRD = 1090081;
|
|
|
|
-- MRD Guild Echo 2
|
|
DISGRUNTLED_PIRATE = 1000087;
|
|
PINE_SCENTED_PIRATE = 1000088;
|
|
BARITONE_PIRATE = 1000089;
|
|
BAYARD = 1000190;
|
|
|
|
-- FSH Guild Sequences
|
|
NNMULIKA = 1000153;
|
|
SISIPU = 1000156;
|
|
TRIGGER_FSH = 1090006;
|
|
TRIGGER_SEAFLD = 1090082;
|
|
|
|
-- ACN Guild Echo
|
|
ASSESSOR = 1000121;
|
|
PTAHJHA = 1000150;
|
|
HALDBERK = 1000160;
|
|
LILINA = 1000178;
|
|
DODOROBA = 1000196;
|
|
IVAN = 1000197;
|
|
MERODAULYN = 1000008;
|
|
COQUETTISH_PIRATE = 1000868;
|
|
VOLUPTUOUS_PIRATE = 1000115;
|
|
PEACOCKISH_PIRATE = 1000118;
|
|
TRIGGER_ACN_LOWER = 1090083;
|
|
TRIGGER_ACN_UPPER = 1090084;
|
|
|
|
-- Quest Markers
|
|
MRKR_TRIGGER_FSH = 11000306;
|
|
MRKR_TRIGGER_SEAFLD = 11000307;
|
|
MRKR_TRIGGER_ANC_LOWER = 11000308;
|
|
|
|
-- Msg packs for the Npc LS
|
|
NPCLS_MSGS = {
|
|
{57, 58, 59}, -- SEQ_050
|
|
{92, 93, 94}, -- SEQ_070
|
|
{140, 141} -- SEQ_120
|
|
};
|
|
|
|
function onStart(player, quest)
|
|
quest:StartSequence(SEQ_000);
|
|
GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 3, -430.55, 40.2, 185.41, 1.89);
|
|
end
|
|
|
|
function onFinish(player, quest)
|
|
end
|
|
|
|
function onStateChange(player, quest, sequence)
|
|
local data = quest:GetData();
|
|
if (sequence == SEQ_ACCEPT) then
|
|
quest:SetENpc(BADERON, QFLAG_PLATE);
|
|
elseif (sequence == SEQ_000) then
|
|
quest:SetENpc(BADERON);
|
|
quest:SetENpc(ADVENTURER);
|
|
quest:SetENpc(WHISPERING_ADVENTURER);
|
|
quest:SetENpc(UNAPPROACHABLE_ADVENTURER);
|
|
quest:SetENpc(FISH_SMELLING_ADVENTURER);
|
|
quest:SetENpc(SPEAR_WIELDING_ADVENTURER);
|
|
quest:SetENpc(TRIGGER_ADVGUILD, QFLAG_MAP, false, true);
|
|
elseif (sequence == SEQ_010) then
|
|
quest:SetENpc(BADERON, QFLAG_PLATE);
|
|
quest:SetENpc(ADVENTURER);
|
|
quest:SetENpc(WHISPERING_ADVENTURER);
|
|
quest:SetENpc(UNAPPROACHABLE_ADVENTURER);
|
|
quest:SetENpc(FISH_SMELLING_ADVENTURER);
|
|
quest:SetENpc(SPEAR_WIELDING_ADVENTURER);
|
|
quest:SetENpc(YSHTOLA);
|
|
elseif (sequence == SEQ_020) then
|
|
quest:SetENpc(WAEKBYRT, QFLAG_PLATE);
|
|
quest:SetENpc(BADERON);
|
|
elseif (sequence == SEQ_030) then
|
|
quest:SetENpc(TRIGGER_MRD, QFLAG_MAP, false, true);
|
|
quest:SetENpc(HULKING_CUDA_KNIGHT);
|
|
quest:SetENpc(SOPHISTICATED_CUDA_KNIGHT);
|
|
quest:SetENpc(FRIGHTENED_CUDA_KNIGHT);
|
|
quest:SetENpc(ZEALOUS_PIRATE);
|
|
quest:SetENpc(ENRAGED_PIRATE);
|
|
quest:SetENpc(WAEKBYRT);
|
|
elseif (sequence == SEQ_040) then
|
|
quest:SetENpc(TRIGGER_MRD, QFLAG_MAP, false, true);
|
|
quest:SetENpc(PINE_SCENTED_PIRATE);
|
|
quest:SetENpc(BARITONE_PIRATE);
|
|
quest:SetENpc(BAYARD);
|
|
quest:SetENpc(DISGRUNTLED_PIRATE);
|
|
elseif (sequence == SEQ_060) then
|
|
quest:SetENpc(TRIGGER_FSH, QFLAG_MAP, false, true);
|
|
quest:SetENpc(BADERON);
|
|
elseif (sequence == SEQ_070) then
|
|
quest:SetENpc(TRIGGER_SEAFLD, QFLAG_MAP, false, true);
|
|
quest:SetENpc(NNMULIKA);
|
|
elseif (sequence == SEQ_090) then
|
|
quest:SetENpc(PTAHJHA, QFLAG_PLATE);
|
|
elseif (sequence == SEQ_100) then
|
|
quest:SetENpc(TRIGGER_ACN_LOWER, QFLAG_MAP, false, true);
|
|
quest:SetENpc(ASSESSOR);
|
|
quest:SetENpc(HALDBERK);
|
|
quest:SetENpc(LILINA);
|
|
quest:SetENpc(VOLUPTUOUS_PIRATE);
|
|
quest:SetENpc(PEACOCKISH_PIRATE);
|
|
quest:SetENpc(MERODAULYN);
|
|
quest:SetENpc(COQUETTISH_PIRATE);
|
|
quest:SetENpc(IVAN);
|
|
elseif (sequence == SEQ_110) then
|
|
quest:SetENpc(TRIGGER_ACN_UPPER, QFLAG_MAP, false, true);
|
|
elseif (sequence == SEQ_122) then
|
|
quest:SetENpc(BADERON, QFLAG_REWARD);
|
|
end
|
|
|
|
end
|
|
|
|
function onTalk(player, quest, npc)
|
|
local sequence = quest:getSequence();
|
|
local classId = npc:GetActorClassId();
|
|
|
|
if (sequence == SEQ_ACCEPT) then
|
|
if (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200");
|
|
player:EndEvent();
|
|
player:AcceptQuest(quest, true);
|
|
return;
|
|
end
|
|
elseif (sequence == SEQ_000) then
|
|
seq000_010_onTalk(player, quest, npc, classId);
|
|
elseif (sequence == SEQ_010) then
|
|
if (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent215");
|
|
player:EndEvent();
|
|
quest:StartSequence(SEQ_020);
|
|
GetWorldManager():WarpToPublicArea(player);
|
|
return;
|
|
elseif (classId == YSHTOLA) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_8");
|
|
else
|
|
seq000_010_onTalk(player, quest, npc, classId);
|
|
end
|
|
elseif (sequence == SEQ_020) then
|
|
if (classId == WAEKBYRT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400");
|
|
quest:StartSequence(SEQ_030);
|
|
player:EndEvent();
|
|
GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 6, -754.03, 7.352, 382.872, 3.133);
|
|
return;
|
|
elseif (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent215_2");
|
|
end
|
|
elseif (sequence == SEQ_030 or sequence == SEQ_040) then
|
|
seq000_030_040_onTalk(player, quest, npc, classId)
|
|
elseif (sequence == SEQ_060) then
|
|
if (classId == NNMULIKA) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent600");
|
|
elseif (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent420_2");
|
|
end
|
|
elseif (sequence == SEQ_070) then
|
|
if (classId == NNMULIKA) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent600_2");
|
|
end
|
|
elseif (sequence == SEQ_090) then
|
|
if (classId == PTAHJHA) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000");
|
|
quest:StartSequence(SEQ_100);
|
|
player:EndEvent();
|
|
GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 7);
|
|
elseif (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent610_2");
|
|
end
|
|
elseif (sequence == SEQ_100) then
|
|
seq000_100_onTalk(player, quest, npc, classId)
|
|
elseif (sequence == SEQ_110) then
|
|
elseif (sequence == SEQ_122) then
|
|
if (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEventComplete");
|
|
callClientFunction(player, "delegateEvent", player, quest, "sqrwa", 300, 1, 1, 2);
|
|
player:EndEvent();
|
|
player:CompleteQuest(quest);
|
|
return;
|
|
end
|
|
end
|
|
|
|
player:EndEvent();
|
|
quest:UpdateENPCs();
|
|
end
|
|
|
|
function seq000_010_onTalk(player, quest, npc, classId)
|
|
if (classId == ADVENTURER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_2");
|
|
elseif (classId == WHISPERING_ADVENTURER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_3");
|
|
elseif (classId == UNAPPROACHABLE_ADVENTURER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_4");
|
|
elseif (classId == FISH_SMELLING_ADVENTURER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_5");
|
|
elseif (classId == SPEAR_WIELDING_ADVENTURER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_6");
|
|
elseif (classId == BADERON) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent200_7");
|
|
end
|
|
end
|
|
|
|
function seq000_030_040_onTalk(player, quest, npc, classId)
|
|
if (classId == HULKING_CUDA_KNIGHT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400_2");
|
|
elseif (classId == SOPHISTICATED_CUDA_KNIGHT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400_3");
|
|
elseif (classId == FRIGHTENED_CUDA_KNIGHT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400_4");
|
|
elseif (classId == ZEALOUS_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400_5");
|
|
elseif (classId == ENRAGED_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400_6");
|
|
elseif (classId == WAEKBYRT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent400_7");
|
|
elseif (classId == PINE_SCENTED_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent410_2");
|
|
elseif (classId == BARITONE_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent410_3");
|
|
elseif (classId == BAYARD) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent410_4");
|
|
elseif (classId == DISGRUNTLED_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent410_5");
|
|
end
|
|
end
|
|
|
|
function seq000_100_onTalk(player, quest, npc, classId)
|
|
if (classId == ASSESSOR) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_2");
|
|
elseif (classId == 0) then -- !!!MISSING DIALOG OWNER!!!
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_3");
|
|
elseif (classId == HALDBERK) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_4");
|
|
elseif (classId == LILINA) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_5");
|
|
elseif (classId == VOLUPTUOUS_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_6");
|
|
elseif (classId == PEACOCKISH_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_7");
|
|
elseif (classId == MERODAULYN) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_8");
|
|
elseif (classId == COQUETTISH_PIRATE) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_9");
|
|
elseif (classId == 0) then -- !!!MISSING DIALOG OWNER!!!
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_10");
|
|
elseif (classId == 0) then -- !!!MISSING DIALOG OWNER!!!
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_11");
|
|
elseif (classId == IVAN) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2000_12");
|
|
end
|
|
end
|
|
|
|
function onPush(player, quest, npc)
|
|
local data = quest:GetData();
|
|
local sequence = quest:getSequence();
|
|
local classId = npc:GetActorClassId();
|
|
|
|
if (sequence == SEQ_000) then
|
|
if (classId == TRIGGER_ADVGUILD) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent210");
|
|
quest:StartSequence(SEQ_010);
|
|
end
|
|
elseif (sequence == SEQ_030) then
|
|
if (classId == TRIGGER_MRD) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent410");
|
|
quest:StartSequence(SEQ_040);
|
|
player:EndEvent();
|
|
GetWorldManager():WarpToPosition(player, -764.519, -3.146, 384.154, 1.575);
|
|
return;
|
|
end
|
|
elseif (sequence == SEQ_040) then
|
|
if (classId == TRIGGER_MRD) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent420");
|
|
quest:NewNpcLsMsg(1);
|
|
quest:StartSequence(SEQ_050);
|
|
player:EndEvent();
|
|
GetWorldManager():WarpToPublicArea(player);
|
|
return;
|
|
end
|
|
elseif (sequence == SEQ_060) then
|
|
if (classId == TRIGGER_FSH) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent600");
|
|
quest:StartSequence(SEQ_070);
|
|
end
|
|
elseif (sequence == SEQ_070) then
|
|
if (classId == TRIGGER_SEAFLD) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent610");
|
|
quest:NewNpcLsMsg(1);
|
|
quest:StartSequence(SEQ_080);
|
|
end
|
|
elseif (sequence == SEQ_100) then
|
|
if (classId == TRIGGER_ACN_LOWER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2001");
|
|
quest:StartSequence(SEQ_110);
|
|
player:EndEvent();
|
|
GetWorldManager():WarpToPosition(player, -785.938, -0.62, 189.044, 3.09);
|
|
return;
|
|
end
|
|
elseif (sequence == SEQ_110) then
|
|
if (classId == TRIGGER_ACN_UPPER) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent2002");
|
|
quest:NewNpcLsMsg(1);
|
|
quest:StartSequence(SEQ_120);
|
|
player:EndEvent();
|
|
GetWorldManager():WarpToPublicArea(player);
|
|
return;
|
|
end
|
|
end
|
|
|
|
player:EndEvent();
|
|
quest:UpdateENPCs();
|
|
end
|
|
|
|
function onNpcLS(player, quest, from, msgStep)
|
|
local sequence = quest:getSequence();
|
|
local msgPack;
|
|
|
|
if (from == 1) then
|
|
-- Get the right msg pack
|
|
if (sequence == SEQ_050 or sequence == SEQ_060) then
|
|
msgPack = 1;
|
|
elseif (sequence == SEQ_080 or sequence == SEQ_090) then
|
|
msgPack = 2;
|
|
elseif (sequence == SEQ_120 or sequence == SEQ_122) then
|
|
msgPack = 3;
|
|
end
|
|
|
|
-- Quick way to handle all msgs nicely.
|
|
player:SendGameMessageLocalizedDisplayName(quest, NPCLS_MSGS[msgPack][msgStep], MESSAGE_TYPE_NPC_LINKSHELL, 1000015);
|
|
if (msgStep >= #NPCLS_MSGS[msgPack]) then
|
|
quest:EndOfNpcLsMsgs();
|
|
else
|
|
quest:ReadNpcLsMsg();
|
|
end
|
|
|
|
-- Handle anything else
|
|
if (sequence == SEQ_050) then
|
|
quest:StartSequenceForNpcLs(SEQ_060);
|
|
elseif (sequence == SEQ_080) then
|
|
quest:StartSequenceForNpcLs(SEQ_090);
|
|
elseif (sequence == SEQ_120) then
|
|
quest:StartSequenceForNpcLs(SEQ_122);
|
|
end
|
|
end
|
|
|
|
player:EndEvent();
|
|
end
|
|
|
|
function getJournalMapMarkerList(player, quest)
|
|
local sequence = quest:getSequence();
|
|
|
|
end |