mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-07-22 10:36:06 +02:00
- Man0u0 about as polished as one can get the Talking sections for now, minus some very specific retail quirks that need replicating at some point (all revolving around the starting 15 seconds of the forced tutorial)
- Man0u1 barely started. Just enough there to get the player out of the PrivateArea and into the public zone. - All of the old Populace uniqueId scripts for both quests nuked into high orbit. - DftSea: Master list of function names and argument counts added to the list. Will be whittling away at this over the coming week. - GM Warp: For whatever reason using "" to compare against a nil wasn't working anymore. Set it to nil instead.
This commit is contained in:
parent
acf953e909
commit
b6c9825b2d
33 changed files with 360 additions and 456 deletions
|
@ -4,13 +4,17 @@ require("global");
|
|||
|
||||
Quest Script
|
||||
|
||||
Name: Flowers for All
|
||||
Name: Flowers for All
|
||||
Code: Man0u0
|
||||
Id: 110009
|
||||
Prereq: None (Given on chara creation)
|
||||
Notes: RURURAJI scripting handled via PopulaceChocoboLender.lua
|
||||
TO-DO: Sequence 000 - Crowd NPCs.
|
||||
TO-DO: Sequence 000 - Crowd NPCs.
|
||||
Sequence 010 - Adv. Guild NPCs
|
||||
|
||||
|
||||
https://www.youtube.com/watch?v=XXGrSFrfYo4
|
||||
|
||||
]]
|
||||
|
||||
-- Sequence Numbers
|
||||
|
@ -36,7 +40,7 @@ OPENING_STOPER_ULDAH = 1090373;
|
|||
|
||||
|
||||
KEEN_EYED_MERCHANT = 1000401;
|
||||
-- MUMPISH_MIQOTE = 1000992; -- Unused on this client version
|
||||
--MUMPISH_MIQOTE = 1000992; -- Unused on this client version. Calls processEvent020_6
|
||||
HIGH_SPIRITED_FELLOW = 1001042;
|
||||
DISREPUTABLE_MIDLANDER = 1001044;
|
||||
LONG_LEGGED_LADY = 1001112;
|
||||
|
@ -45,11 +49,33 @@ TOOTH_GRINDING_TRAVELER = 1001646;
|
|||
FULL_LIPPED_FILLE = 1001647;
|
||||
YAYATOKI = 1500129;
|
||||
|
||||
BLOCKER1 = 1090372;
|
||||
BLOCKER2 = 1090372;
|
||||
BLOCKER = 1090372;
|
||||
ULDAH_OPENING_EXIT = 1099046;
|
||||
--1001114-1001140: Untargetable standby actors for sequence 000: Add the correct ones at some point
|
||||
|
||||
-- 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;
|
||||
|
||||
|
||||
-- Quest Markers
|
||||
|
@ -70,7 +96,7 @@ FLAG_SEQ000_MINITUT3 = 3; -- TalkEvent GIL_DIGGING_MISTRESS
|
|||
FLAG_SEQ010_TALK0 = 0; -- TalkEvent YAYATOKI
|
||||
|
||||
|
||||
function onStart(player, quest)
|
||||
function onStart(player, quest)
|
||||
quest:StartSequence(SEQ_000);
|
||||
end
|
||||
|
||||
|
@ -82,17 +108,17 @@ function onSequence(player, quest, sequence)
|
|||
if (sequence == SEQ_000) then
|
||||
-- Setup states incase we loaded in.
|
||||
local asciliaCanPush = not quest:GetFlag(FLAG_SEQ000_MINITUT0);
|
||||
local asciliaFlag = quest:GetFlag(FLAG_SEQ000_MINITUT1) and QFLAG_NONE or QFLAG_PLATE;
|
||||
local asciliaFlag = quest:GetFlag(FLAG_SEQ000_MINITUT1) and QFLAG_NONE or QFLAG_PLATE;
|
||||
local fretfulfarmhandFlag = quest:GetFlag(FLAG_SEQ000_MINITUT2) and QFLAG_NONE or QFLAG_PLATE;
|
||||
local gildiggingmistressFlag = quest:GetFlag(FLAG_SEQ000_MINITUT3) and QFLAG_NONE or QFLAG_PLATE;
|
||||
|
||||
local exitFlag = quest:GetFlags() == 0xF and QFLAG_MAP or QFLAG_NONE;
|
||||
local gildiggingmistressFlag = quest:GetFlag(FLAG_SEQ000_MINITUT3) and QFLAG_NONE or QFLAG_PLATE;
|
||||
|
||||
local exitFlag = quest:GetFlags() == 0xF and QFLAG_MAP or QFLAG_NONE;
|
||||
|
||||
if (asciliaCanPush) then
|
||||
fretfulfarmhandFlag = QFLAG_NONE;
|
||||
gildiggingmistressFlag = QFLAG_NONE;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--AddENpc(classId, byte flagType=0,isTalkEnabled, isPushEnabled, isEmoteEnabled, isSpawned)
|
||||
quest:AddENpc(ASCILIA, asciliaFlag, true, asciliaCanPush);
|
||||
quest:AddENpc(WARBURTON);
|
||||
|
@ -108,9 +134,9 @@ function onSequence(player, quest, sequence)
|
|||
quest:AddENpc(EXIT_TRIGGER, exitFlag, false, true);
|
||||
quest:AddENpc(OPENING_STOPER_ULDAH, QFLAG_NONE, false, false, true);
|
||||
|
||||
elseif (sequence == SEQ_010) then
|
||||
elseif (sequence == SEQ_010) then
|
||||
local yayatokiFlag = quest:GetFlag(FLAG_SEQ010_TALK0) and QFLAG_NONE or QFLAG_PLATE;
|
||||
local uldahopeningexitFlag = not quest:GetFlag(FLAG_SEQ010_TALK0) and QFLAG_NONE or QFLAG_MAP;
|
||||
local uldahopeningexitFlag = QFLAG_MAP;
|
||||
quest:AddENpc(KEEN_EYED_MERCHANT);
|
||||
quest:AddENpc(HIGH_SPIRITED_FELLOW);
|
||||
quest:AddENpc(DISREPUTABLE_MIDLANDER);
|
||||
|
@ -119,8 +145,7 @@ function onSequence(player, quest, sequence)
|
|||
quest:AddENpc(TOOTH_GRINDING_TRAVELER);
|
||||
quest:AddENpc(FULL_LIPPED_FILLE);
|
||||
quest:AddENpc(YAYATOKI, yayatokiFlag);
|
||||
quest:AddENpc(BLOCKER1, QFLAG_NONE, false, true);
|
||||
-- quest:AddENpc(BLOCKER2, QFLAG_NONE, false, true);
|
||||
quest:AddENpc(BLOCKER, QFLAG_NONE, false, true);
|
||||
quest:AddENpc(ULDAH_OPENING_EXIT, uldahopeningexitFlag, false, true);
|
||||
end
|
||||
end
|
||||
|
@ -128,39 +153,39 @@ end
|
|||
function onTalk(player, quest, npc)
|
||||
local sequence = quest:getSequence();
|
||||
local classId = npc:GetActorClassId();
|
||||
|
||||
|
||||
if (sequence == SEQ_000) then
|
||||
seq000_onTalk(player, quest, npc, classId);
|
||||
elseif (sequence == SEQ_010) then
|
||||
seq010_onTalk(player, quest, npc, classId);
|
||||
seq010_onTalk(player, quest, npc, classId);
|
||||
end
|
||||
quest:UpdateENPCs();
|
||||
quest:UpdateENPCs();
|
||||
end
|
||||
|
||||
function onPush(player, quest, npc)
|
||||
|
||||
local sequence = quest:getSequence();
|
||||
local classId = npc:GetActorClassId();
|
||||
local classId = npc:GetActorClassId();
|
||||
|
||||
if (sequence == SEQ_000) then
|
||||
if (classId == ASCILIA) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal002");
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal002");
|
||||
player:EndEvent();
|
||||
elseif (classId == EXIT_TRIGGER) then
|
||||
if (quest:GetFlags() == 0xF) then
|
||||
doExitTrigger(player, quest, npc);
|
||||
return;
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrBlkNml001");
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrBlkNml001");
|
||||
GetWorldManager():DoPlayerMoveInZone(player, -22, 196, 87, 2.4, 0x11)
|
||||
player:EndEvent();
|
||||
end
|
||||
end
|
||||
elseif (sequence == SEQ_010) then
|
||||
if (classId == BLOCKER1) 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);
|
||||
|
@ -168,48 +193,48 @@ function onPush(player, quest, npc)
|
|||
callClientFunction(player, "delegateEvent", player, quest, "processTtrBlkNml003");
|
||||
GetWorldManager():DoPlayerMoveInZone(player, -0.3, 196, 116, -2.7, 0x11);
|
||||
end
|
||||
elseif (classId == ULDAH_OPENING_EXIT) then
|
||||
elseif (classId == ULDAH_OPENING_EXIT) then
|
||||
player:ReplaceQuest(quest, "Man0u1")
|
||||
return;
|
||||
end
|
||||
end
|
||||
quest:UpdateENPCs();
|
||||
quest:UpdateENPCs();
|
||||
end
|
||||
|
||||
function onNotice(player, quest, target)
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ");
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ");
|
||||
player:EndEvent();
|
||||
quest:UpdateENPCs();
|
||||
quest:UpdateENPCs();
|
||||
end
|
||||
|
||||
function seq000_onTalk(player, quest, npc, classId)
|
||||
|
||||
|
||||
if (classId == ASCILIA) then
|
||||
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT0)) then -- If Talk tutorial
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal003");
|
||||
quest:SetFlag(FLAG_SEQ000_MINITUT0); -- Used to disable her PushEvent / Allow for her next TalkEvent
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini001");
|
||||
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT0)) then -- If Talk tutorial
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal003");
|
||||
quest:SetFlag(FLAG_SEQ000_MINITUT0); -- Used to disable her PushEvent / Allow for her next TalkEvent
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini001");
|
||||
quest:SetFlag(FLAG_SEQ000_MINITUT1); -- Ascilia has now been talked to.
|
||||
end
|
||||
|
||||
elseif (classId == FRETFUL_FARMHAND) then
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT2)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002_first");
|
||||
quest:SetFlag(FLAG_SEQ000_MINITUT2);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002");
|
||||
end
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002_first");
|
||||
quest:SetFlag(FLAG_SEQ000_MINITUT2);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002");
|
||||
end
|
||||
|
||||
elseif (classId == GIL_DIGGING_MISTRESS) then
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT3)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini003_first");
|
||||
quest:SetFlag(FLAG_SEQ000_MINITUT3);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini003");
|
||||
end
|
||||
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini003_first");
|
||||
quest: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
|
||||
|
@ -231,10 +256,10 @@ function seq000_onTalk(player, quest, npc, classId)
|
|||
player:EndEvent();
|
||||
end
|
||||
|
||||
function seq010_onTalk(player, quest, npc, classId)
|
||||
function seq010_onTalk(player, quest, npc, classId)
|
||||
|
||||
if (classId == KEEN_EYED_MERCHANT) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent020_2");
|
||||
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
|
||||
|
@ -262,22 +287,21 @@ end
|
|||
function getJournalMapMarkerList(player, quest)
|
||||
local sequence = quest:getSequence();
|
||||
local possibleMarkers = {};
|
||||
|
||||
|
||||
if (sequence == SEQ_000) then
|
||||
if (quest:GetFlag(FLAG_SEQ000_MINITUT0)) then
|
||||
if (quest:GetFlag(FLAG_SEQ000_MINITUT0)) then
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT1)) then table.insert(possibleMarkers, MRKR_ASCILIA); end
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT2)) then table.insert(possibleMarkers, MRKR_FRETFUL_FARMHAND); end
|
||||
if (not quest:GetFlag(FLAG_SEQ000_MINITUT3)) then table.insert(possibleMarkers, MRKR_GIL_DIGGING_MISTRESS); end
|
||||
end
|
||||
|
||||
|
||||
elseif (sequence == SEQ_010) then
|
||||
if (not quest:GetFlag(FLAG_SEQ010_TALK0)) then
|
||||
if (not quest:GetFlag(FLAG_SEQ010_TALK0)) then
|
||||
table.insert(possibleMarkers, MRKR_YAYATOKI)
|
||||
else
|
||||
table.insert(possibleMarkers, MRKR_ADV_GUILD);
|
||||
end
|
||||
table.insert(possibleMarkers, MRKR_ADV_GUILD);
|
||||
end
|
||||
|
||||
|
||||
return unpack(possibleMarkers)
|
||||
end
|
||||
|
||||
|
@ -288,19 +312,19 @@ function doExitTrigger(player, quest, npc)
|
|||
quest:ClearData();
|
||||
quest:StartSequence(SEQ_005);
|
||||
contentArea = player.CurrentArea:CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0u01", "SimpleContent30079", "Quest/QuestDirectorMan0u001");
|
||||
|
||||
|
||||
if (contentArea == nil) then
|
||||
return;
|
||||
end
|
||||
|
||||
director = contentArea:GetContentDirector();
|
||||
player:AddDirector(director);
|
||||
|
||||
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);
|
||||
player:SetLoginDirector(director);
|
||||
|
||||
GetWorldManager():DoZoneChangeContent(player, contentArea, -24.34, 192, 34.22, 0.78, 16);
|
||||
return;
|
||||
end
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ SPRY_SALESMAN = 1000939;
|
|||
UPBEAT_ADVENTURER = 1000940;
|
||||
SEEMINGLY_CALM_ADVENTURER = 1000941;
|
||||
UNKNOWN1 = 0;
|
||||
UNKNOWN2 = 0
|
||||
UNKNOWN2 = 0;
|
||||
|
||||
THANCRED = 1000948; -- 1000010
|
||||
|
||||
|
@ -119,6 +119,7 @@ function onStart(player, quest)
|
|||
|
||||
-- Immediately move to the Adventurer's Guild private area
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventMomodiStart");
|
||||
GetWorldManager():DoZoneChange(player, 175, "PrivateAreaMasterPast", 4, 15, -75.242, 195.009, 74.572, -0.046);
|
||||
player:SendGameMessage(quest, 329, 0x20);
|
||||
player:SendGameMessage(quest, 330, 0x20);
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue