mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-06-09 05:54:50 +02:00
Started mass overhaul of quests and related components like small talk. Fixed some scripts. More fixes required.
This commit is contained in:
parent
df49eefadb
commit
2279ee7017
33 changed files with 1241 additions and 279 deletions
33
Data/scripts/quests/dft/DftFst.lua
Normal file
33
Data/scripts/quests/dft/DftFst.lua
Normal file
|
@ -0,0 +1,33 @@
|
|||
require ("global")
|
||||
|
||||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
Name: Small Talk
|
||||
Code: DftFst
|
||||
Id: 110542
|
||||
|
||||
Contains all default lines for talkable npcs in the Forest Region (aka Black Shroud).
|
||||
* NOTE: This quest is active for all players at all times.
|
||||
]]
|
||||
|
||||
-- [ActorClassId] = "client_function_name"
|
||||
local defaultTalkFst = {
|
||||
[1000821] = "defaultTalkWithNellaure_001", -- Nellaure
|
||||
[1001081] = "defaultTalkWithKhumamoshroca_001", -- Khuma Moshroca
|
||||
[1001103] = "defaultTalkWithMestonnaux_001", -- Mestonnaux
|
||||
[1001396] = "defaultTalkWithLefwyne_001", -- Lefwyne
|
||||
[1001430] = "defaultTalkWithKinnison_001", -- Kinnison
|
||||
[1001437] = "defaultTalkWithSybell_001", -- Sybell
|
||||
}
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local clientFunc = defaultTalkFst[npc:GetActorClassId()];
|
||||
callClientFunction(player, "delegateEvent", player, quest, clientFunc);
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
function IsQuestENPC(player, quest, npc)
|
||||
return defaultTalkFst[npc:GetActorClassId()] ~= nil;
|
||||
end
|
26
Data/scripts/quests/dft/DftSea.lua
Normal file
26
Data/scripts/quests/dft/DftSea.lua
Normal file
|
@ -0,0 +1,26 @@
|
|||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
Name: Small Talk
|
||||
Code: DftSea
|
||||
Id: 110540
|
||||
|
||||
Contains all default lines for talkable npcs in the Sea Region (aka La Noscea).
|
||||
* NOTE: This quest is active for all players at all times.
|
||||
]]
|
||||
|
||||
-- [ActorClassId] = "client_function_name"
|
||||
local defaultTalkSea = {
|
||||
[1234] = "defaultTalkWithLefchild_001" -- Lefchild
|
||||
}
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local clientFunc = defaultTalkSea[npc.GetActorClassId()];
|
||||
callClientFunction(player, "delegateEvent", player, quest, clientFunc);
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
function IsQuestENPC(player, quest, npc)
|
||||
return defaultTalkSea[npc.GetActorClassId()] ~= nil;
|
||||
end
|
29
Data/scripts/quests/dft/DftWil.lua
Normal file
29
Data/scripts/quests/dft/DftWil.lua
Normal file
|
@ -0,0 +1,29 @@
|
|||
require ("global")
|
||||
|
||||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
Name: Small Talk
|
||||
Code: DftWil
|
||||
Id: 110543
|
||||
|
||||
Contains all default lines for talkable npcs in the Wilderness Region (aka Thanalan).
|
||||
* NOTE: This quest is active for all players at all times.
|
||||
]]
|
||||
|
||||
-- [ActorClassId] = "client_function_name"
|
||||
local defaultTalkWil = {
|
||||
[1000841] = "defaultTalkWithMomodi_001", -- Momodi
|
||||
[1000994] = "defaultTalkWithLefchild_001" -- Lefchild
|
||||
}
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local clientFunc = defaultTalkWil[npc:GetActorClassId()];
|
||||
callClientFunction(player, "delegateEvent", player, quest, clientFunc);
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
function IsQuestENPC(player, quest, npc)
|
||||
return defaultTalkWil[npc:GetActorClassId()] ~= nil;
|
||||
end
|
|
@ -1,61 +1,149 @@
|
|||
-- Level requirement is 5 on any class. Set to 1 for testing
|
||||
-- TODO: Reward handling
|
||||
require ("global")
|
||||
|
||||
--Actor Scripts
|
||||
--unique/fst0Town01a/PopulaceStandard/kinnison
|
||||
--unique/fst0Town01a/PopulaceStandard/mestonnaux
|
||||
--unique/fst0Town01a/PopulaceStandard/sybell
|
||||
--unique/fst0Town01a/PopulaceStandard/khuma_moshroca
|
||||
--unique/fst0Town01a/PopulaceStandard/lefwyne
|
||||
--unique/fst0Town01a/PopulaceStandard/nellaure
|
||||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
--Quest Flags
|
||||
FLAG_TALKED_MESTONNAUX = 0;
|
||||
FLAG_TALKED_SYBELL = 1;
|
||||
FLAG_TALKED_NELLAURE = 2;
|
||||
FLAG_TALKED_KHUMA_MOSHROCA = 4;
|
||||
FLAG_TALKED_LEFWYNE = 8;
|
||||
Name: Seeing the Seers
|
||||
Code: Etc3g0
|
||||
Id: 110674
|
||||
Prereq: Level 5, Any Class
|
||||
|
||||
function checkNextPhase(player)
|
||||
ownedQuest = player:GetQuest("Etc3g0");
|
||||
if (
|
||||
ownedQuest:GetQuestFlag(FLAG_TALKED_MESTONNAUX) == true and
|
||||
ownedQuest:GetQuestFlag(FLAG_TALKED_SYBELL) == true and
|
||||
ownedQuest:GetQuestFlag(FLAG_TALKED_NELLAURE) == true and
|
||||
ownedQuest:GetQuestFlag(FLAG_TALKED_KHUMA_MOSHROCA) == true and
|
||||
ownedQuest:GetQuestFlag(FLAG_TALKED_LEFWYNE) == true
|
||||
) then
|
||||
ownedQuest:NextPhase(243);
|
||||
end
|
||||
]]
|
||||
|
||||
-- Sequence Numbers
|
||||
SEQ_000 = 0; -- Talk to all the seers.
|
||||
SEQ_001 = 1; -- Return to Kinnison.
|
||||
|
||||
-- Actor Class Ids
|
||||
KINNISON = 1001430;
|
||||
SYBELL = 1001437;
|
||||
KHUMA_MOSHROCA = 1001081;
|
||||
NELLAURE = 1000821;
|
||||
MESTONNAUX = 1001103;
|
||||
LEFWYNE = 1001396;
|
||||
|
||||
-- Quest Markers
|
||||
MRKR_KINNISON = 11080001
|
||||
MRKR_SYBELL = 11080002
|
||||
MRKR_KHUMA_MOSHROCA = 11080003
|
||||
MRKR_NELLAURE = 11080004
|
||||
MRKR_MESTONNAUX = 11080005
|
||||
MRKR_LEFWYNE = 11080006
|
||||
|
||||
-- Quest Flags
|
||||
FLAG_TALKED_MESTONNAUX = 0;
|
||||
FLAG_TALKED_SYBELL = 1;
|
||||
FLAG_TALKED_NELLAURE = 2;
|
||||
FLAG_TALKED_KHUMA_MOSHROCA = 3;
|
||||
FLAG_TALKED_LEFWYNE = 4;
|
||||
|
||||
--offerQuestResult = callClientFunction(player, "delegateEvent", player, quest, "processEventOffersStart");
|
||||
|
||||
function onStart(player, quest)
|
||||
quest:StartSequence(SEQ_000);
|
||||
end
|
||||
|
||||
|
||||
function canAcceptQuest(player)
|
||||
return (player:HasQuest("Etc3g0") == false and player:IsQuestCompleted("Etc3g0") == false and player:GetHighestLevel() >= 1);
|
||||
function onFinish(player, quest)
|
||||
end
|
||||
|
||||
function isObjectivesComplete(player, quest)
|
||||
return (quest:GetPhase() == 243);
|
||||
end
|
||||
|
||||
|
||||
function onAbandonQuest(player, quest)
|
||||
kinnison = GetWorldManager():GetActorInWorldByUniqueId("kinnison");
|
||||
mestonnaux = GetWorldManager():GetActorInWorldByUniqueId("mestonnaux");
|
||||
sybell = GetWorldManager():GetActorInWorldByUniqueId("sybell");
|
||||
khuma_moshroca = GetWorldManager():GetActorInWorldByUniqueId("khuma_moshroca");
|
||||
lefwyne = GetWorldManager():GetActorInWorldByUniqueId("lefwyne");
|
||||
nellaure = GetWorldManager():GetActorInWorldByUniqueId("nellaure");
|
||||
function onSequence(player, quest, sequence)
|
||||
quest:ClearENpcs();
|
||||
|
||||
if (kinnison ~= nil and canAcceptQuest(player)) then
|
||||
kinnison:SetQuestGraphic(player, 0x2);
|
||||
if (sequence == SEQ_000) then
|
||||
quest:AddENpc(SYBELL, qflag(quest, FLAG_TALKED_SYBELL));
|
||||
quest:AddENpc(KHUMA_MOSHROCA, qflag(quest, FLAG_TALKED_KHUMA_MOSHROCA));
|
||||
quest:AddENpc(NELLAURE, qflag(quest, FLAG_TALKED_NELLAURE));
|
||||
quest:AddENpc(MESTONNAUX, qflag(quest, FLAG_TALKED_MESTONNAUX));
|
||||
quest:AddENpc(LEFWYNE, qflag(quest, FLAG_TALKED_LEFWYNE));
|
||||
elseif (sequence == SEQ_001) then
|
||||
quest:AddENpc(KINNISON);
|
||||
end
|
||||
|
||||
if (mestonnaux ~= nil) then mestonnaux:SetQuestGraphic(player, 0x0); end
|
||||
if (sybell ~= nil) then sybell:SetQuestGraphic(player, 0x0); end
|
||||
if (khuma_moshroca ~= nil) then khuma_moshroca:SetQuestGraphic(player, 0x0); end
|
||||
if (lefwyne ~= nil) then lefwyne:SetQuestGraphic(player, 0x0); end
|
||||
if (nellaure ~= nil) then nellaure:SetQuestGraphic(player, 0x0); end
|
||||
|
||||
end
|
||||
|
||||
function qflag(quest, flag)
|
||||
return quest:GetFlag(flag) and QFLAG_ALL or QFLAG_NONE;
|
||||
end
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local npcClassId = npc.GetActorClassId();
|
||||
local seq = quest:GetSequence();
|
||||
|
||||
if (seq == SEQ_000) then
|
||||
if (npcClassId == SYBELL) then
|
||||
if (not quest:GetFlag(FLAG_TALKED_SYBELL)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventSybellSpeak");
|
||||
quest:SetFlag(FLAG_TALKED_SYBELL);
|
||||
--quest:UpdateENpc(SYBELL, QFLAG_NONE);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventSybellSpeakAfter");
|
||||
end
|
||||
elseif (npcClassId == KHUMA_MOSHROCA) then
|
||||
if (not quest:GetFlag(FLAG_TALKED_KHUMA_MOSHROCA)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventKhumaSpeak");
|
||||
quest:SetFlag(FLAG_TALKED_KHUMA_MOSHROCA);
|
||||
--quest:UpdateENpc(KHUMA_MOSHROCA, QFLAG_NONE);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventKhumaSpeakAfter");
|
||||
end
|
||||
elseif (npcClassId == NELLAURE) then
|
||||
if (not quest:GetFlag(FLAG_TALKED_NELLAURE)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventNellaureSpeak");
|
||||
quest:SetFlag(FLAG_TALKED_NELLAURE);
|
||||
--quest:UpdateENpc(NELLAURE, QFLAG_NONE);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventNellaureSpeakAfter");
|
||||
end
|
||||
elseif (npcClassId == MESTONNAUX) then
|
||||
if (not quest:GetFlag(FLAG_TALKED_MESTONNAUX)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventMestonnauxSpeak");
|
||||
quest:SetFlag(FLAG_TALKED_MESTONNAUX);
|
||||
--quest:UpdateENpc(MESTONNAUX, QFLAG_NONE);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventMestonnauxSpeakAfter");
|
||||
end
|
||||
elseif (npcClassId == LEFWYNE) then
|
||||
if (not quest:GetFlag(FLAG_TALKED_LEFWYNE)) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventLefwyneSpeak");
|
||||
quest:SetFlag(FLAG_TALKED_LEFWYNE);
|
||||
--quest:UpdateENpc(LEFWYNE, QFLAG_NONE);
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventLefwyneSpeakAfter");
|
||||
end
|
||||
end
|
||||
|
||||
-- Check condition to go to the next sequence
|
||||
if (seq000_checkCondition(quest)) then
|
||||
quest:StartSequence(SEQ_001);
|
||||
end
|
||||
elseif (seq == SEQ_001) then
|
||||
--Quest Complete
|
||||
if (npcClassId == KINNISON) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEventClear");
|
||||
callClientFunction(player, "delegateEvent", player, quest, "sqrwa", 200, 1, 1, 9);
|
||||
end
|
||||
end
|
||||
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
-- Check if all seers are talked to
|
||||
function seq000_checkCondition(quest)
|
||||
return (quest:GetFlag(FLAG_TALKED_SYBELL) and
|
||||
quest:GetFlag(FLAG_TALKED_KHUMA_MOSHROCA) and
|
||||
quest:GetFlag(FLAG_TALKED_NELLAURE) and
|
||||
quest:GetFlag(FLAG_TALKED_MESTONNAUX) and
|
||||
quest:GetFlag(FLAG_TALKED_LEFWYNE));
|
||||
end
|
||||
|
||||
-- This is called by the RequestQuestJournalCommand when map markers are request.
|
||||
-- Check quest_marker for valid values. This should return a table of map markers.
|
||||
function getJournalMapMarkerList(player, quest)
|
||||
local seq = quest:GetSequence();
|
||||
|
||||
if (seq == SEQ_000) then
|
||||
return MRKR_SYBELL, MRKR_KHUMA_MOSHROCA, MRKR_NELLAURE, MRKR_MESTONNAUX, MRKR_LEFWYNE;
|
||||
elseif (seq == SEQ_001) then
|
||||
return MRKR_KINNISON;
|
||||
end
|
||||
end
|
|
@ -1,7 +1,221 @@
|
|||
-- Sequence Numbers
|
||||
SEQ_000 = 0; -- On the boat interior; contains the basics tutorial.
|
||||
SEQ_005 = 5; -- Combat on the top of the boat.
|
||||
SEQ_010 = 10; -- In Limsa Lominsa's port.
|
||||
|
||||
--Quest Flags
|
||||
MAN0L0_FLAG_STARTED_TALK_TUT = 0;
|
||||
-- Quest Flags
|
||||
seq000_Flag_MainTut0 = false;
|
||||
seq000_Flag_MiniTut1 = false;
|
||||
seq000_Flag_MiniTut2 = false;
|
||||
seq000_Flag_MiniTut3 = false;
|
||||
|
||||
MAN0L0_FLAG_MINITUT_DONE1 = 4;
|
||||
MAN0L0_FLAG_MINITUT_DONE2 = 8;
|
||||
MAN0L0_FLAG_MINITUT_DONE3 = 16;
|
||||
-- Map Markers
|
||||
local seq000_Markers = {
|
||||
11000203, -- Rostnsthal
|
||||
11000204, -- Voluptuous Vixen
|
||||
11000205, -- Baby-faced Adventurer
|
||||
};
|
||||
|
||||
-- Actors in this quest
|
||||
NPC_WELLTRAVELED_MERCHANT = 0;
|
||||
NPC_TIPSY_ADVENTURER = 0;
|
||||
NPC_CULTIVATED_TENDER = 0;
|
||||
NPC_ANXIOUS_ADVENTURER = 0;
|
||||
NPC_BABYFACED_ADVENTURER = 0;
|
||||
NPC_AUSTERE_ADVENTURER = 0;
|
||||
NPC_UNDIGNIFIED_ADVENTURER = 0;
|
||||
NPC_SHADOWY_TRAVELER = 0;
|
||||
NPC_ASTUTE_MERCHANT = 0;
|
||||
NPC_VOLUPTUOUS_VIXEN = 0;
|
||||
NPC_INDIFFERENT_PASSERBY = 0;
|
||||
NPC_PRATTLING_ADVENTURER = 0;
|
||||
NPC_GRINNING_ADVENTURER = 0;
|
||||
NPC_ROSTNSTHAL = 0;
|
||||
NPC_EXIT_TRIGGER = 0;
|
||||
|
||||
function onStart(player, quest)
|
||||
quest::StartSequence(SEQ_000);
|
||||
end
|
||||
|
||||
function onFinish(player, quest)
|
||||
end
|
||||
|
||||
function onSequence(player, quest, seqNum)
|
||||
quest::ClearENpcs();
|
||||
|
||||
if (sequence == SEQ_000) then
|
||||
-- Setup states incase we loaded in.
|
||||
local rostnsthalQuestFlag = QFLAG_NONE;
|
||||
local rostnsthalCanPush = true;
|
||||
local rostnsthalCanTalk = false;
|
||||
if (seq000_Flag_MainTut0 == true) then
|
||||
rostnsthalCanTalk = true;
|
||||
rostnsthalCanPush = false;
|
||||
if (seq000_Flag_MiniTut1 == false) then
|
||||
rostnsthalQuestFlag = QFLAG_BOTH;
|
||||
end
|
||||
else
|
||||
rostnsthalCanTalk = false;
|
||||
rostnsthalCanPush = true;
|
||||
end
|
||||
|
||||
quest::AddENpc
|
||||
quest::AddENpc(NPC_WELLTRAVELED_MERCHANT);
|
||||
quest::AddENpc(NPC_TIPSY_ADVENTURER);
|
||||
quest::AddENpc(NPC_CULTIVATED_TENDER);
|
||||
quest::AddENpc(NPC_ANXIOUS_ADVENTURER);
|
||||
quest::AddENpc(NPC_BABYFACED_ADVENTURER);
|
||||
quest::AddENpc(NPC_AUSTERE_ADVENTURER);
|
||||
quest::AddENpc(NPC_UNDIGNIFIED_ADVENTURER);
|
||||
quest::AddENpc(NPC_SHADOWY_TRAVELER);
|
||||
quest::AddENpc(NPC_ASTUTE_MERCHANT);
|
||||
quest::AddENpc(NPC_VOLUPTUOUS_VIXEN);
|
||||
quest::AddENpc(NPC_INDIFFERENT_PASSERBY);
|
||||
quest::AddENpc(NPC_PRATTLING_ADVENTURER);
|
||||
quest::AddENpc(NPC_GRINNING_ADVENTURER);
|
||||
quest::AddENpc(NPC_ROSTNSTHAL, rostnsthalQuestFlag, rostnsthalCanTalk, false, rostnsthalCanPush);
|
||||
quest::AddENpc(NPC_EXIT_TRIGGER);
|
||||
elseif (sequence == SEQ_005) then
|
||||
elseif (sequence == SEQ_010) then
|
||||
end
|
||||
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_005) then
|
||||
sequence005_onTalk(player, quest, npc, classId);
|
||||
elseif (sequence == SEQ_010) then
|
||||
sequence010_onTalk(player, quest, npc, classId);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function seq000_onTalk(player, quest, npc, classId)
|
||||
if (classId == NPC_WELLTRAVELED_MERCHANT) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_4", nil, nil, nil);
|
||||
elseif (classId == NPC_TIPSY_ADVENTURER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_5", nil, nil, nil);
|
||||
elseif (classId == NPC_CULTIVATED_TENDER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_6", nil, nil, nil);
|
||||
elseif (classId == NPC_ANXIOUS_ADVENTURER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_7", nil, nil, nil);
|
||||
elseif (classId == NPC_BABYFACED_ADVENTURER) then
|
||||
if (seq000_Flag_MiniTut3 == false) then
|
||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrMini003", nil, nil, nil);
|
||||
quest::UpdateENpc(FLAG, QFLAG_NONE);
|
||||
seq000_Flag_MiniTut3 = true;
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_8", nil, nil, nil);
|
||||
end
|
||||
elseif (classId == NPC_AUSTERE_ADVENTURER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_9", nil, nil, nil);
|
||||
elseif (classId == NPC_UNDIGNIFIED_ADVENTURER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_10", nil, nil, nil);
|
||||
elseif (classId == NPC_SHADOWY_TRAVELER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_11", nil, nil, nil);
|
||||
elseif (classId == NPC_ASTUTE_MERCHANT) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_12", nil, nil, nil);
|
||||
elseif (classId == NPC_VOLUPTUOUS_VIXEN) then
|
||||
if (seq000_Flag_MiniTut2 == false) then
|
||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrMini002", nil, nil, nil);
|
||||
quest::UpdateENpc(classId, FLAG, QFLAG_NONE);
|
||||
seq000_Flag_MiniTut2 = true;
|
||||
else
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_13", nil, nil, nil);
|
||||
end
|
||||
elseif (classId == NPC_INDIFFERENT_PASSERBY) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_14", nil, nil, nil);
|
||||
elseif (classId == NPC_PRATTLING_ADVENTURER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_15", nil, nil, nil);
|
||||
elseif (classId == NPC_LANKY_TRAVELER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_16", nil, nil, nil);
|
||||
elseif (classId == NPC_GRINNING_ADVENTURER) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_17", nil, nil, nil);
|
||||
elseif (classId == NPC_ROSTNSTHAL) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processTtrMini001", nil, nil, nil);
|
||||
if (seq000_Flag_MiniTut1 == false) then
|
||||
quest::UpdateENpc(classId, FLAG, QFLAG_NONE);
|
||||
seq000_Flag_MiniTut1 = true;
|
||||
end
|
||||
elseif (classId == NPC_EXIT_TRIGGER) then
|
||||
doExitDoor(player, quest, npc);
|
||||
return;
|
||||
end
|
||||
player:EndEvent();
|
||||
|
||||
if (seq000_Flag_MiniTut1 == true && seq000_Flag_MiniTut2 == true && seq000_Flag_MiniTut3 == true) then
|
||||
quest::UpdateENpc(NPC_EXIT_TRIGGER, FLAG, QFLAG_BOTH);
|
||||
quest::UpdateENpc(NPC_EXIT_TRIGGER, CANPUSH, true);
|
||||
end
|
||||
end
|
||||
|
||||
function sequence005_onTalk(player, quest, npc, classId)
|
||||
end
|
||||
|
||||
function sequence010_onTalk(player, quest, npc, classId)
|
||||
end
|
||||
|
||||
function onEmote(player, quest, npc, emote)
|
||||
end
|
||||
|
||||
function onPush(player, quest, npc)
|
||||
local sequence = quest::getSequence();
|
||||
local classId = npc::GetActorClassId();
|
||||
|
||||
if (sequence == SEQ_000) then
|
||||
if (classId == NPC_EXIT_TRIGGER) then
|
||||
doExitDoor(player, quest, npc);
|
||||
return;
|
||||
elseif (classId == NPC_ROSTNSTHAL) then
|
||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrNomal002", nil, nil, nil);
|
||||
quest::UpdateENpc(NPC_ROSTNSTHAL, CANPUSH, false);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function onNotice(player, quest, npc)
|
||||
end
|
||||
|
||||
function getJournalInformation(player, quest)
|
||||
return {};
|
||||
end
|
||||
|
||||
function getJournalMapMarkerList(player, quest)
|
||||
local sequence = quest::getSequence();
|
||||
|
||||
if (sequence == SEQ_000) then
|
||||
return seq000_Markers;
|
||||
end
|
||||
end
|
||||
|
||||
function doExitDoor(player, quest, npc)
|
||||
local choice = callClientFunction(player, "delegateEvent", player, quest, "processEventNewRectAsk", nil);
|
||||
if (choice == 1) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent000_2", nil, nil, nil, nil);
|
||||
player:EndEvent();
|
||||
|
||||
quest::StartSequence(SEQ_005);
|
||||
|
||||
contentArea = player:GetZone():CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0l01", "SimpleContent30002", "Quest/QuestDirectorMan0l001");
|
||||
|
||||
if (contentArea == nil) then
|
||||
return;
|
||||
end
|
||||
|
||||
director = contentArea:GetContentDirector();
|
||||
player:AddDirector(director);
|
||||
director:StartDirector(false);
|
||||
|
||||
player:KickEvent(director, "noticeEvent", true);
|
||||
player:SetLoginDirector(director);
|
||||
|
||||
GetWorldManager():DoZoneChangeContent(player, contentArea, -5, 16.35, 6, 0.5, 16);
|
||||
return;
|
||||
else
|
||||
player::EndEvent();
|
||||
end
|
||||
end
|
36
Data/scripts/quests/man/man2l0.lua
Normal file
36
Data/scripts/quests/man/man2l0.lua
Normal file
|
@ -0,0 +1,36 @@
|
|||
require("global.lua")
|
||||
|
||||
function onStart(player, quest)
|
||||
quest:StartSequence(SEQ_000);
|
||||
end
|
||||
|
||||
function onFinish(player, quest)
|
||||
end
|
||||
|
||||
function onSequence(player, quest, seqNum)
|
||||
quest:ClearENpcs();
|
||||
end
|
||||
|
||||
function onTalk(player, quest, npc)
|
||||
local sequence = quest:getSequence();
|
||||
local classId = npc:GetActorClassId();
|
||||
|
||||
|
||||
end
|
||||
|
||||
function onEmote(player, quest, npc, emote)
|
||||
end
|
||||
|
||||
function onPush(player, quest, npc)
|
||||
end
|
||||
|
||||
function onNotice(player, quest, npc)
|
||||
end
|
||||
|
||||
function getJournalInformation(player, quest)
|
||||
return {};
|
||||
end
|
||||
|
||||
function getJournalMapMarkerList(player, quest)
|
||||
return 11000105, 11000106;
|
||||
end
|
86
Data/scripts/quests/quest_template.lua
Normal file
86
Data/scripts/quests/quest_template.lua
Normal file
|
@ -0,0 +1,86 @@
|
|||
-- Sequence Numbers
|
||||
--[[
|
||||
The current section of the quest the player is on. Quests are divided into "sequences" with a different
|
||||
objective for each one. Depending on the sequence # the journal log will have text appeneded to it.
|
||||
Check xtx/quest for valid sequence values.
|
||||
]]
|
||||
SEQ_000 = 0;
|
||||
SEQ_005 = 5;
|
||||
SEQ_010 = 10;
|
||||
|
||||
-- Quest Variables
|
||||
--[[
|
||||
Locally stored variables, up to the script writer to make them up but use these to track things the player
|
||||
has done.
|
||||
]]
|
||||
local questFlag1 = false;
|
||||
local questFlag2 = false;
|
||||
local questFlag3 = false;
|
||||
local killCounter1 = 0;
|
||||
local killCounter2 = 0;
|
||||
local killCounter3 = 0;
|
||||
|
||||
-- Map Markers
|
||||
--[[
|
||||
A list of markers to show when the player opens the journal and clicks "View Map". References the
|
||||
quest_marker sheet.
|
||||
]]
|
||||
local seq000_Markers = {
|
||||
};
|
||||
|
||||
-- Actors in this quest
|
||||
--[[
|
||||
A list of actor class ids that the quest will use. Good for adding it to the ENPC list and checking against
|
||||
them when events are triggered.
|
||||
]]
|
||||
NPC_SOMEACTOR = 0;
|
||||
|
||||
-- Called when a quest is started. Initialize any global variables across all phases here and always start
|
||||
-- the first sequence (usually SEQ_000).
|
||||
function onStart(player, quest)
|
||||
quest::StartSequence(SEQ_000);
|
||||
end
|
||||
|
||||
-- Called when the quest is finished, either from abandonment or completion. Clean up quest items or w.each
|
||||
-- here.
|
||||
function onFinish(player, quest)
|
||||
end
|
||||
|
||||
-- Called when a sequence starts, either from the quest progressing to the next sequence, or from the
|
||||
-- player loading in with an already in progress quest. This class should add all appropriate ENPCs and
|
||||
-- configure them to the current quest state (flags, counters, etc).
|
||||
function onSequence(player, quest, seqNum)
|
||||
end
|
||||
|
||||
-- Called when an ENPC is talked to; only ENPCs that are currently added to the quest will trigger this.
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
end
|
||||
|
||||
-- Called when an ENPC is emoted to; only ENPCs that are currently added to the quest will trigger this.
|
||||
function onEmote(player, quest, npc, emote, eventName)
|
||||
end
|
||||
|
||||
|
||||
-- Called when an ENPC is pushed; only ENPCs that are currently added to the quest will trigger this.
|
||||
function onPush(player, quest, npc, eventName)
|
||||
end
|
||||
|
||||
-- Called when an ENPC is kicked; only ENPCs that are currently added to the quest will trigger this.
|
||||
function onNotice(player, quest, npc, eventName)
|
||||
end
|
||||
|
||||
-- Called when the player clicks on an NPC Linkshell. Check the id and send a message if there is one.
|
||||
function onNpcLS(player, npcLSId)
|
||||
end
|
||||
|
||||
-- This is called by the RequestQuestJournalCommand to retrieve any extra information about the quest.
|
||||
-- Check xtx/quest for valid values.
|
||||
function getJournalInformation(player, quest)
|
||||
return {};
|
||||
end
|
||||
|
||||
-- This is called by the RequestQuestJournalCommand when map markers are request.
|
||||
-- Check quest_marker for valid values. This should return a table of map markers.
|
||||
function getJournalMapMarkerList(player, quest)
|
||||
return {};
|
||||
end
|
29
Data/scripts/quests/trl/Trl0g1.lua
Normal file
29
Data/scripts/quests/trl/Trl0g1.lua
Normal file
|
@ -0,0 +1,29 @@
|
|||
require ("global")
|
||||
|
||||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
Name: Getting Started (Mother Miounne)
|
||||
Code: Trl0g1
|
||||
Id: 110141
|
||||
|
||||
Enables the "Getting Started" option on Miounne.
|
||||
* NOTE: This quest is active for all players at all times.
|
||||
]]
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local choice = callClientFunction(player, "delegateEvent", player, quest, "processEventMiounneStart");
|
||||
|
||||
if (choice == 1) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent225");
|
||||
elseif (choice == 2) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent230");
|
||||
end
|
||||
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
function IsQuestENPC(player, quest, npc)
|
||||
return npc:GetActorClassId()] == 1000230;
|
||||
end
|
29
Data/scripts/quests/trl/Trl0l1.lua
Normal file
29
Data/scripts/quests/trl/Trl0l1.lua
Normal file
|
@ -0,0 +1,29 @@
|
|||
require ("global")
|
||||
|
||||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
Name: Getting Started (Baderon)
|
||||
Code: Trl0l1
|
||||
Id: 110140
|
||||
|
||||
Enables the "Getting Started" option on Baderon.
|
||||
* NOTE: This quest is active for all players at all times.
|
||||
]]
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local choice = callClientFunction(player, "delegateEvent", player, quest, "processEventBaderonStart");
|
||||
|
||||
if (choice == 1) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent640");
|
||||
elseif (choice == 2) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent650");
|
||||
end
|
||||
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
function IsQuestENPC(player, quest, npc)
|
||||
return npc:GetActorClassId()] == 1000137;
|
||||
end
|
29
Data/scripts/quests/trl/Trl0u1.lua
Normal file
29
Data/scripts/quests/trl/Trl0u1.lua
Normal file
|
@ -0,0 +1,29 @@
|
|||
require ("global")
|
||||
|
||||
--[[
|
||||
|
||||
Quest Script
|
||||
|
||||
Name: Getting Started (Momodi)
|
||||
Code: Trl0u1
|
||||
Id: 110142
|
||||
|
||||
Enables the "Getting Started" option on Momodi.
|
||||
* NOTE: This quest is active for all players at all times.
|
||||
]]
|
||||
|
||||
function onTalk(player, quest, npc, eventName)
|
||||
local choice = callClientFunction(player, "delegateEvent", player, quest, "processEventMomodiStart");
|
||||
|
||||
if (choice == 1) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent235");
|
||||
elseif (choice == 2) then
|
||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent240");
|
||||
end
|
||||
|
||||
player:EndEvent();
|
||||
end
|
||||
|
||||
function IsQuestENPC(player, quest, npc)
|
||||
return npc:GetActorClassId() == 1000841;
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue