Afk disconnect now configurable (not limited to DEBUG/RELEASE), opcodes/gamemessage extensions, static refactoring, QuestTrigger improvements, small GameClient.cs and Player.cs improvements.
This commit is contained in:
parent
e8c75545c7
commit
8d8576f4e7
@ -11,20 +11,22 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using DiIiS_NA.Core.Extensions;
|
||||
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base;
|
||||
|
||||
namespace DiIiS_NA.GameServer.ClientSystem
|
||||
{
|
||||
public class GameClient : IClient
|
||||
{
|
||||
private static readonly Logger Logger = LogManager.CreateLogger("GC");
|
||||
private static readonly Logger Logger = LogManager.CreateLogger("GameClient");
|
||||
|
||||
public IConnection Connection { get; set; }
|
||||
public BattleClient BnetClient { get; set; }
|
||||
|
||||
//private readonly GameBitBuffer _incomingBuffer = new GameBitBuffer(512);
|
||||
private readonly GameBitBuffer _outgoingBuffer = new GameBitBuffer(ushort.MaxValue);
|
||||
private readonly GameBitBuffer _outgoingBuffer = new(ushort.MaxValue);
|
||||
|
||||
private object _clientStreamLock = new object();
|
||||
private readonly object _clientStreamLock = new object();
|
||||
|
||||
public Game Game { get; set; }
|
||||
public Player Player { get; set; }
|
||||
@ -33,21 +35,11 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
|
||||
public bool TickingEnabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return _tickingEnabled;
|
||||
}
|
||||
set
|
||||
{
|
||||
_tickingEnabled = value;
|
||||
//if (value == true)
|
||||
//this.SendTick();
|
||||
}
|
||||
get => _tickingEnabled;
|
||||
set => _tickingEnabled = value;
|
||||
}
|
||||
|
||||
public object _bufferLock = new object(); // we should be locking on this private object, locking on gameclient (this) may cause deadlocks. detailed information: http://msdn.microsoft.com/fr-fr/magazine/cc188793%28en-us%29.aspx /raist.
|
||||
|
||||
public bool IsLoggingOut;
|
||||
public bool IsLoggingOut { get; set; }
|
||||
|
||||
public GameClient(IConnection connection)
|
||||
{
|
||||
@ -58,8 +50,6 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
|
||||
public virtual void Parse(ConnectionDataEventArgs e)
|
||||
{
|
||||
//Console.WriteLine(e.Data.Dump());
|
||||
|
||||
//lock (_clientStreamLock)
|
||||
//{
|
||||
Task.Run(() =>
|
||||
@ -70,25 +60,25 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
//Task.Delay(5000, cancelToken.Token).ContinueWith((task) => { Logger.Warn("Character {0} caused server CPU overload!", this.Player.Toon.Name); this.Game.Dispose(); }, TaskContinuationOptions.NotOnCanceled);
|
||||
try
|
||||
{
|
||||
GameBitBuffer _incomingBuffer = new GameBitBuffer(512);
|
||||
GameBitBuffer incomingBuffer = new(512);
|
||||
|
||||
_incomingBuffer.AppendData(e.Data.ToArray());
|
||||
incomingBuffer.AppendData(e.Data.ToArray());
|
||||
|
||||
while (Connection.IsOpen() && _incomingBuffer.IsPacketAvailable())
|
||||
while (Connection.IsOpen() && incomingBuffer.IsPacketAvailable())
|
||||
{
|
||||
int end = _incomingBuffer.Position;
|
||||
end += _incomingBuffer.ReadInt(32) * 8;
|
||||
int end = incomingBuffer.Position;
|
||||
end += incomingBuffer.ReadInt(32) * 8;
|
||||
|
||||
while ((end - _incomingBuffer.Position) >= 9 && Connection.IsOpen())
|
||||
while ((end - incomingBuffer.Position) >= 9 && Connection.IsOpen())
|
||||
{
|
||||
var message = _incomingBuffer.ParseMessage();
|
||||
var message = incomingBuffer.ParseMessage();
|
||||
//217
|
||||
//
|
||||
if (message == null) continue;
|
||||
try
|
||||
{
|
||||
Logger.LogIncomingPacket(message); // change ConsoleTarget's level to Level.Dump in program.cs if u want to see messages on console.
|
||||
if (message.Id == 96 || message.Id == 369 || message.Id == 269)
|
||||
if (message.Id is 96 or 369 or 269)
|
||||
message.Consumer = Consumers.Inventory;
|
||||
if (message.Consumer != Consumers.None)
|
||||
{
|
||||
@ -96,7 +86,7 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
else Game.Route(this, message);
|
||||
}
|
||||
|
||||
else if (message is ISelfHandler) (message as ISelfHandler).Handle(this); // if message is able to handle itself, let it do so.
|
||||
else if (message is ISelfHandler handler) handler.Handle(this); // if message is able to handle itself, let it do so.
|
||||
else if (message.Id != 217)
|
||||
Logger.Warn("{0} - ID:{1} has no consumer or self-handler.", message.GetType().Name, message.Id);
|
||||
|
||||
@ -107,9 +97,9 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
}
|
||||
}
|
||||
|
||||
_incomingBuffer.Position = end;
|
||||
incomingBuffer.Position = end;
|
||||
}
|
||||
_incomingBuffer.ConsumeData();
|
||||
incomingBuffer.ConsumeData();
|
||||
//Thread.Sleep(5);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -125,14 +115,15 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
//}
|
||||
}
|
||||
|
||||
private int LastReplicatedTick = 0;
|
||||
public void SendMessage(Opcodes opcode) => SendMessage(new SimpleMessage(opcode));
|
||||
|
||||
private int _lastReplicatedTick;
|
||||
public virtual void SendMessage(GameMessage message)
|
||||
{
|
||||
//System.Threading.Thread.Sleep(50);
|
||||
lock (_outgoingBuffer)
|
||||
{
|
||||
if (Game.TickCounter > LastReplicatedTick && TickingEnabled && !(message is GameTickMessage) /*&& !(message is EndOfTickMessage)*/ && !Player.BetweenWorlds)
|
||||
if (Game.TickCounter > _lastReplicatedTick && TickingEnabled && message is not GameTickMessage /*&& !(message is EndOfTickMessage)*/ && !Player.BetweenWorlds)
|
||||
{
|
||||
/*var endMessage = new EndOfTickMessage()
|
||||
{
|
||||
@ -143,12 +134,12 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
_outgoingBuffer.EncodeMessage(endMessage);
|
||||
Connection.Send(_outgoingBuffer.GetPacketAndReset());*/
|
||||
|
||||
LastReplicatedTick = Game.TickCounter;
|
||||
_lastReplicatedTick = Game.TickCounter;
|
||||
var tickMessage = new GameTickMessage(Game.TickCounter);
|
||||
Logger.LogOutgoingPacket(tickMessage);
|
||||
_outgoingBuffer.EncodeMessage(tickMessage);
|
||||
Connection.Send(_outgoingBuffer.GetPacketAndReset());
|
||||
dataSent = false;
|
||||
_dataSent = false;
|
||||
}
|
||||
//if (message is GameTickMessage)
|
||||
//message = new GameTickMessage(this.Game.TickCounter); //reassigning new tick value
|
||||
@ -160,17 +151,14 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
var data = _outgoingBuffer.GetPacketAndReset();
|
||||
Connection.Send(data);
|
||||
}
|
||||
dataSent = true;
|
||||
_dataSent = true;
|
||||
//if (flushImmediately) this.SendTick();
|
||||
}
|
||||
}
|
||||
|
||||
public void SendBytes(byte[] data)
|
||||
{
|
||||
Connection.Send(data);
|
||||
}
|
||||
public void SendBytes(byte[] data) => Connection.Send(data);
|
||||
|
||||
protected bool dataSent = true;
|
||||
private bool _dataSent = true;
|
||||
|
||||
public bool OpenWorldDefined = false;
|
||||
|
||||
@ -179,9 +167,9 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
//if (_outgoingBuffer.Length <= 32) return;
|
||||
lock (_outgoingBuffer)
|
||||
{
|
||||
if (!dataSent) return;
|
||||
if (!_dataSent) return;
|
||||
|
||||
if (TickingEnabled && Game.TickCounter > LastReplicatedTick)
|
||||
if (TickingEnabled && Game.TickCounter > _lastReplicatedTick)
|
||||
{
|
||||
/*this.SendMessage(new EndOfTickMessage()
|
||||
{
|
||||
@ -189,14 +177,14 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
Field1 = this.LastReplicatedTick
|
||||
}); // send the tick end.*/
|
||||
SendMessage(new GameTickMessage(Game.TickCounter)); // send the tick.
|
||||
LastReplicatedTick = Game.TickCounter;
|
||||
_lastReplicatedTick = Game.TickCounter;
|
||||
//this.SendMessage(new GameTickMessage(0)); //before client enters game causes freeze with PvP scoreboard
|
||||
/*this.SendMessage(new EndOfTickMessage()
|
||||
{
|
||||
Field0 = this.Game.TickCounter,
|
||||
Field1 = 0
|
||||
}); // send the tick end*/
|
||||
dataSent = false;
|
||||
_dataSent = false;
|
||||
FlushOutgoingBuffer();
|
||||
}
|
||||
}
|
||||
@ -213,4 +201,21 @@ namespace DiIiS_NA.GameServer.ClientSystem
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class OpcodesExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Sends a simple message with the given opcode.
|
||||
/// </summary>
|
||||
/// <param name="opcode">The opcode</param>
|
||||
/// <param name="clients">The InGameClients</param>
|
||||
public static void SendTo(this Opcodes opcode, params GameClient[] clients) { foreach (var client in clients) client.SendMessage(opcode); }
|
||||
|
||||
/// <summary>
|
||||
/// Sends a message with a given opcode.
|
||||
/// </summary>
|
||||
/// <param name="message">Message to send to client</param>
|
||||
/// <param name="clients">The InGameClients</param>
|
||||
public static void SendTo(this GameMessage message, params GameClient[] clients) { foreach (var client in clients) client.SendMessage(message); }
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,10 +50,10 @@ public class TeleportCommand : CommandGroup
|
||||
{
|
||||
var trigger =
|
||||
invokerClient.InGameClient.Player.World.Game.SideQuestProgress.GlobalQuestTriggers[levelArea];
|
||||
if (trigger.triggerType == QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == QuestStepObjectiveType.EnterLevelArea)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(invokerClient.InGameClient.Player.World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(invokerClient.InGameClient.Player.World); // launch a questEvent
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
@ -41,13 +41,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
{
|
||||
World.Game.QuestProgress.UpdateCounter((int)SNO);
|
||||
if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter)
|
||||
if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -58,23 +58,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
{
|
||||
World.Game.SideQuestProgress.UpdateSideCounter((int)SNO);
|
||||
if (trigger.count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].counter)
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
if (trigger.Count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].Counter)
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
}
|
||||
if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
{
|
||||
World.Game.SideQuestProgress.UpdateGlobalCounter((int)SNO);
|
||||
if (trigger.count == World.Game.SideQuestProgress.GlobalQuestTriggers[(int)SNO].counter)
|
||||
if (trigger.Count == World.Game.SideQuestProgress.GlobalQuestTriggers[(int)SNO].Counter)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)SNO);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@ -120,14 +120,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
{
|
||||
World.Game.QuestProgress.UpdateCounter((int)SNO);
|
||||
if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter)
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter)
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
else
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
|
||||
{
|
||||
World.Game.QuestProgress.UpdateCounter((int)SNO);
|
||||
}
|
||||
@ -135,11 +135,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
||||
else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
{
|
||||
World.Game.SideQuestProgress.UpdateSideCounter((int)SNO);
|
||||
if (trigger.count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].counter)
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
if (trigger.Count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].Counter)
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -96,11 +96,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[Destination.DestLevelAreaSNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -111,11 +111,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
||||
if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.QuestTriggers[Destination.DestLevelAreaSNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -126,11 +126,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
||||
if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[Destination.DestLevelAreaSNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(Destination.DestLevelAreaSNO);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@ -118,13 +118,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
{
|
||||
World.Game.QuestProgress.UpdateCounter((int)SNO);
|
||||
if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO * (-1)].counter)
|
||||
if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO * (-1)].Counter)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@ -234,13 +234,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == QuestStepObjectiveType.InteractWithActor)
|
||||
if (trigger.TriggerType == QuestStepObjectiveType.InteractWithActor)
|
||||
{
|
||||
World.Game.QuestProgress.UpdateCounter((int)SNO);
|
||||
if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter)
|
||||
if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@ -1481,11 +1481,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[Destination.DestLevelAreaSNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -1496,11 +1496,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.QuestTriggers[Destination.DestLevelAreaSNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -1511,11 +1511,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[Destination.DestLevelAreaSNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(Destination.DestLevelAreaSNO);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@ -35,13 +35,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO))
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
|
||||
{
|
||||
World.Game.QuestProgress.UpdateCounter((int)SNO);
|
||||
if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter)
|
||||
if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@ -1573,11 +1573,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
|
||||
if (QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea
|
||||
{
|
||||
var trigger = QuestProgress.QuestTriggers[levelArea];
|
||||
if (trigger.triggerType == QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(encWorld); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(encWorld); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@ -553,7 +553,7 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
||||
if (Game.QuestProgress.QuestTriggers.Count == 1)
|
||||
{
|
||||
var trigger = Game.QuestProgress.QuestTriggers.First();
|
||||
switch (trigger.Value.triggerType)
|
||||
switch (trigger.Value.TriggerType)
|
||||
{
|
||||
case QuestStepObjectiveType.InteractWithActor:
|
||||
{
|
||||
|
||||
@ -279,11 +279,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
|
||||
if (player.World.Game.QuestProgress.QuestTriggers.ContainsKey(SNOId))
|
||||
{
|
||||
var trigger = player.World.Game.QuestProgress.QuestTriggers[SNOId];
|
||||
if (trigger.triggerType == QuestStepObjectiveType.HadConversation)
|
||||
if (trigger.TriggerType == QuestStepObjectiveType.HadConversation)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(player.World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(player.World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -295,11 +295,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
|
||||
if (player.World.Game.SideQuestProgress.QuestTriggers.ContainsKey(SNOId)) //EnterLevelArea
|
||||
{
|
||||
var trigger = player.World.Game.SideQuestProgress.QuestTriggers[SNOId];
|
||||
if (trigger.triggerType == QuestStepObjectiveType.HadConversation)
|
||||
if (trigger.TriggerType == QuestStepObjectiveType.HadConversation)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(player.World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(player.World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -311,11 +311,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
|
||||
if (player.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(SNOId))
|
||||
{
|
||||
var trigger = player.World.Game.SideQuestProgress.GlobalQuestTriggers[SNOId];
|
||||
if (trigger.triggerType == QuestStepObjectiveType.HadConversation)
|
||||
if (trigger.TriggerType == QuestStepObjectiveType.HadConversation)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(player.World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(player.World); // launch a questEvent
|
||||
player.World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(SNOId);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@ -104,7 +104,7 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
|
||||
public int PreSceneId = -1;
|
||||
|
||||
public List<Actor> NecroSkeletons = new() { };
|
||||
public List<Actor> NecromancerSkeletons = new() { };
|
||||
public bool ActiveSkeletons = false;
|
||||
|
||||
public Actor ActiveGolem = null;
|
||||
@ -2663,11 +2663,11 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[levelArea];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
try
|
||||
{
|
||||
Logger.MethodTrace($"EnterLevelArea: {levelArea}");
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -2749,10 +2749,10 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[levelArea];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -2988,18 +2988,20 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
TimedActions.Add(TickTimer.WaitSeconds(World.Game, seconds, onTimeout));
|
||||
}
|
||||
|
||||
private bool DisconnectIdle()
|
||||
{
|
||||
if (!GameServerConfig.Instance.AfkDisconnect || InGameClient.Game.TickCounter - LastMovementTick <= 54000)
|
||||
return false;
|
||||
|
||||
Logger.Warn($"Player $[underline white]${Name}$[/]$ disconnected for being AFK.");
|
||||
Opcodes.CloseGameMessage.SendTo(InGameClient);
|
||||
return true;
|
||||
|
||||
}
|
||||
public void Update(int tickCounter)
|
||||
{
|
||||
if (BetweenWorlds) return;
|
||||
|
||||
#if DEBUG
|
||||
#else
|
||||
if ((this.InGameClient.Game.TickCounter - this.LastMovementTick) > 54000) //15m AFK
|
||||
{
|
||||
|
||||
this.InGameClient.SendMessage(new SimpleMessage(Opcodes.CloseGameMessage));
|
||||
}
|
||||
#endif
|
||||
if (DisconnectIdle()) return;
|
||||
|
||||
// Check the gold
|
||||
if (InGameClient.Game.TickCounter % 120 == 0 && World != null && GoldCollectedTempCount > 0)
|
||||
@ -3069,18 +3071,16 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
// Check if there is an conversation to close in this tick
|
||||
Conversations.Update(World.Game.TickCounter);
|
||||
|
||||
foreach (var proximityGizmo in GetObjectsInRange<Actor>(20f, true))
|
||||
foreach (var proximityGizmo in GetObjectsInRange<Actor>(20f, true).Where(proximityGizmo => proximityGizmo != null && proximityGizmo.SNO != ActorSno.__NONE))
|
||||
{
|
||||
if (proximityGizmo == null || proximityGizmo.SNO == ActorSno.__NONE) continue;
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO) &&
|
||||
proximityGizmo.Visible) //EnterTrigger
|
||||
if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO) && proximityGizmo.Visible) //EnterTrigger
|
||||
{
|
||||
var trigger = World.Game.QuestProgress.QuestTriggers[(int)proximityGizmo.SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger)
|
||||
//this.World.Game.Quests.NotifyQuest(this.World.Game.CurrentQuest, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, proximityGizmo.ActorSNO.Id);
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -3090,11 +3090,11 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO))
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger)
|
||||
{
|
||||
World.Game.SideQuestProgress.UpdateSideCounter((int)proximityGizmo.SNO);
|
||||
if (trigger.count == World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO].counter)
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
if (trigger.Count == World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO].Counter)
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
}
|
||||
}
|
||||
|
||||
@ -3102,11 +3102,11 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
proximityGizmo.Visible) //EnterTrigger
|
||||
{
|
||||
var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[(int)proximityGizmo.SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger)
|
||||
//this.World.Game.Quests.NotifyQuest(this.World.Game.CurrentQuest, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, proximityGizmo.ActorSNO.Id);
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(World); // launch a questEvent
|
||||
World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)proximityGizmo.SNO);
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -3159,22 +3159,21 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
}
|
||||
|
||||
#region Necromancer summons
|
||||
|
||||
var switcherToBool = false;
|
||||
var switcherToBool2 = false;
|
||||
ActiveSkillSavedData nowSkillGolen = null;
|
||||
// ActiveSkillSavedData nowSkillGolen = null; - removed by @iamdroppy - not used in any path; written once, never read
|
||||
var hasActiveSkeletons = false;
|
||||
var hasActiveGolem = false;
|
||||
foreach (var skill in SkillSet.ActiveSkills)
|
||||
if (skill.snoSkill == 453801)
|
||||
switcherToBool = true;
|
||||
hasActiveSkeletons = true;
|
||||
foreach (var skill in SkillSet.ActiveSkills)
|
||||
if (skill.snoSkill == 451537)
|
||||
{
|
||||
switcherToBool2 = true;
|
||||
nowSkillGolen = skill;
|
||||
hasActiveGolem = true;
|
||||
// nowSkillGolen = skill; - removed by @iamdroppy - not used in any path; written once, never read
|
||||
}
|
||||
|
||||
ActiveSkeletons = switcherToBool;
|
||||
EnableGolem = switcherToBool2;
|
||||
ActiveSkeletons = hasActiveSkeletons;
|
||||
EnableGolem = hasActiveGolem;
|
||||
|
||||
|
||||
var killer = new PowerContext
|
||||
@ -3186,9 +3185,9 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
|
||||
if (ActiveSkeletons)
|
||||
{
|
||||
if (Followers.All(s => s.Value != ActorSno._p6_necro_commandskeletons_a) && NecroSkeletons.Any())
|
||||
if (Followers.All(s => s.Value != ActorSno._p6_necro_commandskeletons_a) && NecromancerSkeletons.Any())
|
||||
{
|
||||
foreach (var skeleton in NecroSkeletons)
|
||||
foreach (var skeleton in NecromancerSkeletons)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -3201,17 +3200,18 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
catch{}
|
||||
}
|
||||
|
||||
NecroSkeletons.Clear();
|
||||
NecromancerSkeletons.Clear();
|
||||
}
|
||||
while (NecroSkeletons.Count < 7)
|
||||
while (NecromancerSkeletons.Count < 7)
|
||||
{
|
||||
var necroSkeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, this);
|
||||
necroSkeleton.Brain.DeActivate();
|
||||
necroSkeleton.Scale = 1.2f;
|
||||
var necromancerSkeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, this);
|
||||
necromancerSkeleton.Brain.DeActivate();
|
||||
necromancerSkeleton.Scale = 1.2f;
|
||||
|
||||
necroSkeleton.EnterWorld(PowerContext.RandomDirection(Position, 3f, 8f));
|
||||
NecroSkeletons.Add(necroSkeleton);
|
||||
/*this.InGameClient.SendMessage(new PetMessage()
|
||||
necromancerSkeleton.EnterWorld(PowerContext.RandomDirection(Position, 3f, 8f));
|
||||
NecromancerSkeletons.Add(necromancerSkeleton);
|
||||
/*
|
||||
this.InGameClient.SendMessage(new PetMessage()
|
||||
{
|
||||
Owner = this.PlayerIndex,
|
||||
Index = this.CountFollowers(473147),
|
||||
@ -3219,21 +3219,21 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
Type = 70,
|
||||
});
|
||||
//*/
|
||||
necroSkeleton.Brain.Activate();
|
||||
necromancerSkeleton.Brain.Activate();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var skel in NecroSkeletons)
|
||||
foreach (var necromancerSkeleton in NecromancerSkeletons)
|
||||
{
|
||||
InGameClient.SendMessage(new PetDetachMessage()
|
||||
{
|
||||
PetId = skel.GlobalID
|
||||
PetId = necromancerSkeleton.GlobalID
|
||||
});
|
||||
World.Leave(skel);
|
||||
World.Leave(necromancerSkeleton);
|
||||
}
|
||||
|
||||
NecroSkeletons.Clear();
|
||||
NecromancerSkeletons.Clear();
|
||||
}
|
||||
|
||||
if (EnableGolem || ActiveGolem != null)
|
||||
@ -4084,7 +4084,7 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
||||
},
|
||||
SkillSlotEverAssigned = 0x0F, //0xB4,
|
||||
PlaytimeTotal = Toon.TimePlayed,
|
||||
WaypointFlags = GameServerConfig.Instance.UnlockAllWaypoints ? 0x0000ffff : this.World.Game.WaypointFlags,
|
||||
WaypointFlags = GameServerConfig.Instance.UnlockAllWaypoints ? 0x0000ffff : World.Game.WaypointFlags,
|
||||
HirelingData = new HirelingSavedData()
|
||||
{
|
||||
HirelingInfos = HirelingInfo,
|
||||
|
||||
@ -60,11 +60,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations
|
||||
if (User.World.Game.QuestProgress.QuestTriggers.ContainsKey(town_levelArea)) //EnterLevelArea
|
||||
{
|
||||
var trigger = User.World.Game.QuestProgress.QuestTriggers[town_levelArea];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea)
|
||||
{
|
||||
try
|
||||
{
|
||||
trigger.questEvent.Execute(User.World); // launch a questEvent
|
||||
trigger.QuestEvent.Execute(User.World); // launch a questEvent
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@ -2005,7 +2005,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations
|
||||
}
|
||||
|
||||
|
||||
foreach (var skeleton in ((Player)User).NecroSkeletons)
|
||||
foreach (var skeleton in ((Player)User).NecromancerSkeletons)
|
||||
{
|
||||
//User.PlayEffectGroup(474172);
|
||||
ActorMover mover = new ActorMover(skeleton);
|
||||
|
||||
@ -119,7 +119,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads
|
||||
{
|
||||
PetId = skeletonA.DynamicID(skeletonA.Master as Player)
|
||||
});
|
||||
masterPlr.NecroSkeletons.Remove(skeletonA);
|
||||
masterPlr.NecromancerSkeletons.Remove(skeletonA);
|
||||
}
|
||||
|
||||
if (Target is Minion { Master: Player masterPlr2 }
|
||||
@ -600,13 +600,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads
|
||||
if (Target.World.Game.QuestProgress.QuestTriggers.ContainsKey((int)Target.SNO))
|
||||
{
|
||||
var trigger = Target.World.Game.QuestProgress.QuestTriggers[(int)Target.SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
{
|
||||
Target.World.Game.QuestProgress.UpdateCounter((int)Target.SNO);
|
||||
if (trigger.count == Target.World.Game.QuestProgress.QuestTriggers[(int)Target.SNO].counter)
|
||||
trigger.questEvent.Execute(Target.World); // launch a questEvent
|
||||
if (trigger.Count == Target.World.Game.QuestProgress.QuestTriggers[(int)Target.SNO].Counter)
|
||||
trigger.QuestEvent.Execute(Target.World); // launch a questEvent
|
||||
}
|
||||
else if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
|
||||
else if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
|
||||
{
|
||||
Target.World.Game.QuestProgress.UpdateCounter((int)Target.SNO);
|
||||
}
|
||||
@ -614,11 +614,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads
|
||||
else if (Target.World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)Target.SNO))
|
||||
{
|
||||
var trigger = Target.World.Game.SideQuestProgress.QuestTriggers[(int)Target.SNO];
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
|
||||
{
|
||||
Target.World.Game.SideQuestProgress.UpdateSideCounter((int)Target.SNO);
|
||||
if (trigger.count == Target.World.Game.SideQuestProgress.QuestTriggers[(int)Target.SNO].counter)
|
||||
trigger.questEvent.Execute(Target.World); // launch a questEvent
|
||||
if (trigger.Count == Target.World.Game.SideQuestProgress.QuestTriggers[(int)Target.SNO].Counter)
|
||||
trigger.QuestEvent.Execute(Target.World); // launch a questEvent
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,10 +21,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem
|
||||
|
||||
public struct QuestTrigger
|
||||
{
|
||||
public DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType triggerType;
|
||||
public int count;
|
||||
public int counter;
|
||||
public QuestEvent questEvent;
|
||||
public DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType TriggerType;
|
||||
public int Count;
|
||||
public int Counter;
|
||||
public QuestEvent QuestEvent;
|
||||
}
|
||||
|
||||
public class Quest
|
||||
@ -88,19 +88,19 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem
|
||||
protected void ListenConversation(int convId, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd(convId,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, count = 1, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, Count = 1, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
protected void GlobalListenConversation(int convId, QuestEvent qevent)
|
||||
{
|
||||
GlobalQuestTriggers.TryAdd(convId,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, count = 1, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, Count = 1, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
protected void ListenKill(ActorSno monsterSno, int monsterCount, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd((int)monsterSno,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster, count = monsterCount, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster, Count = monsterCount, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
public void ActiveArrow(World world, ActorSno sno, WorldSno destworld = WorldSno.__NONE)
|
||||
@ -192,40 +192,40 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem
|
||||
protected void ListenKillBonus(ActorSno monsterSno, int monsterCount, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd((int)monsterSno,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup, count = monsterCount, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup, Count = monsterCount, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
protected void ListenTeleport(int laId, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd(laId,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, count = 1, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, Count = 1, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
protected void GlobalListenTeleport(int laId, QuestEvent qevent)
|
||||
{
|
||||
GlobalQuestTriggers.TryAdd(laId,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, count = 1, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, Count = 1, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
protected void ListenProximity(ActorSno actorSno, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd((int)actorSno,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, count = 1, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, Count = 1, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
protected void ListenInteract(ActorSno actorSno, int actorCount, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd((int)actorSno,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, count = actorCount, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, Count = actorCount, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
protected void ListenInteractBonus(ActorSno actorSno, int actorCount, int counter, QuestEvent qevent)
|
||||
{
|
||||
QuestTriggers.TryAdd((int)actorSno,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, count = actorCount, counter = counter, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, Count = actorCount, Counter = counter, QuestEvent = qevent });
|
||||
}
|
||||
protected void GlobalListenInteract(ActorSno actorSno, int actorCount, QuestEvent qevent)
|
||||
{
|
||||
GlobalQuestTriggers.TryAdd((int)actorSno,
|
||||
new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, count = actorCount, counter = 0, questEvent = qevent });
|
||||
new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, Count = actorCount, Counter = 0, QuestEvent = qevent });
|
||||
}
|
||||
|
||||
protected void UnlockTeleport(int waypointId)
|
||||
@ -236,30 +236,30 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem
|
||||
public void UpdateCounter(int dataId)
|
||||
{
|
||||
var trigger = QuestTriggers[dataId];
|
||||
trigger.counter++;
|
||||
trigger.Counter++;
|
||||
QuestTriggers[dataId] = trigger;
|
||||
if (trigger.counter <= trigger.count)
|
||||
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
|
||||
Game.QuestManager.NotifyBonus(trigger.counter, (trigger.counter >= trigger.count));
|
||||
else if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor && dataId == 3628)
|
||||
Game.QuestManager.NotifyBonus(trigger.counter, (trigger.counter >= trigger.count));
|
||||
if (trigger.Counter <= trigger.Count)
|
||||
if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
|
||||
Game.QuestManager.NotifyBonus(trigger.Counter, (trigger.Counter >= trigger.Count));
|
||||
else if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor && dataId == 3628)
|
||||
Game.QuestManager.NotifyBonus(trigger.Counter, (trigger.Counter >= trigger.Count));
|
||||
else
|
||||
Game.QuestManager.NotifyQuest(trigger.counter, (trigger.counter >= trigger.count));
|
||||
Game.QuestManager.NotifyQuest(trigger.Counter, (trigger.Counter >= trigger.Count));
|
||||
}
|
||||
|
||||
public void UpdateSideCounter(int dataId)
|
||||
{
|
||||
var trigger = QuestTriggers[dataId];
|
||||
trigger.counter++;
|
||||
trigger.Counter++;
|
||||
QuestTriggers[dataId] = trigger;
|
||||
if (trigger.counter <= trigger.count)
|
||||
Game.QuestManager.NotifySideQuest(trigger.counter, (trigger.counter >= trigger.count));
|
||||
if (trigger.Counter <= trigger.Count)
|
||||
Game.QuestManager.NotifySideQuest(trigger.Counter, (trigger.Counter >= trigger.Count));
|
||||
}
|
||||
|
||||
public void UpdateGlobalCounter(int dataId)
|
||||
{
|
||||
var trigger = GlobalQuestTriggers[dataId];
|
||||
trigger.counter++;
|
||||
trigger.Counter++;
|
||||
GlobalQuestTriggers[dataId] = trigger;
|
||||
}
|
||||
|
||||
|
||||
@ -56,6 +56,16 @@ namespace DiIiS_NA.GameServer
|
||||
set => Set(nameof(IWServer), value);
|
||||
}
|
||||
|
||||
public bool AfkDisconnect
|
||||
{
|
||||
#if DEBUG
|
||||
get => GetBoolean(nameof(AfkDisconnect), false);
|
||||
#else
|
||||
get => GetBoolean(nameof(AfkTimeoutEnabled), true);
|
||||
#endif
|
||||
set => Set(nameof(AfkDisconnect), value);
|
||||
}
|
||||
|
||||
#region Game Mods
|
||||
|
||||
/// <summary>
|
||||
|
||||
Loading…
Reference in New Issue
user.block.title