diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs
index b6f617b..801a63e 100644
--- a/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs
+++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs
@@ -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
+ {
+ ///
+ /// Sends a simple message with the given opcode.
+ ///
+ /// The opcode
+ /// The InGameClients
+ public static void SendTo(this Opcodes opcode, params GameClient[] clients) { foreach (var client in clients) client.SendMessage(opcode); }
+
+ ///
+ /// Sends a message with a given opcode.
+ ///
+ /// Message to send to client
+ /// The InGameClients
+ public static void SendTo(this GameMessage message, params GameClient[] clients) { foreach (var client in clients) client.SendMessage(message); }
+ }
}
diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs
index 389061c..9a66a05 100644
--- a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs
+++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs
@@ -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
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs
index 687c300..1053c42 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs
@@ -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)
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs
index c7f147e..6725480 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs
@@ -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
}
}
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs
index ddde9ac..4714613 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs
@@ -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)
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs
index e23dfc2..bdd51ea 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs
@@ -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)
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs
index 99167e5..ec5019a 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs
@@ -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)
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs
index 7f164e6..67b2711 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs
@@ -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)
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs
index 1944704..4b3a78f 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs
@@ -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)
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs
index e01e328..f952a83 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs
@@ -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)
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs
index b06ce7b..ea1ac37 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs
@@ -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:
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs
index 6699a5a..1ed0371 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs
@@ -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)
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs
index 572dbf6..4fc04e6 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs
@@ -104,7 +104,7 @@ public class Player : Actor, IMessageConsumer, IUpdateable
public int PreSceneId = -1;
- public List NecroSkeletons = new() { };
+ public List 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,19 +2988,21 @@ 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(20f, true))
+ foreach (var proximityGizmo in GetObjectsInRange(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,
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs
index 8d5bd37..4b0f5b7 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs
@@ -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)
{
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs
index fa2aea0..7628543 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs
@@ -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);
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs
index f957c7c..a14164a 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs
@@ -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
}
}
diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs
index 1951e36..30aaa07 100644
--- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs
+++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs
@@ -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;
}
diff --git a/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs b/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs
index feff5ed..19863b7 100644
--- a/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs
+++ b/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs
@@ -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
///