mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-21 20:27:47 +00:00
164 lines
5.4 KiB
Lua
164 lines
5.4 KiB
Lua
require("global");
|
|
|
|
--[[
|
|
|
|
Quest Script
|
|
|
|
Name: Hearing Confession
|
|
Code: Wld0g2
|
|
Id: 110763
|
|
Prereq: Level 10 on any class.
|
|
Notes: Rewards 200 gil
|
|
|
|
]]
|
|
|
|
-- Sequence Numbers
|
|
SEQ_000 = 0; -- Talk to the four lost souls.
|
|
SEQ_001 = 1; -- Return to Swaenhylt
|
|
|
|
-- Actor Class Ids
|
|
SWAENHYLT = 1001582;
|
|
FLAVIELLE = 1001459;
|
|
KEKETO = 1001346;
|
|
CEADDA = 1000330;
|
|
THIMM = 1001439;
|
|
|
|
-- Quest Markers
|
|
MRKR_FLAVIELLE = 11120101;
|
|
MRKR_KEKETO = 11120102;
|
|
MRKR_CEADDA = 11120103;
|
|
MRKR_THIMM = 11120104;
|
|
MRKR_SWAENHYLT = 11120105;
|
|
|
|
-- Quest Flags
|
|
FLAG_TALKED_FLAVIELLE = 0;
|
|
FLAG_TALKED_KEKETO = 1;
|
|
FLAG_TALKED_CEADDA = 2;
|
|
FLAG_TALKED_THIMM = 3;
|
|
|
|
-- Quest Counters
|
|
COUNTER_TALKED = 0;
|
|
|
|
function onStart(player, quest)
|
|
quest:StartSequence(SEQ_000);
|
|
end
|
|
|
|
function onFinish(player, quest)
|
|
end
|
|
|
|
function onStateChange(player, quest, sequence)
|
|
if (sequence == SEQ_ACCEPT) then
|
|
quest:SetENpc(SWAENHYLT, QFLAG_PLATE);
|
|
elseif (sequence == SEQ_000) then
|
|
local data = quest:GetData();
|
|
quest:SetENpc(SWAENHYLT);
|
|
quest:SetENpc(FLAVIELLE, (not data:GetFlag(FLAG_TALKED_FLAVIELLE) and QFLAG_PLATE or QFLAG_NONE));
|
|
quest:SetENpc(KEKETO, (not data:GetFlag(FLAG_TALKED_KEKETO) and QFLAG_PLATE or QFLAG_NONE));
|
|
quest:SetENpc(CEADDA, (not data:GetFlag(FLAG_TALKED_CEADDA) and QFLAG_PLATE or QFLAG_NONE));
|
|
quest:SetENpc(THIMM, (not data:GetFlag(FLAG_TALKED_THIMM) and QFLAG_PLATE or QFLAG_NONE));
|
|
elseif (sequence == SEQ_001) then
|
|
quest:SetENpc(SWAENHYLT, QFLAG_REWARD);
|
|
end
|
|
end
|
|
|
|
function onTalk(player, quest, npc)
|
|
local sequence = quest:getSequence();
|
|
local classId = npc:GetActorClassId();
|
|
|
|
if (sequence == SEQ_ACCEPT) then
|
|
local questAccepted = callClientFunction(player, "delegateEvent", player, quest, "processEventSwaenhyltStart");
|
|
if (questAccepted == 1) then
|
|
player:AcceptQuest(quest);
|
|
end
|
|
player:EndEvent();
|
|
return;
|
|
elseif (sequence == SEQ_000) then
|
|
local incCounter = false;
|
|
local data = quest:GetData();
|
|
|
|
if (classId == SWAENHYLT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_2");
|
|
elseif (classId == FLAVIELLE) then
|
|
if (not data:GetFlag(FLAG_TALKED_FLAVIELLE)) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent005");
|
|
data:SetFlag(FLAG_TALKED_FLAVIELLE);
|
|
incCounter = true;
|
|
else
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent005_2");
|
|
end
|
|
elseif (classId == KEKETO) then
|
|
if (not data:GetFlag(FLAG_TALKED_KEKETO)) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent010");
|
|
data:SetFlag(FLAG_TALKED_KEKETO);
|
|
incCounter = true;
|
|
else
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent010_2");
|
|
end
|
|
elseif (classId == CEADDA) then
|
|
if (not data:GetFlag(FLAG_TALKED_CEADDA)) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent015");
|
|
data:SetFlag(FLAG_TALKED_CEADDA);
|
|
incCounter = true;
|
|
else
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent015_2");
|
|
end
|
|
elseif (classId == THIMM) then
|
|
if (not data:GetFlag(FLAG_TALKED_THIMM)) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent020");
|
|
data:SetFlag(FLAG_TALKED_THIMM);
|
|
incCounter = true;
|
|
else
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_2");
|
|
end
|
|
end
|
|
|
|
-- Increase objective counter & play relevant messages
|
|
if (incCounter == true) then
|
|
local counterAmount = data:IncCounter(COUNTER_TALKED);
|
|
|
|
attentionMessage(player, 51063, 0, counterAmount, 4); -- You have heard a lost soul's confession. (... of 5)
|
|
|
|
if (seq000_checkCondition(data)) then -- All lost souls spoken to
|
|
attentionMessage(player, 25225, quest:GetQuestId()); -- "Hearing Confessions" objectives complete!
|
|
quest:UpdateENPCs(); -- Band-aid for a QFLAG_PLATE issue
|
|
quest:StartSequence(SEQ_001);
|
|
end
|
|
end
|
|
elseif (sequence == SEQ_001) then
|
|
if (classId == SWAENHYLT) then
|
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent025");
|
|
callClientFunction(player, "delegateEvent", player, quest, "sqrwa", 200, 1, 1, 9);
|
|
player:CompleteQuest(quest);
|
|
end
|
|
end
|
|
player:EndEvent()
|
|
quest:UpdateENPCs();
|
|
end
|
|
|
|
-- Check if all souls are talked to
|
|
function seq000_checkCondition(data)
|
|
return (data:GetFlag(FLAG_TALKED_FLAVIELLE) and
|
|
data:GetFlag(FLAG_TALKED_KEKETO) and
|
|
data:GetFlag(FLAG_TALKED_CEADDA) and
|
|
data:GetFlag(FLAG_TALKED_THIMM));
|
|
end
|
|
|
|
function getJournalMapMarkerList(player, quest)
|
|
local sequence = quest:getSequence();
|
|
local data = quest:GetData();
|
|
local possibleMarkers = {};
|
|
|
|
if (sequence == SEQ_000) then
|
|
if (not data:GetFlag(FLAG_TALKED_FLAVIELLE)) then table.insert(possibleMarkers, MRKR_FLAVIELLE); end
|
|
if (not data:GetFlag(FLAG_TALKED_KEKETO)) then table.insert(possibleMarkers, MRKR_KEKETO); end
|
|
if (not data:GetFlag(FLAG_TALKED_CEADDA)) then table.insert(possibleMarkers, MRKR_CEADDA); end
|
|
if (not data:GetFlag(FLAG_TALKED_THIMM)) then table.insert(possibleMarkers, MRKR_THIMM); end
|
|
elseif (sequence == SEQ_001) then
|
|
table.insert(possibleMarkers, MRKR_SWAENHYLT);
|
|
end
|
|
|
|
return unpack(possibleMarkers)
|
|
end
|
|
|
|
|
|
|