mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-24 05:37:46 +00:00
Added functionality to handle NPC LSes in quests. Linked the rest of the sequences up for Man0l1.
This commit is contained in:
parent
a618e69dbd
commit
49c6fdbd51
6 changed files with 166 additions and 76 deletions
|
@ -4,13 +4,14 @@ require ("global")
|
||||||
|
|
||||||
NpcLinkshellChatCommand Script
|
NpcLinkshellChatCommand Script
|
||||||
|
|
||||||
Handler for when a player clicks a npc ls to talk to. If adding new linkshells to the handle, make sure to add
|
Player class will go through all quests and see if there are active msgs for one. If there was, it will
|
||||||
it to the handler table (with correct offset), and that your function is above the handler. If padding is needed
|
return true and that quest must end the event (if needed). Otherwise if nothing caught the event, the
|
||||||
to hit some ID, add "nils".
|
event is ended here.
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
function onEventStarted(player, command, eventType, eventName, npcLsId)
|
function onEventStarted(player, command, eventType, eventName, npcLsId)
|
||||||
player:HandleNpcLS(npcLsId);
|
if (player:HandleNpcLs(npcLsId) == false) then
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -56,7 +56,7 @@ ISANDOREL = 1000152;
|
||||||
MERLZIRN = 1000472;
|
MERLZIRN = 1000472;
|
||||||
MSK_TRIGGER = 1090001;
|
MSK_TRIGGER = 1090001;
|
||||||
|
|
||||||
-- Echo in Mrd Guild
|
-- Echo in MSK Guild
|
||||||
NERVOUS_BARRACUDA = 1000096;
|
NERVOUS_BARRACUDA = 1000096;
|
||||||
INTIMIDATING_BARRACUDA = 1000097;
|
INTIMIDATING_BARRACUDA = 1000097;
|
||||||
OVEREAGER_BARRACUDA = 1000107;
|
OVEREAGER_BARRACUDA = 1000107;
|
||||||
|
@ -97,10 +97,18 @@ ECHO_EXIT_TRIGGER2 = 1090001;
|
||||||
|
|
||||||
-- Quest Data
|
-- Quest Data
|
||||||
CNTR_SEQ7_CUL = 1;
|
CNTR_SEQ7_CUL = 1;
|
||||||
CNTR_SEQ7_MRD = 2;
|
CNTR_SEQ7_MSK = 2;
|
||||||
CNTR_SEQ40_FSH = 3;
|
CNTR_SEQ40_FSH = 3;
|
||||||
CNTR_LS_MSG = 4;
|
CNTR_LS_MSG = 4;
|
||||||
|
|
||||||
|
-- Msg packs for the Npc LS
|
||||||
|
NPCLS_MSGS = {
|
||||||
|
{339},
|
||||||
|
{80, 81, 82},
|
||||||
|
{248, 249},
|
||||||
|
{161, 162, 163, 164}
|
||||||
|
};
|
||||||
|
|
||||||
function onStart(player, quest)
|
function onStart(player, quest)
|
||||||
quest:StartSequence(SEQ_000);
|
quest:StartSequence(SEQ_000);
|
||||||
|
|
||||||
|
@ -138,18 +146,18 @@ function onStateChange(player, quest, sequence)
|
||||||
quest:SetENpc(BADERON, QFLAG_PLATE);
|
quest:SetENpc(BADERON, QFLAG_PLATE);
|
||||||
elseif (sequence == SEQ_007) then
|
elseif (sequence == SEQ_007) then
|
||||||
local subseqCUL = data:GetCounter(CNTR_SEQ7_CUL);
|
local subseqCUL = data:GetCounter(CNTR_SEQ7_CUL);
|
||||||
local subseqMRD = data:GetCounter(CNTR_SEQ7_MRD);
|
local subseqMSK = data:GetCounter(CNTR_SEQ7_MSK);
|
||||||
|
|
||||||
-- Always active in this seqence
|
-- Always active in this seqence
|
||||||
quest:SetENpc(BADERON);
|
quest:SetENpc(BADERON);
|
||||||
quest:SetENpc(CHARLYS, subseqCUL == 0 and QFLAG_PLATE or QFLAG_NONE);
|
quest:SetENpc(CHARLYS, subseqCUL == 0 and QFLAG_PLATE or QFLAG_NONE);
|
||||||
|
|
||||||
-- Down and Up the MSK guild
|
-- Down and Up the MSK guild
|
||||||
quest:SetENpc(ISANDOREL, (subseqMRD == 0 or subseqMRD == 2) and QFLAG_PLATE or QFLAG_NONE);
|
quest:SetENpc(ISANDOREL, (subseqMSK == 0 or subseqMSK == 2) and QFLAG_PLATE or QFLAG_NONE);
|
||||||
|
|
||||||
if (subseqMRD == 1) then
|
if (subseqMSK == 1) then
|
||||||
quest:SetENpc(MSK_TRIGGER, QFLAG_MAP, false, true);
|
quest:SetENpc(MSK_TRIGGER, QFLAG_MAP, false, true);
|
||||||
elseif (subseqMRD == 2) then
|
elseif (subseqMSK == 2) then
|
||||||
quest:SetENpc(MERLZIRN);
|
quest:SetENpc(MERLZIRN);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -164,7 +172,7 @@ function onStateChange(player, quest, sequence)
|
||||||
quest:SetENpc(ADVENTURER1);
|
quest:SetENpc(ADVENTURER1);
|
||||||
quest:SetENpc(ADVENTURER2);
|
quest:SetENpc(ADVENTURER2);
|
||||||
quest:SetENpc(ADVENTURER3);
|
quest:SetENpc(ADVENTURER3);
|
||||||
quest:SetENpc(ECHO_EXIT_TRIGGER, subseqMRD == 3 and QFLAG_MAP or QFLAG_NONE, false, subseqMRD == 3);
|
quest:SetENpc(ECHO_EXIT_TRIGGER, subseqMSK == 3 and QFLAG_MAP or QFLAG_NONE, false, subseqMSK == 3);
|
||||||
elseif (sequence == SEQ_035) then
|
elseif (sequence == SEQ_035) then
|
||||||
quest:SetENpc(NNMULIKA, QFLAG_PLATE);
|
quest:SetENpc(NNMULIKA, QFLAG_PLATE);
|
||||||
elseif (sequence == SEQ_040) then
|
elseif (sequence == SEQ_040) then
|
||||||
|
@ -360,7 +368,7 @@ function seq000_onTalk(player, quest, npc, classId)
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent010_8");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent010_8");
|
||||||
elseif (classId == BADERON) then
|
elseif (classId == BADERON) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent020");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent020");
|
||||||
player:SetNpcLS(1, 3);
|
quest:NewNpcLsMsg(1);
|
||||||
quest:StartSequence(SEQ_003);
|
quest:StartSequence(SEQ_003);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
|
|
||||||
|
@ -389,12 +397,12 @@ end
|
||||||
function seq007_onTalk(player, quest, npc, classId)
|
function seq007_onTalk(player, quest, npc, classId)
|
||||||
local data = quest:GetData();
|
local data = quest:GetData();
|
||||||
local subseqCUL = data:GetCounter(CNTR_SEQ7_CUL);
|
local subseqCUL = data:GetCounter(CNTR_SEQ7_CUL);
|
||||||
local subseqMRD = data:GetCounter(CNTR_SEQ7_MRD);
|
local subseqMSK = data:GetCounter(CNTR_SEQ7_MSK);
|
||||||
|
|
||||||
if (classId == BADERON) then
|
if (classId == BADERON) then
|
||||||
if (subseqCUL == 1) then
|
if (subseqCUL == 1) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent027_3");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent027_3");
|
||||||
elseif (subseqMRD == 4) then
|
elseif (subseqMSK == 4) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent027_4");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent027_4");
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent027_2");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent027_2");
|
||||||
|
@ -403,7 +411,7 @@ function seq007_onTalk(player, quest, npc, classId)
|
||||||
if (subseqCUL == 0) then
|
if (subseqCUL == 0) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent030");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent030");
|
||||||
data:IncCounter(CNTR_SEQ7_CUL);
|
data:IncCounter(CNTR_SEQ7_CUL);
|
||||||
if (data:GetCounter(CNTR_SEQ7_CUL) == 1 and data:GetCounter(CNTR_SEQ7_MSK) = 4) then
|
if (data:GetCounter(CNTR_SEQ7_MSK) == 4) then
|
||||||
seq007_endSequence(player, quest);
|
seq007_endSequence(player, quest);
|
||||||
end
|
end
|
||||||
--give 1000g
|
--give 1000g
|
||||||
|
@ -411,14 +419,14 @@ function seq007_onTalk(player, quest, npc, classId)
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent030_2");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent030_2");
|
||||||
end
|
end
|
||||||
elseif (classId == ISANDOREL) then
|
elseif (classId == ISANDOREL) then
|
||||||
if (subseqMRD == 2) then
|
if (subseqMSK == 2) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent050");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent050");
|
||||||
data:IncCounter(CNTR_SEQ7_MRD);
|
data:IncCounter(CNTR_SEQ7_MSK);
|
||||||
GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 3);
|
GetWorldManager():WarpToPrivateArea(player, "PrivateAreaMasterPast", 3);
|
||||||
elseif (subseqMRD == 0) then
|
elseif (subseqMSK == 0) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent035");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent035");
|
||||||
data:IncCounter(CNTR_SEQ7_MRD);
|
data:IncCounter(CNTR_SEQ7_MSK);
|
||||||
elseif (subseqMRD == 1) then
|
elseif (subseqMSK == 1) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent035_2");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent035_2");
|
||||||
end
|
end
|
||||||
elseif (classId == MERLZIRN) then
|
elseif (classId == MERLZIRN) then
|
||||||
|
@ -450,7 +458,7 @@ end
|
||||||
|
|
||||||
function seq007_endSequence(player, quest)
|
function seq007_endSequence(player, quest)
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent033");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent033");
|
||||||
player:SetNpcLS(1, 1);
|
quest:NewNpcLsMsg(1);
|
||||||
end
|
end
|
||||||
|
|
||||||
function seq080_085_onTalk(player, quest, npc, classId)
|
function seq080_085_onTalk(player, quest, npc, classId)
|
||||||
|
@ -482,14 +490,14 @@ function onPush(player, quest, npc)
|
||||||
if (sequence == SEQ_007) then
|
if (sequence == SEQ_007) then
|
||||||
if (classId == MSK_TRIGGER) then
|
if (classId == MSK_TRIGGER) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent040");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent040");
|
||||||
data:IncCounter(CNTR_SEQ7_MRD);
|
data:IncCounter(CNTR_SEQ7_MSK);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
quest:UpdateENPCs();
|
quest:UpdateENPCs();
|
||||||
GetWorldManager():DoZoneChange(player, 230, nil, 0, 15, -620.0, 29.476, -70.050, 0.791);
|
GetWorldManager():DoZoneChange(player, 230, nil, 0, 15, -620.0, 29.476, -70.050, 0.791);
|
||||||
elseif (classId == ECHO_EXIT_TRIGGER) then
|
elseif (classId == ECHO_EXIT_TRIGGER) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent060");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent060");
|
||||||
data:IncCounter(CNTR_SEQ7_MRD);
|
data:IncCounter(CNTR_SEQ7_MSK);
|
||||||
if (data:GetCounter(CNTR_SEQ7_CUL) == 1 and data:GetCounter(CNTR_SEQ7_MSK) = 4) then
|
if (data:GetCounter(CNTR_SEQ7_CUL) == 1) then
|
||||||
seq007_endSequence(player, quest);
|
seq007_endSequence(player, quest);
|
||||||
end
|
end
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
|
@ -517,7 +525,7 @@ function onPush(player, quest, npc)
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent620");
|
callClientFunction(player, "delegateEvent", player, quest, "processEvent620");
|
||||||
-- Give 3000 gil
|
-- Give 3000 gil
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
data:SetCounter(CNTR_LS_MSG, 0);
|
quest:NewNpcLsMsg(1);
|
||||||
quest:StartSequence(SEQ_070);
|
quest:StartSequence(SEQ_070);
|
||||||
end
|
end
|
||||||
elseif (sequence == SEQ_085) then
|
elseif (sequence == SEQ_085) then
|
||||||
|
@ -641,39 +649,43 @@ function onNotice(player, quest, target)
|
||||||
quest:UpdateENPCs();
|
quest:UpdateENPCs();
|
||||||
end
|
end
|
||||||
|
|
||||||
function onNpcLS(player, quest, npcLSId)
|
function onNpcLS(player, quest, from, msgStep)
|
||||||
local sequence = quest:getSequence();
|
local sequence = quest:getSequence();
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent625");
|
local msgPack;
|
||||||
|
|
||||||
if (npcLSId == 1) then
|
if (from == 1) then
|
||||||
player:SetNpcLS(1, 1);
|
-- Get the right msg pack
|
||||||
|
if (sequence == SEQ_003) then
|
||||||
|
msgPack = 1;
|
||||||
|
elseif (sequence == SEQ_007 or sequence == SEQ_035) then
|
||||||
|
msgPack = 2;
|
||||||
|
elseif (sequence == SEQ_070 or sequence == SEQ_075) then
|
||||||
|
msgPack = 3;
|
||||||
|
elseif (sequence == SEQ_090 or sequence == SEQ_092) then
|
||||||
|
msgPack = 4;
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Quick way to handle all msgs nicely.
|
||||||
|
player:SendGameMessageLocalizedDisplayName(quest, NPCLS_MSGS[msgPack][msgStep], MESSAGE_TYPE_NPC_LINKSHELL, 1000015);
|
||||||
|
if (msgStep >= #NPCLS_MSGS[msgPack]) then
|
||||||
|
quest:EndOfNpcLsMsgs();
|
||||||
|
else
|
||||||
|
quest:ReadNpcLsMsg();
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle anything else
|
||||||
if (sequence == SEQ_003) then
|
if (sequence == SEQ_003) then
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 298, 39, 1000015, nil);
|
|
||||||
endTutorialMode(player);
|
endTutorialMode(player);
|
||||||
elseif (sequence == SEQ_007) then
|
elseif (sequence == SEQ_007) then
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 80, 39, 1000015, nil);
|
quest:StartSequenceForNpcLs(SEQ_035);
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 81, 39, 1000015, nil);
|
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 82, 39, 1000015, nil);
|
|
||||||
quest:StartSequence(SEQ_035);
|
|
||||||
elseif (sequence == SEQ_070) then
|
elseif (sequence == SEQ_070) then
|
||||||
local lsStep = data:IncCounter(CNTR_LS_MSG);
|
quest:StartSequenceForNpcLs(SEQ_075);
|
||||||
if (lsStep == 1) then
|
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 80, 39, 1000015, nil);
|
|
||||||
elseif (lsStep == 2) then
|
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 80, 39, 1000015, nil);
|
|
||||||
elseif (lsStep == 3) then
|
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 80, 39, 1000015, nil);
|
|
||||||
else
|
|
||||||
player:SendGameMessageLocalizedDisplayName(quest, 80, 39, 1000015, nil);
|
|
||||||
quest:StartSequence(SEQ_075);
|
|
||||||
end
|
|
||||||
player:EndEvent();
|
|
||||||
elseif (sequence == SEQ_090) then
|
elseif (sequence == SEQ_090) then
|
||||||
callClientFunction(player, "delegateEvent", player, quest, "processEvent637");
|
quest:StartSequenceForNpcLs(SEQ_092);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
quest:StartSequence(SEQ_092);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function startMan0l1Content(player, quest)
|
function startMan0l1Content(player, quest)
|
||||||
|
@ -694,7 +706,7 @@ function startMan0l1Content(player, quest)
|
||||||
end
|
end
|
||||||
|
|
||||||
function getJournalInformation(player, quest)
|
function getJournalInformation(player, quest)
|
||||||
return 0, quest:GetData():GetCounter(CNTR_SEQ7_CUL) * 5, quest:GetData():GetCounter(CNTR_SEQ7_MRD) * 5;
|
return 0, quest:GetData():GetCounter(CNTR_SEQ7_CUL) * 5, quest:GetData():GetCounter(CNTR_SEQ7_MSK) * 5;
|
||||||
end
|
end
|
||||||
|
|
||||||
function getJournalMapMarkerList(player, quest)
|
function getJournalMapMarkerList(player, quest)
|
||||||
|
|
|
@ -1845,16 +1845,20 @@ namespace Meteor.Map.Actors
|
||||||
return quests;
|
return quests;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleNpcLS(uint id)
|
public bool HandleNpcLs(uint id)
|
||||||
{
|
{
|
||||||
foreach (Quest quest in questScenario)
|
foreach (Quest quest in questScenario)
|
||||||
{
|
{
|
||||||
if (quest != null)
|
if (quest != null && quest.HasNpcLsMsgs(id))
|
||||||
quest.OnNpcLS(this, id);
|
{
|
||||||
|
quest.OnNpcLS(this);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetNpcLS(uint npcLSId, uint state)
|
public void SetNpcLs(uint npcLSId, uint state)
|
||||||
{
|
{
|
||||||
bool isCalling, isExtra;
|
bool isCalling, isExtra;
|
||||||
isCalling = isExtra = false;
|
isCalling = isExtra = false;
|
||||||
|
|
|
@ -35,6 +35,7 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
private QuestState questState = null;
|
private QuestState questState = null;
|
||||||
private QuestData data = null;
|
private QuestData data = null;
|
||||||
|
|
||||||
|
|
||||||
// Creates a Static Quest for the StaticActors list.
|
// Creates a Static Quest for the StaticActors list.
|
||||||
public Quest(uint actorID, string className, string classPath)
|
public Quest(uint actorID, string className, string classPath)
|
||||||
: base(actorID)
|
: base(actorID)
|
||||||
|
@ -59,11 +60,11 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a Instance Quest that has been started with data.
|
// Creates a Instance Quest that has been started with data.
|
||||||
public Quest(Player owner, Quest staticQuest, ushort sequence, uint flags, ushort counter1, ushort counter2, ushort counter3, ushort counter4) : this(staticQuest)
|
public Quest(Player owner, Quest staticQuest, ushort sequence, uint flags, ushort counter1, ushort counter2, ushort counter3, ushort counter4, uint npcLsFrom, byte npcLsMsgStep) : this(staticQuest)
|
||||||
{
|
{
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
currentSequence = sequence;
|
currentSequence = sequence;
|
||||||
data = new QuestData(owner, this, flags, counter1, counter2, counter3, counter4);
|
data = new QuestData(owner, this, flags, counter1, counter2, counter3, counter4, npcLsFrom, npcLsMsgStep);
|
||||||
questState = new QuestState(owner, this);
|
questState = new QuestState(owner, this);
|
||||||
questState.UpdateState();
|
questState.UpdateState();
|
||||||
}
|
}
|
||||||
|
@ -137,6 +138,35 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void NewNpcLsMsg(uint from)
|
||||||
|
{
|
||||||
|
data.SetNpcLsFrom(from);
|
||||||
|
owner.SetNpcLs(from, Player.NPCLS_ALERT);
|
||||||
|
owner.SendGameMessage(Server.GetWorldManager().GetActor(), 25119, 0x20, (object)from); // A glow emanates from the <NpcLs> linkpearl.
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReadNpcLsMsg()
|
||||||
|
{
|
||||||
|
data.IncrementNpcLsMsgStep();
|
||||||
|
owner.SetNpcLs(data.GetNpcLsFrom(), Player.NPCLS_ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EndOfNpcLsMsgs()
|
||||||
|
{
|
||||||
|
owner.SetNpcLs(data.GetNpcLsFrom(), Player.NPCLS_INACTIVE);
|
||||||
|
data.ClearNpcLs();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasNpcLsMsgs(uint from)
|
||||||
|
{
|
||||||
|
return data.GetNpcLsFrom() == from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetNpcLsMsgStep()
|
||||||
|
{
|
||||||
|
return data.GetMsgStep();
|
||||||
|
}
|
||||||
|
|
||||||
public QuestState GetQuestState()
|
public QuestState GetQuestState()
|
||||||
{
|
{
|
||||||
return questState;
|
return questState;
|
||||||
|
@ -164,9 +194,9 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
LuaEngine.GetInstance().CallLuaFunction(caller, this, "onNotice", true, triggerName);
|
LuaEngine.GetInstance().CallLuaFunction(caller, this, "onNotice", true, triggerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnNpcLS(Player caller, uint npcLSId)
|
public void OnNpcLS(Player caller)
|
||||||
{
|
{
|
||||||
LuaEngine.GetInstance().CallLuaFunction(caller, this, "onNpcLS", true, npcLSId);
|
LuaEngine.GetInstance().CallLuaFunction(caller, this, "onNpcLS", true, data.GetNpcLsFrom(), data.GetMsgStep());
|
||||||
}
|
}
|
||||||
|
|
||||||
public object[] GetJournalInformation()
|
public object[] GetJournalInformation()
|
||||||
|
@ -213,6 +243,12 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
questState.UpdateState();
|
questState.UpdateState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StartSequenceForNpcLs(ushort sequence)
|
||||||
|
{
|
||||||
|
currentSequence = sequence;
|
||||||
|
questState.UpdateState();
|
||||||
|
}
|
||||||
|
|
||||||
public void OnAccept()
|
public void OnAccept()
|
||||||
{
|
{
|
||||||
data = new QuestData(owner, this);
|
data = new QuestData(owner, this);
|
||||||
|
@ -237,6 +273,5 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
data = null;
|
data = null;
|
||||||
questState.UpdateState();
|
questState.UpdateState();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,9 +17,12 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
private ushort counter3;
|
private ushort counter3;
|
||||||
private ushort counter4;
|
private ushort counter4;
|
||||||
|
|
||||||
|
private uint npcLsFrom = 0;
|
||||||
|
private byte npcLsMessageStep = 0;
|
||||||
|
|
||||||
public bool Dirty { get; private set; } = false;
|
public bool Dirty { get; private set; } = false;
|
||||||
|
|
||||||
public QuestData(Player owner, Quest parent, uint flags, ushort counter1, ushort counter2, ushort counter3, ushort counter4)
|
public QuestData(Player owner, Quest parent, uint flags, ushort counter1, ushort counter2, ushort counter3, ushort counter4, uint npcLsFrom, byte npcLsMessageStep)
|
||||||
{
|
{
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
|
@ -28,6 +31,8 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
this.counter2 = counter2;
|
this.counter2 = counter2;
|
||||||
this.counter3 = counter3;
|
this.counter3 = counter3;
|
||||||
this.counter4 = counter4;
|
this.counter4 = counter4;
|
||||||
|
this.npcLsFrom = npcLsFrom;
|
||||||
|
this.npcLsMessageStep = npcLsMessageStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QuestData(Player owner, Quest parent)
|
public QuestData(Player owner, Quest parent)
|
||||||
|
@ -160,6 +165,34 @@ namespace Meteor.Map.Actors.QuestNS
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetNpcLsFrom(uint from)
|
||||||
|
{
|
||||||
|
npcLsFrom = from;
|
||||||
|
npcLsMessageStep = 1;
|
||||||
|
Dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void IncrementNpcLsMsgStep()
|
||||||
|
{
|
||||||
|
npcLsMessageStep++;
|
||||||
|
Dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public uint GetNpcLsFrom()
|
||||||
|
{
|
||||||
|
return npcLsFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte GetMsgStep()
|
||||||
|
{
|
||||||
|
return npcLsMessageStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearNpcLs()
|
||||||
|
{
|
||||||
|
npcLsFrom = 0;
|
||||||
|
}
|
||||||
|
|
||||||
public void ClearDirty()
|
public void ClearDirty()
|
||||||
{
|
{
|
||||||
Dirty = false;
|
Dirty = false;
|
||||||
|
|
|
@ -591,7 +591,7 @@ namespace Meteor.Map
|
||||||
|
|
||||||
query = @"
|
query = @"
|
||||||
UPDATE characters_quest_scenario
|
UPDATE characters_quest_scenario
|
||||||
SET sequence = @sequence, flags = @flags, counter1 = @counter1, counter2 = @counter2, counter3 = @counter3
|
SET sequence = @sequence, flags = @flags, counter1 = @counter1, counter2 = @counter2, counter3 = @counter3, counter4 = @counter4, npcLsFrom = @npcLsFrom, npcLsMsgStep = @npcLsMsgStep
|
||||||
WHERE characterId = @charaId and questId = @questId
|
WHERE characterId = @charaId and questId = @questId
|
||||||
";
|
";
|
||||||
|
|
||||||
|
@ -600,13 +600,13 @@ namespace Meteor.Map
|
||||||
cmd.Parameters.AddWithValue("@questId", 0xFFFFF & quest.Id);
|
cmd.Parameters.AddWithValue("@questId", 0xFFFFF & quest.Id);
|
||||||
cmd.Parameters.AddWithValue("@sequence", quest.GetSequence());
|
cmd.Parameters.AddWithValue("@sequence", quest.GetSequence());
|
||||||
|
|
||||||
if (qData != null)
|
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("@flags", qData.GetFlags());
|
cmd.Parameters.AddWithValue("@flags", qData.GetFlags());
|
||||||
cmd.Parameters.AddWithValue("@counter1", qData.GetCounter(1));
|
cmd.Parameters.AddWithValue("@counter1", qData.GetCounter(1));
|
||||||
cmd.Parameters.AddWithValue("@counter2", qData.GetCounter(2));
|
cmd.Parameters.AddWithValue("@counter2", qData.GetCounter(2));
|
||||||
cmd.Parameters.AddWithValue("@counter3", qData.GetCounter(3));
|
cmd.Parameters.AddWithValue("@counter3", qData.GetCounter(3));
|
||||||
}
|
cmd.Parameters.AddWithValue("@counter4", qData.GetCounter(4));
|
||||||
|
cmd.Parameters.AddWithValue("@npcLsFrom", qData.GetNpcLsFrom());
|
||||||
|
cmd.Parameters.AddWithValue("@npcLsMsgStep", qData.GetMsgStep());
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
|
@ -1216,7 +1216,10 @@ namespace Meteor.Map
|
||||||
flags,
|
flags,
|
||||||
counter1,
|
counter1,
|
||||||
counter2,
|
counter2,
|
||||||
counter3
|
counter3,
|
||||||
|
counter4,
|
||||||
|
npcLsFrom,
|
||||||
|
npcLsMsgStep
|
||||||
FROM characters_quest_scenario WHERE characterId = @charId";
|
FROM characters_quest_scenario WHERE characterId = @charId";
|
||||||
|
|
||||||
cmd = new MySqlCommand(query, conn);
|
cmd = new MySqlCommand(query, conn);
|
||||||
|
@ -1232,11 +1235,13 @@ namespace Meteor.Map
|
||||||
ushort counter1 = reader.GetUInt16("counter1");
|
ushort counter1 = reader.GetUInt16("counter1");
|
||||||
ushort counter2 = reader.GetUInt16("counter2");
|
ushort counter2 = reader.GetUInt16("counter2");
|
||||||
ushort counter3 = reader.GetUInt16("counter3");
|
ushort counter3 = reader.GetUInt16("counter3");
|
||||||
//ushort counter4 = reader.GetUInt16("counter4");
|
ushort counter4 = reader.GetUInt16("counter4");
|
||||||
|
ushort npsLsFrom = reader.GetUInt16("npcLsFrom");
|
||||||
|
byte npcLsMsgStep = reader.GetByte("npcLsMsgStep");
|
||||||
|
|
||||||
Quest baseQuest = (Quest) Server.GetStaticActors(questId);
|
Quest baseQuest = (Quest) Server.GetStaticActors(questId);
|
||||||
player.playerWork.questScenario[index] = questId;
|
player.playerWork.questScenario[index] = questId;
|
||||||
player.questScenario[index] = new Quest(player, baseQuest, sequence, flags, counter1, counter2, counter3, 0);
|
player.questScenario[index] = new Quest(player, baseQuest, sequence, flags, counter1, counter2, counter3, counter4, npsLsFrom, npcLsMsgStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue