Finished quest state system idea

This commit is contained in:
Filip Maj 2022-02-16 15:32:54 -05:00
parent aae051d73f
commit 1523ae200b
21 changed files with 720 additions and 373 deletions

View file

@ -41,8 +41,6 @@ FLAG_TALKED_LEFWYNE = 4;
-- Quest Counters
COUNTER_TALKED = 0;
--offerQuestResult = callClientFunction(player, "delegateEvent", player, quest, "processEventOffersStart");
function onStart(player, quest)
quest:StartSequence(SEQ_000);
end
@ -50,25 +48,39 @@ end
function onFinish(player, quest)
end
function onSequence(player, quest, sequence)
function onStateChange(player, quest, sequence)
if (sequence == 65536) then
quest:SetENpc(KINNISON, QFLAG_PLATE);
end
if (sequence == SEQ_000) then
quest:AddENpc(KINNISON);
quest:AddENpc(SYBELL, (not quest:GetFlag(FLAG_TALKED_SYBELL) and QFLAG_PLATE or QFLAG_NONE));
quest:AddENpc(KHUMA_MOSHROCA, (not quest:GetFlag(FLAG_TALKED_KHUMA_MOSHROCA) and QFLAG_PLATE or QFLAG_NONE));
quest:AddENpc(NELLAURE, (not quest:GetFlag(FLAG_TALKED_NELLAURE) and QFLAG_PLATE or QFLAG_NONE));
quest:AddENpc(MESTONNAUX, (not quest:GetFlag(FLAG_TALKED_MESTONNAUX) and QFLAG_PLATE or QFLAG_NONE));
quest:AddENpc(LEFWYNE, (not quest:GetFlag(FLAG_TALKED_LEFWYNE) and QFLAG_PLATE or QFLAG_NONE));
quest:SetENpc(KINNISON);
quest:SetENpc(SYBELL, (not quest:GetFlag(FLAG_TALKED_SYBELL) and QFLAG_PLATE or QFLAG_NONE));
quest:SetENpc(KHUMA_MOSHROCA, (not quest:GetFlag(FLAG_TALKED_KHUMA_MOSHROCA) and QFLAG_PLATE or QFLAG_NONE));
quest:SetENpc(NELLAURE, (not quest:GetFlag(FLAG_TALKED_NELLAURE) and QFLAG_PLATE or QFLAG_NONE));
quest:SetENpc(MESTONNAUX, (not quest:GetFlag(FLAG_TALKED_MESTONNAUX) and QFLAG_PLATE or QFLAG_NONE));
quest:SetENpc(LEFWYNE, (not quest:GetFlag(FLAG_TALKED_LEFWYNE) and QFLAG_PLATE or QFLAG_NONE));
elseif (sequence == SEQ_001) then
quest:AddENpc(KINNISON, QFLAG_PLATE);
quest:SetENpc(KINNISON, QFLAG_PLATE);
end
end
function onTalk(player, quest, npc, eventName)
local npcClassId = npc.GetActorClassId();
local seq = quest:GetSequence();
local incCounter = false;
-- Offer the quest
if (npcClassId == KINNISON and not player:HasQuest(quest)) then
local questAccepted = callClientFunction(player, "delegateEvent", player, quest, "processEventOffersStart");
if (questAccepted) then
player:AddQuest(quest);
end
player:EndEvent();
return;
end
-- Quest Progress
if (seq == SEQ_000) then
if (npcClassId == KINNISON) then
callClientFunction(player, "delegateEvent", player, quest, "processEventOffersAfter");

View file

@ -40,13 +40,13 @@ end
function onSequence(player, quest, sequence)
function onStateChange(player, quest, sequence)
if (sequence == SEQ_000) then
quest:AddENpc(VKOROLON);
quest:AddENpc(PFARAHR, QFLAG_PLATE);
quest:SetENpc(VKOROLON);
quest:SetENpc(PFARAHR, QFLAG_PLATE);
elseif (sequence == SEQ_001) then
quest:AddENpc(VKOROLON, QFLAG_PLATE);
quest:AddENpc(PFARAHR);
quest:SetENpc(VKOROLON, QFLAG_PLATE);
quest:SetENpc(PFARAHR);
end
end

View file

@ -62,7 +62,7 @@ end
function onFinish(player, quest)
end
function onSequence(player, quest, sequence)
function onStateChange(player, quest, sequence)
if (sequence == SEQ_000) then
-- Setup states incase we loaded in.
local rostnsthalFlag = quest:GetFlag(FLAG_SEQ000_MINITUT1) and QFLAG_NONE or QFLAG_PLATE;
@ -72,34 +72,34 @@ function onSequence(player, quest, sequence)
local exitCanPush = quest:GetFlags() == 0xF;
local exitFlag = quest:GetFlags() == 0xF and QFLAG_MAP or QFLAG_NONE;
quest:AddENpc(WELLTRAVELED_MERCHANT);
quest:AddENpc(TIPSY_ADVENTURER);
quest:AddENpc(CULTIVATED_TENDER);
quest:AddENpc(ANXIOUS_ADVENTURER);
quest:AddENpc(BABYFACED_ADVENTURER, babyfaceFlag);
quest:AddENpc(AUSTERE_ADVENTURER);
quest:AddENpc(UNDIGNIFIED_ADVENTURER);
quest:AddENpc(SHADOWY_TRAVELER);
quest:AddENpc(ASTUTE_MERCHANT);
quest:AddENpc(VOLUPTUOUS_VIXEN, vixenFlag);
quest:AddENpc(INDIFFERENT_PASSERBY);
quest:AddENpc(PRATTLING_ADVENTURER);
quest:AddENpc(LANKY_TRAVELER);
quest:AddENpc(GRINNING_ADVENTURER);
quest:AddENpc(ROSTNSTHAL, rostnsthalFlag, true, rostnsthalCanPush);
quest:AddENpc(EXIT_TRIGGER, exitFlag, false, exitCanPush);
quest:SetENpc(WELLTRAVELED_MERCHANT);
quest:SetENpc(TIPSY_ADVENTURER);
quest:SetENpc(CULTIVATED_TENDER);
quest:SetENpc(ANXIOUS_ADVENTURER);
quest:SetENpc(BABYFACED_ADVENTURER, babyfaceFlag);
quest:SetENpc(AUSTERE_ADVENTURER);
quest:SetENpc(UNDIGNIFIED_ADVENTURER);
quest:SetENpc(SHADOWY_TRAVELER);
quest:SetENpc(ASTUTE_MERCHANT);
quest:SetENpc(VOLUPTUOUS_VIXEN, vixenFlag);
quest:SetENpc(INDIFFERENT_PASSERBY);
quest:SetENpc(PRATTLING_ADVENTURER);
quest:SetENpc(LANKY_TRAVELER);
quest:SetENpc(GRINNING_ADVENTURER);
quest:SetENpc(ROSTNSTHAL, rostnsthalFlag, true, rostnsthalCanPush);
quest:SetENpc(EXIT_TRIGGER, exitFlag, false, exitCanPush);
elseif (sequence == SEQ_005) then
elseif (sequence == SEQ_010) then
quest:AddENpc(HOB);
quest:AddENpc(GERT);
quest:AddENpc(LORHZANT);
quest:AddENpc(MUSCLEBOUND_DECKHAND);
quest:AddENpc(PEARLYTOOTHED_PORTER);
quest:AddENpc(UNDIGNIFIED_ADVENTURER);
quest:AddENpc(WELLTRAVELED_MERCHANT);
quest:AddENpc(VOLUPTUOUS_VIXEN);
quest:AddENpc(LANKY_TRAVELER);
quest:AddENpc(PRIVAREA_PAST_EXIT, QFLAG_NONE, false, true);
quest:SetENpc(HOB);
quest:SetENpc(GERT);
quest:SetENpc(LORHZANT);
quest:SetENpc(MUSCLEBOUND_DECKHAND);
quest:SetENpc(PEARLYTOOTHED_PORTER);
quest:SetENpc(UNDIGNIFIED_ADVENTURER);
quest:SetENpc(WELLTRAVELED_MERCHANT);
quest:SetENpc(VOLUPTUOUS_VIXEN);
quest:SetENpc(LANKY_TRAVELER);
quest:SetENpc(PRIVAREA_PAST_EXIT, QFLAG_NONE, false, true);
end
end

View file

