1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-21 20:27:47 +00:00
project-meteor-server/Data/scripts/quests/man/man0u0.lua

333 lines
12 KiB
Lua
Raw Normal View History

2022-02-06 12:36:15 -05:00
require("global");
--[[
Quest Script
Name: Flowers for All
2022-02-06 12:36:15 -05:00
Code: Man0u0
Id: 110009
Prereq: None (Given on chara creation)
Notes: RURURAJI scripting handled via PopulaceChocoboLender.lua
TO-DO: Sequence 000 - Crowd NPCs.
Sequence 010 - Adv. Guild NPCs
https://www.youtube.com/watch?v=XXGrSFrfYo4
2022-02-06 12:36:15 -05:00
]]
-- Sequence Numbers
SEQ_000 = 0; -- On the Merchant Strip in Ul'dah; contains the basic tutorial.
SEQ_005 = 5; -- Combat on the Sapphire Avenue Exchange
SEQ_010 = 10; -- Back on the Merchant Strip in Ul'dah
-- Actor Class Ids
ASCILIA = 1000042;
WARBURTON = 1000186;
RURURAJI = 1000840;
BIG_BELLIED_BARKER = 1001490;
FRETFUL_FARMHAND = 1001491;
DEBAUCHED_DEMONESS = 1001492;
DAPPER_DAN = 1001493;
LOUTISH_LAD = 1001494;
GIL_DIGGING_MISTRESS = 1001495;
TWITTERING_TOMBOY = 1001496;
STOCKY_STRANGER = 1001644;
EXIT_TRIGGER = 1090372;
OPENING_STOPER_ULDAH = 1090373;
KEEN_EYED_MERCHANT = 1000401;
--MUMPISH_MIQOTE = 1000992; -- Unused on this client version. Calls processEvent020_6
HIGH_SPIRITED_FELLOW = 1001042;
DISREPUTABLE_MIDLANDER = 1001044;
LONG_LEGGED_LADY = 1001112;
LARGE_LUNGED_LABORER = 1001645;
TOOTH_GRINDING_TRAVELER = 1001646;
FULL_LIPPED_FILLE = 1001647;
YAYATOKI = 1500129;
BLOCKER = 1090372;
ULDAH_OPENING_EXIT = 1099046;
2022-02-06 12:36:15 -05:00
-- Non-interactive NPCs
CROWD_HYUR_M = 1001114;
CROWD_HYUR_F = 1001115;
CROWD_ELEZEN_M = 1001116;
CROWD_ELEZEN_F = 1001117;
CROWD_LALAFELL_M = 1001118;
CROWD_LALAFELL_F = 1001119;
CROWD_MIQOTE = 1001120;
CROWD_ROEGADYN = 1001121;
GUILD_KIORA = 1000780;
GUILD_OPONDHAO = 1000781;
GUILD_BERTRAM = 1000782;
GUILD_MINERVA = 1000783;
GUILD_ZOENGTERBIN = 1000784;
GUILD_STYRMOEYA = 1000785;
GUILD_YHAH_AMARIYO = 1000786;
GUILD_HILDIE = 1000787;
GUILD_LETTICE = 1000788;
GUILD_TYON = 1000789;
GUILD_OTOPA_POTTOPA = 1000864;
GUILD_THAISIE = 1000865;
GUILD_SESEBARU = 1001182;
GUILD_TOTONAWA = 1001371;
GUILD_EUSTACE = 1001372;
2022-02-06 12:36:15 -05:00
-- Quest Markers
MRKR_YAYATOKI = 11000901;
MRKR_ASCILIA = 11000902;
MRKR_FRETFUL_FARMHAND = 11000903;
MRKR_GIL_DIGGING_MISTRESS = 11000904;
MRKR_COMBAT_TUTORIAL = 11000905;
MRKR_ADV_GUILD = 11000906;
2022-02-06 12:36:15 -05:00
-- Quest Flags
FLAG_SEQ000_MINITUT0 = 0; -- PushEvent ASCILIA
FLAG_SEQ000_MINITUT1 = 1; -- TalkEvent ASCILIA
FLAG_SEQ000_MINITUT2 = 2; -- TalkEvent FRETFUL_FARMHAND
FLAG_SEQ000_MINITUT3 = 3; -- TalkEvent GIL_DIGGING_MISTRESS
2022-02-06 12:36:15 -05:00
FLAG_SEQ010_TALK0 = 0; -- TalkEvent YAYATOKI
2022-02-06 12:36:15 -05:00
function onStart(player, quest)
2022-02-06 12:36:15 -05:00
quest:StartSequence(SEQ_000);
end
function onFinish(player, quest)
end
2022-02-16 15:32:54 -05:00
function onStateChange(player, quest, sequence)
local data = quest:GetData();
2022-02-06 12:36:15 -05:00
if (sequence == SEQ_000) then
-- Setup states incase we loaded in.
local asciliaCanPush = not data:GetFlag(FLAG_SEQ000_MINITUT0);
local asciliaFlag = data:GetFlag(FLAG_SEQ000_MINITUT1) and QFLAG_NONE or QFLAG_PLATE;
local fretfulfarmhandFlag = data:GetFlag(FLAG_SEQ000_MINITUT2) and QFLAG_NONE or QFLAG_PLATE;
local gildiggingmistressFlag = data:GetFlag(FLAG_SEQ000_MINITUT3) and QFLAG_NONE or QFLAG_PLATE;
local exitFlag = data:GetFlags() == 0xF and QFLAG_MAP or QFLAG_NONE;
2022-02-06 12:36:15 -05:00
if (asciliaCanPush) then
fretfulfarmhandFlag = QFLAG_NONE;
gildiggingmistressFlag = QFLAG_NONE;
end
2022-02-16 15:32:54 -05:00
--SetENpc(classId, byte flagType=0,isTalkEnabled, isPushEnabled, isEmoteEnabled, isSpawned)
quest:SetENpc(ASCILIA, asciliaFlag, true, asciliaCanPush);
quest:SetENpc(WARBURTON);
quest:SetENpc(RURURAJI);
quest:SetENpc(BIG_BELLIED_BARKER);
quest:SetENpc(FRETFUL_FARMHAND, fretfulfarmhandFlag);
quest:SetENpc(DEBAUCHED_DEMONESS);
quest:SetENpc(DAPPER_DAN);
quest:SetENpc(LOUTISH_LAD);
quest:SetENpc(GIL_DIGGING_MISTRESS, gildiggingmistressFlag);
quest:SetENpc(TWITTERING_TOMBOY);
quest:SetENpc(STOCKY_STRANGER);
quest:SetENpc(EXIT_TRIGGER, exitFlag, false, true);
quest:SetENpc(OPENING_STOPER_ULDAH, QFLAG_NONE, false, false, true);
2022-02-06 12:36:15 -05:00
elseif (sequence == SEQ_010) then
local yayatokiFlag = data:GetFlag(FLAG_SEQ010_TALK0) and QFLAG_NONE or QFLAG_PLATE;
local uldahopeningexitFlag = QFLAG_MAP;
2022-02-16 15:32:54 -05:00
quest:SetENpc(KEEN_EYED_MERCHANT);
quest:SetENpc(HIGH_SPIRITED_FELLOW);
quest:SetENpc(DISREPUTABLE_MIDLANDER);
quest:SetENpc(LONG_LEGGED_LADY);
quest:SetENpc(LARGE_LUNGED_LABORER);
quest:SetENpc(TOOTH_GRINDING_TRAVELER);
quest:SetENpc(FULL_LIPPED_FILLE);
quest:SetENpc(YAYATOKI, yayatokiFlag);
quest:SetENpc(BLOCKER, QFLAG_NONE, false, true);
quest:SetENpc(ULDAH_OPENING_EXIT, uldahopeningexitFlag, false, true);
2022-02-06 12:36:15 -05:00
end
end
function onTalk(player, quest, npc)
local sequence = quest:getSequence();
local classId = npc:GetActorClassId();
2022-02-06 12:36:15 -05:00
if (sequence == SEQ_000) then
seq000_onTalk(player, quest, npc, classId);
elseif (sequence == SEQ_010) then
seq010_onTalk(player, quest, npc, classId);
2022-02-06 12:36:15 -05:00
end
quest:UpdateENPCs();
2022-02-06 12:36:15 -05:00
end
function onPush(player, quest, npc)
local sequence = quest:getSequence();
local classId = npc:GetActorClassId();
local data = quest:GetData();
2022-02-06 12:36:15 -05:00
if (sequence == SEQ_000) then
if (classId == ASCILIA) then
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal002");
2022-02-06 12:36:15 -05:00
player:EndEvent();
elseif (classId == EXIT_TRIGGER) then
if (data:GetFlags() == 0xF) then
doExitTrigger(player, quest, npc);
return;
else
callClientFunction(player, "delegateEvent", player, quest, "processTtrBlkNml001");
GetWorldManager():DoPlayerMoveInZone(player, -22, 196, 87, 2.4, 0x11)
player:EndEvent();
end
2022-02-06 12:36:15 -05:00
end
elseif (sequence == SEQ_010) then
if (classId == BLOCKER) then
posz = player:GetPos()[3];
if (posz >= 71 and posz <= 95) then
callClientFunction(player, "delegateEvent", player, quest, "processTtrBlkNml002");
GetWorldManager():DoPlayerMoveInZone(player, -22.81, 196, 87.82, 2.98, 0x11);
else
callClientFunction(player, "delegateEvent", player, quest, "processTtrBlkNml003");
GetWorldManager():DoPlayerMoveInZone(player, -0.3, 196, 116, -2.7, 0x11);
end
elseif (classId == ULDAH_OPENING_EXIT) then
player:ReplaceQuest(quest, "Man0u1")
return;
end
2022-02-06 12:36:15 -05:00
end
quest:UpdateENPCs();
2022-02-06 12:36:15 -05:00
end
function onNotice(player, quest, target)
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ");
2022-02-06 12:36:15 -05:00
player:EndEvent();
quest:UpdateENPCs();
2022-02-06 12:36:15 -05:00
end
function seq000_onTalk(player, quest, npc, classId)
local data = quest:GetData();
2022-02-06 12:36:15 -05:00
if (classId == ASCILIA) then
if (not data:GetFlag(FLAG_SEQ000_MINITUT0)) then -- If Talk tutorial
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal003");
quest:GetData():SetFlag(FLAG_SEQ000_MINITUT0); -- Used to disable her PushEvent / Allow for her next TalkEvent
else
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini001");
quest:GetData():SetFlag(FLAG_SEQ000_MINITUT1); -- Ascilia has now been talked to.
2022-02-06 12:36:15 -05:00
end
2022-02-06 12:36:15 -05:00
elseif (classId == FRETFUL_FARMHAND) then
if (not data:GetFlag(FLAG_SEQ000_MINITUT2)) then
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002_first");
data:SetFlag(FLAG_SEQ000_MINITUT2);
else
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002");
end
2022-02-06 12:36:15 -05:00
elseif (classId == GIL_DIGGING_MISTRESS) then
if (not data:GetFlag(FLAG_SEQ000_MINITUT3)) then
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini003_first");
data:SetFlag(FLAG_SEQ000_MINITUT3);
else
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini003");
end
elseif (classId == WARBURTON) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_3");
elseif (classId == RURURAJI) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_13");
elseif (classId == BIG_BELLIED_BARKER) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_6");
elseif (classId == DEBAUCHED_DEMONESS) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_8");
elseif (classId == DAPPER_DAN) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_9");
elseif (classId == LOUTISH_LAD) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_10");
2022-02-06 12:36:15 -05:00
elseif (classId == TWITTERING_TOMBOY) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_12");
elseif (classId == STOCKY_STRANGER) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_6_2");
2022-02-06 12:36:15 -05:00
end
player:EndEvent();
end
function seq010_onTalk(player, quest, npc, classId)
if (classId == KEEN_EYED_MERCHANT) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_2");
elseif (classId == HIGH_SPIRITED_FELLOW) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_3");
elseif (classId == DISREPUTABLE_MIDLANDER) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_4");
elseif (classId == LONG_LEGGED_LADY) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_14");
elseif (classId == LARGE_LUNGED_LABORER) then
callClientFunction(player, "delegateEvent", player, quest, "processEtc003");
elseif (classId == TOOTH_GRINDING_TRAVELER) then
callClientFunction(player, "delegateEvent", player, quest, "processEtc001");
elseif (classId == FULL_LIPPED_FILLE) then
callClientFunction(player, "delegateEvent", player, quest, "processEtc002");
elseif (classId == YAYATOKI) then
if (not quest:GetData():GetFlag(FLAG_SEQ010_TALK0)) then
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_8");
quest:GetData():SetFlag(FLAG_SEQ010_TALK0);
else
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_8");
end
end
2022-02-06 12:36:15 -05:00
player:EndEvent();
end
function getJournalMapMarkerList(player, quest)
local sequence = quest:getSequence();
local data = quest:GetData();
local possibleMarkers = {};
2022-02-06 12:36:15 -05:00
if (sequence == SEQ_000) then
if (data:GetFlag(FLAG_SEQ000_MINITUT0)) then
if (not data:GetFlag(FLAG_SEQ000_MINITUT1)) then table.insert(possibleMarkers, MRKR_ASCILIA); end
if (not data:GetFlag(FLAG_SEQ000_MINITUT2)) then table.insert(possibleMarkers, MRKR_FRETFUL_FARMHAND); end
if (not data:GetFlag(FLAG_SEQ000_MINITUT3)) then table.insert(possibleMarkers, MRKR_GIL_DIGGING_MISTRESS); end
end
2022-02-06 12:36:15 -05:00
elseif (sequence == SEQ_010) then
if (not data:GetFlag(FLAG_SEQ010_TALK0)) then
table.insert(possibleMarkers, MRKR_YAYATOKI)
end
table.insert(possibleMarkers, MRKR_ADV_GUILD);
end
return unpack(possibleMarkers)
end
function doExitTrigger(player, quest, npc)
quest:GetData():ClearData();
quest:StartSequence(SEQ_005);
contentArea = player.CurrentArea:CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0u01", "SimpleContent30079", "Quest/QuestDirectorMan0u001");
if (contentArea == nil) then
return;
2022-02-06 12:36:15 -05:00
end
director = contentArea:GetContentDirector();
player:AddDirector(director);
director:StartDirector(false);
player:KickEvent(director, "noticeEvent", true);
player:SetLoginDirector(director);
GetWorldManager():DoZoneChangeContent(player, contentArea, -24.34, 192, 34.22, 0.78, 16);
return;
end