1
Fork 0
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:
Filip Maj 2022-03-05 01:02:41 -05:00
parent a618e69dbd
commit 49c6fdbd51
6 changed files with 166 additions and 76 deletions

View file

@ -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

View file

@ -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");
@ -402,8 +410,8 @@ function seq007_onTalk(player, quest, npc, classId)
elseif (classId == CHARLYS) then elseif (classId == CHARLYS) then
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 if (sequence == SEQ_003) then
player:SendGameMessageLocalizedDisplayName(quest, 298, 39, 1000015, nil); 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
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);
player:EndEvent();
quest:StartSequence(SEQ_092);
end end
end end
player:EndEvent();
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)

View file

@ -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;

View file

@ -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();
} }
} }
} }

View file

@ -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;

View file

@ -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,14 +600,14 @@ 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("@counter1", qData.GetCounter(1));
cmd.Parameters.AddWithValue("@flags", qData.GetFlags()); cmd.Parameters.AddWithValue("@counter2", qData.GetCounter(2));
cmd.Parameters.AddWithValue("@counter1", qData.GetCounter(1)); cmd.Parameters.AddWithValue("@counter3", qData.GetCounter(3));
cmd.Parameters.AddWithValue("@counter2", qData.GetCounter(2)); cmd.Parameters.AddWithValue("@counter4", qData.GetCounter(4));
cmd.Parameters.AddWithValue("@counter3", qData.GetCounter(3)); cmd.Parameters.AddWithValue("@npcLsFrom", qData.GetNpcLsFrom());
} cmd.Parameters.AddWithValue("@npcLsMsgStep", qData.GetMsgStep());
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
catch (MySqlException e) catch (MySqlException e)
@ -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);
} }
} }