@ -85,56 +85,56 @@ end
function onFinish(player, quest)
end
function onSequence(player, quest, sequence)
function onStateChange(player, quest, sequence)
if (sequence == SEQ_000) then
quest:AddENpc(YSHTOLA);
quest:AddENpc(CRAPULOUS_ADVENTURER);
quest:AddENpc(DUPLICITOUS_TRADER);
quest:AddENpc(DEBONAIR_PIRATE);
quest:AddENpc(ONYXHAIRED_ADVENTURER);
quest:AddENpc(SKITTISH_ADVENTURER);
quest:AddENpc(RELAXING_ADVENTURER);
quest:AddENpc(BADERON, QFLAG_PLATE);
quest:AddENpc(MYTESYN);
quest:AddENpc(COCKAHOOP_COCKSWAIN);
quest:AddENpc(SENTENIOUS_SELLSWORD);
quest:AddENpc(SOLICITOUS_SELLSWORD);
quest:SetENpc(YSHTOLA);
quest:SetENpc(CRAPULOUS_ADVENTURER);
quest:SetENpc(DUPLICITOUS_TRADER);
quest:SetENpc(DEBONAIR_PIRATE);
quest:SetENpc(ONYXHAIRED_ADVENTURER);
quest:SetENpc(SKITTISH_ADVENTURER);
quest:SetENpc(RELAXING_ADVENTURER);
quest:SetENpc(BADERON, QFLAG_PLATE);
quest:SetENpc(MYTESYN);
quest:SetENpc(COCKAHOOP_COCKSWAIN);
quest:SetENpc(SENTENIOUS_SELLSWORD);
quest:SetENpc(SOLICITOUS_SELLSWORD);
elseif (sequence == SEQ_003) then
quest:AddENpc(BADERON);
quest:SetENpc(BADERON);
elseif (sequence == SEQ_005) then
quest:AddENpc(BADERON, QFLAG_PLATE);
quest:SetENpc(BADERON, QFLAG_PLATE);
elseif (sequence == SEQ_006) then
quest:AddENpc(BADERON, QFLAG_PLATE);
quest:SetENpc(BADERON, QFLAG_PLATE);
elseif (sequence == SEQ_007) then
local subseqCUL = quest:GetCounter(CNTR_SEQ7_CUL);
local subseqMRD = quest:GetCounter(CNTR_SEQ7_MRD);
-- Always active in this seqence
quest:AddENpc(BADERON);
quest:AddENpc(CHARLYS, subseqCUL == 0 and QFLAG_PLATE or QFLAG_NONE);
quest:SetENpc(BADERON);
quest:SetENpc(CHARLYS, subseqCUL == 0 and QFLAG_PLATE or QFLAG_NONE);
-- Down and Up the MSK guild
quest:AddENpc(ISANDOREL, (subseqMRD == 0 or subseqMRD == 2) and QFLAG_PLATE or QFLAG_NONE);
quest:SetENpc(ISANDOREL, (subseqMRD == 0 or subseqMRD == 2) and QFLAG_PLATE or QFLAG_NONE);
if (subseqMRD == 1) then
quest:AddENpc(MSK_TRIGGER, QFLAG_MAP, false, true);
quest:SetENpc(MSK_TRIGGER, QFLAG_MAP, false, true);
elseif (subseqMRD == 2) then
quest:AddENpc(MERLZIRN);
quest:SetENpc(MERLZIRN);
end
-- In Echo
quest:AddENpc(NERVOUS_BARRACUDA);
quest:AddENpc(INTIMIDATING_BARRACUDA);
quest:AddENpc(OVEREAGER_BARRACUDA);
quest:AddENpc(SOPHISTICATED_BARRACUDA);
quest:AddENpc(SMIRKING_BARRACUDA);
quest:AddENpc(MANNSKOEN);
quest:AddENpc(TOTORUTO);
quest:AddENpc(ADVENTURER1);
quest:AddENpc(ADVENTURER2);
quest:AddENpc(ADVENTURER3);
quest:AddENpc(ECHO_EXIT_TRIGGER, subseqMRD == 3 and QFLAG_MAP or QFLAG_NONE, false, subseqMRD == 3);
quest:SetENpc(NERVOUS_BARRACUDA);
quest:SetENpc(INTIMIDATING_BARRACUDA);
quest:SetENpc(OVEREAGER_BARRACUDA);
quest:SetENpc(SOPHISTICATED_BARRACUDA);
quest:SetENpc(SMIRKING_BARRACUDA);
quest:SetENpc(MANNSKOEN);
quest:SetENpc(TOTORUTO);
quest:SetENpc(ADVENTURER1);
quest:SetENpc(ADVENTURER2);
quest:SetENpc(ADVENTURER3);
quest:SetENpc(ECHO_EXIT_TRIGGER, subseqMRD == 3 and QFLAG_MAP or QFLAG_NONE, false, subseqMRD == 3);
if (subseqCUL == 1 and subseqMRD == 4) then
player:SetNpcLS(1, 1);

View file

@ -103,7 +103,7 @@ end
function onFinish(player, quest)
end
function onSequence(player, quest, sequence)
function onStateChange(player, quest, sequence)
if (sequence == SEQ_000) then
-- Setup states incase we loaded in.
@ -119,34 +119,34 @@ function onSequence(player, quest, sequence)
gildiggingmistressFlag = QFLAG_NONE;
end
--AddENpc(classId, byte flagType=0,isTalkEnabled, isPushEnabled, isEmoteEnabled, isSpawned)
quest:AddENpc(ASCILIA, asciliaFlag, true, asciliaCanPush);
quest:AddENpc(WARBURTON);
quest:AddENpc(RURURAJI);
quest:AddENpc(BIG_BELLIED_BARKER);
quest:AddENpc(FRETFUL_FARMHAND, fretfulfarmhandFlag);
quest:AddENpc(DEBAUCHED_DEMONESS);
quest:AddENpc(DAPPER_DAN);
quest:AddENpc(LOUTISH_LAD);
quest:AddENpc(GIL_DIGGING_MISTRESS, gildiggingmistressFlag);
quest:AddENpc(TWITTERING_TOMBOY);
quest:AddENpc(STOCKY_STRANGER);
quest:AddENpc(EXIT_TRIGGER, exitFlag, false, true);
quest:AddENpc(OPENING_STOPER_ULDAH, QFLAG_NONE, false, false, true);
--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);
elseif (sequence == SEQ_010) then
local yayatokiFlag = quest:GetFlag(FLAG_SEQ010_TALK0) and QFLAG_NONE or QFLAG_PLATE;
local uldahopeningexitFlag = QFLAG_MAP;
quest:AddENpc(KEEN_EYED_MERCHANT);
quest:AddENpc(HIGH_SPIRITED_FELLOW);
quest:AddENpc(DISREPUTABLE_MIDLANDER);
quest:AddENpc(LONG_LEGGED_LADY);
quest:AddENpc(LARGE_LUNGED_LABORER);
quest:AddENpc(TOOTH_GRINDING_TRAVELER);
quest:AddENpc(FULL_LIPPED_FILLE);
quest:AddENpc(YAYATOKI, yayatokiFlag);
quest:AddENpc(BLOCKER, QFLAG_NONE, false, true);
quest:AddENpc(ULDAH_OPENING_EXIT, uldahopeningexitFlag, false, true);
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);
end
end

View file

@ -127,17 +127,17 @@ end
function onFinish(player, quest)
end
function onSequence(player, quest, sequence)
function onStateChange(player, quest, sequence)
if (sequence == SEQ_000) then
-- Setup states incase we loaded in.
--AddENpc(classId, byte flagType=0,isTalkEnabled, isPushEnabled, isEmoteEnabled, isSpawned)
quest:AddENpc(MOMODI, QFLAG_PLATE);
quest:AddENpc(OTOPA_POTTOPA);
--SetENpc(classId, byte flagType=0,isTalkEnabled, isPushEnabled, isEmoteEnabled, isSpawned)
quest:SetENpc(MOMODI, QFLAG_PLATE);
quest:SetENpc(OTOPA_POTTOPA);
elseif (sequence == SEQ_005) then
quest:AddENpc(MOMODI);
quest:SetENpc(MOMODI);
end
end

View file

@ -7,7 +7,7 @@ end
function onFinish(player, quest)
end
function onSequence(player, quest, seqNum)
function onStateChange(player, quest, seqNum)
quest:ClearENpcs();
end

View file

@ -1,29 +0,0 @@
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

View file

@ -1,29 +0,0 @@
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

View file

@ -1,29 +0,0 @@
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