mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-06-10 06:24:38 +02: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
|
@ -1845,16 +1845,20 @@ namespace Meteor.Map.Actors
|
|||
return quests;
|
||||
}
|
||||
|
||||
public void HandleNpcLS(uint id)
|
||||
public bool HandleNpcLs(uint id)
|
||||
{
|
||||
foreach (Quest quest in questScenario)
|
||||
{
|
||||
if (quest != null)
|
||||
quest.OnNpcLS(this, id);
|
||||
if (quest != null && quest.HasNpcLsMsgs(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;
|
||||
isCalling = isExtra = false;
|
||||
|
|
|
@ -35,6 +35,7 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
private QuestState questState = null;
|
||||
private QuestData data = null;
|
||||
|
||||
|
||||
// Creates a Static Quest for the StaticActors list.
|
||||
public Quest(uint actorID, string className, string classPath)
|
||||
: base(actorID)
|
||||
|
@ -59,11 +60,11 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
}
|
||||
|
||||
// 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;
|
||||
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.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()
|
||||
{
|
||||
return questState;
|
||||
|
@ -164,9 +194,9 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
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()
|
||||
|
@ -213,6 +243,12 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
questState.UpdateState();
|
||||
}
|
||||
|
||||
public void StartSequenceForNpcLs(ushort sequence)
|
||||
{
|
||||
currentSequence = sequence;
|
||||
questState.UpdateState();
|
||||
}
|
||||
|
||||
public void OnAccept()
|
||||
{
|
||||
data = new QuestData(owner, this);
|
||||
|
@ -237,6 +273,5 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
data = null;
|
||||
questState.UpdateState();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,9 +17,12 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
private ushort counter3;
|
||||
private ushort counter4;
|
||||
|
||||
private uint npcLsFrom = 0;
|
||||
private byte npcLsMessageStep = 0;
|
||||
|
||||
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.parent = parent;
|
||||
|
@ -28,6 +31,8 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
this.counter2 = counter2;
|
||||
this.counter3 = counter3;
|
||||
this.counter4 = counter4;
|
||||
this.npcLsFrom = npcLsFrom;
|
||||
this.npcLsMessageStep = npcLsMessageStep;
|
||||
}
|
||||
|
||||
public QuestData(Player owner, Quest parent)
|
||||
|
@ -160,6 +165,34 @@ namespace Meteor.Map.Actors.QuestNS
|
|||
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()
|
||||
{
|
||||
Dirty = false;
|
||||
|
|
|
@ -591,7 +591,7 @@ namespace Meteor.Map
|
|||
|
||||
query = @"
|
||||
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
|
||||
";
|
||||
|
||||
|
@ -600,14 +600,14 @@ namespace Meteor.Map
|
|||
cmd.Parameters.AddWithValue("@questId", 0xFFFFF & quest.Id);
|
||||
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("@counter2", qData.GetCounter(2));
|
||||
cmd.Parameters.AddWithValue("@counter3", qData.GetCounter(3));
|
||||
}
|
||||
|
||||
cmd.Parameters.AddWithValue("@flags", qData.GetFlags());
|
||||
cmd.Parameters.AddWithValue("@counter1", qData.GetCounter(1));
|
||||
cmd.Parameters.AddWithValue("@counter2", qData.GetCounter(2));
|
||||
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();
|
||||
}
|
||||
catch (MySqlException e)
|
||||
|
@ -1216,7 +1216,10 @@ namespace Meteor.Map
|
|||
flags,
|
||||
counter1,
|
||||
counter2,
|
||||
counter3
|
||||
counter3,
|
||||
counter4,
|
||||
npcLsFrom,
|
||||
npcLsMsgStep
|
||||
FROM characters_quest_scenario WHERE characterId = @charId";
|
||||
|
||||
cmd = new MySqlCommand(query, conn);
|
||||
|
@ -1232,11 +1235,13 @@ namespace Meteor.Map
|
|||
ushort counter1 = reader.GetUInt16("counter1");
|
||||
ushort counter2 = reader.GetUInt16("counter2");
|
||||
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);
|
||||
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
Add a link
Reference in a new issue