diff --git a/Projects/Server.Tests/Helpers/AssertExtensions.cs b/Projects/Server.Tests/Helpers/AssertExtensions.cs
index abc230f25..2782a6c05 100644
--- a/Projects/Server.Tests/Helpers/AssertExtensions.cs
+++ b/Projects/Server.Tests/Helpers/AssertExtensions.cs
@@ -1,5 +1,4 @@
using System;
-using System.Text;
namespace Server.Tests
{
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs
index 526795be0..e3a044948 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs
@@ -1,5 +1,4 @@
using System;
-using System.Buffers;
using System.Collections.Generic;
using Server.Network;
using Xunit;
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs
index 7ffdbf57a..0dc7a4245 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs
@@ -1,6 +1,4 @@
using System;
-using System.Buffers;
-using Server.Items;
using Server.Network;
using Xunit;
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs
index f050a77ee..d14dbbdff 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs
@@ -1,5 +1,4 @@
using System;
-using System.Buffers;
using Server.Network;
using Xunit;
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs
index 7385fd9c1..700916515 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs
@@ -1,7 +1,5 @@
using System;
-using System.Buffers;
using System.Collections.Generic;
-using System.Linq;
using Server.ContextMenus;
using Server.Menus.ItemLists;
using Server.Menus.Questions;
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs
index 190a4aa53..1857e2dc3 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs
@@ -1,5 +1,4 @@
using System;
-using System.Buffers;
using Server.Network;
using Xunit;
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs
index cd9264d01..86f59060f 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs
@@ -1,5 +1,4 @@
using System;
-using System.Buffers;
using Server.Items;
using Server.Network;
using Xunit;
diff --git a/Projects/Server/Network/Packets/TargetPackets.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPackets.cs
similarity index 62%
rename from Projects/Server/Network/Packets/TargetPackets.cs
rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPackets.cs
index 05c14528b..e5dd5fc94 100644
--- a/Projects/Server/Network/Packets/TargetPackets.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPackets.cs
@@ -1,18 +1,3 @@
-/*************************************************************************
- * ModernUO *
- * Copyright 2019-2020 - ModernUO Development Team *
- * Email: hi@modernuo.com *
- * File: TargetPackets.cs *
- * *
- * This program is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation, either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program. If not, see . *
- *************************************************************************/
-
using System.IO;
using Server.Targeting;
diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs
index 75173ed24..92a1f976a 100644
--- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs
+++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs
@@ -39,37 +39,14 @@ namespace Server.Tests.Network
var p = new Point3D(1000, 100, 10);
MultiTarget t = new TestMultiTarget(multiID, p);
- var data = new MultiTargetReqHS(t).Compile();
+ var expected = new MultiTargetReqHS(t).Compile();
- Span expectedData = stackalloc byte[30];
- var pos = 0;
+ using var ns = PacketTestUtilities.CreateTestNetState();
+ ns.ProtocolChanges |= ProtocolChanges.HighSeas;
+ ns.SendMultiTargetReq(t);
- expectedData.Write(ref pos, (byte)0x99); // Packet ID
- expectedData.Write(ref pos, t.AllowGround);
- expectedData.Write(ref pos, t.TargetID);
-
-#if NO_LOCAL_INIT
- expectedData.Write(ref pos, 0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (ushort)0);
-#else
- pos += 12;
-#endif
-
- expectedData.Write(ref pos, (short)t.MultiID);
- expectedData.Write(ref pos, (ushort)t.Offset.X);
- expectedData.Write(ref pos, (ushort)t.Offset.Y);
- expectedData.Write(ref pos, (short)t.Offset.Z);
-
-#if NO_LOCAL_INIT
- // Hue (4 bytes)
- expectedData.Write(ref pos, 0);
-#endif
-
- AssertThat.Equal(data, expectedData);
+ var result = ns.SendPipe.Reader.TryRead();
+ AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
}
[Fact]
@@ -79,83 +56,37 @@ namespace Server.Tests.Network
var p = new Point3D(1000, 100, 10);
MultiTarget t = new TestMultiTarget(multiID, p);
- var data = new MultiTargetReq(t).Compile();
+ var expected = new MultiTargetReq(t).Compile();
- Span expectedData = stackalloc byte[26];
- var pos = 0;
+ using var ns = PacketTestUtilities.CreateTestNetState();
+ ns.SendMultiTargetReq(t);
- expectedData.Write(ref pos, (byte)0x99); // Packet ID
- expectedData.Write(ref pos, t.AllowGround);
- expectedData.Write(ref pos, t.TargetID);
-
-#if NO_LOCAL_INIT
- expectedData.Write(ref pos, 0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (ushort)0);
-#else
- pos += 12;
-#endif
-
- expectedData.Write(ref pos, (short)t.MultiID);
- expectedData.Write(ref pos, (ushort)t.Offset.X);
- expectedData.Write(ref pos, (ushort)t.Offset.Y);
- expectedData.Write(ref pos, (short)t.Offset.Z);
-
- AssertThat.Equal(data, expectedData);
+ var result = ns.SendPipe.Reader.TryRead();
+ AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
}
[Fact]
public void TestCancelTarget()
{
- var data = new CancelTarget().Compile();
+ var expected = new CancelTarget().Compile();
+ using var ns = PacketTestUtilities.CreateTestNetState();
+ ns.SendCancelTarget();
- Span expectedData = stackalloc byte[19];
- var pos = 0;
-
- expectedData.Write(ref pos, (byte)0x6C); // Packet ID
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, 0);
- expectedData.Write(ref pos, (byte)3); // Beneficial / Harmful
-
-#if NO_LOCAL_INIT
- expectedData.Write(ref pos, 0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (ushort)0);
-#endif
-
- AssertThat.Equal(data, expectedData);
+ var result = ns.SendPipe.Reader.TryRead();
+ AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
}
[Fact]
public void TestTargetReq()
{
var t = new TestTarget(10, true, TargetFlags.Beneficial);
- var data = new TargetReq(t).Compile();
+ var expected = new TargetReq(t).Compile();
- Span expectedData = stackalloc byte[19];
- var pos = 0;
+ using var ns = PacketTestUtilities.CreateTestNetState();
+ ns.SendTargetReq(t);
- expectedData.Write(ref pos, (byte)0x6C); // Packet ID
- expectedData.Write(ref pos, t.AllowGround);
- expectedData.Write(ref pos, t.TargetID);
- expectedData.Write(ref pos, (byte)t.Flags);
-
-#if NO_LOCAL_INIT
- expectedData.Write(ref pos, 0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (ushort)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (byte)0);
- expectedData.Write(ref pos, (ushort)0);
-#endif
-
- AssertThat.Equal(data, expectedData);
+ var result = ns.SendPipe.Reader.TryRead();
+ AssertThat.Equal(result.Buffer[0].AsSpan(0), expected);
}
}
}
diff --git a/Projects/Server/Mobiles/Mobile.cs b/Projects/Server/Mobiles/Mobile.cs
index 0009fc53f..97b994895 100644
--- a/Projects/Server/Mobiles/Mobile.cs
+++ b/Projects/Server/Mobiles/Mobile.cs
@@ -1059,9 +1059,9 @@ namespace Server
m_Target = newTarget;
- if (newTarget != null && m_NetState != null && !TargetLocked)
+ if (newTarget != null && !TargetLocked)
{
- m_NetState.Send(newTarget.GetPacketFor(m_NetState));
+ newTarget.SendTargetTo(m_NetState);
}
OnTargetChange();
diff --git a/Projects/Server/Network/Packets/OutgoingMessagePackets.cs b/Projects/Server/Network/Packets/OutgoingMessagePackets.cs
index 78c883f99..b9421e80e 100644
--- a/Projects/Server/Network/Packets/OutgoingMessagePackets.cs
+++ b/Projects/Server/Network/Packets/OutgoingMessagePackets.cs
@@ -16,7 +16,6 @@
using System;
using System.Buffers;
using System.IO;
-using System.Linq;
using System.Runtime.CompilerServices;
namespace Server.Network
diff --git a/Projects/Server/Network/Packets/OutgoingTargetPackets.cs b/Projects/Server/Network/Packets/OutgoingTargetPackets.cs
new file mode 100644
index 000000000..dac4fa87a
--- /dev/null
+++ b/Projects/Server/Network/Packets/OutgoingTargetPackets.cs
@@ -0,0 +1,87 @@
+/*************************************************************************
+ * ModernUO *
+ * Copyright 2019-2020 - ModernUO Development Team *
+ * Email: hi@modernuo.com *
+ * File: OutgoingTargetPackets.cs *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ *************************************************************************/
+
+using System;
+using System.Buffers;
+using Server.Targeting;
+
+namespace Server.Network
+{
+ public static class OutgoingTargetPackets
+ {
+ public static void SendMultiTargetReq(this NetState ns, MultiTarget t)
+ {
+ if (ns == null || !ns.GetSendBuffer(out var buffer))
+ {
+ return;
+ }
+
+ var writer = new CircularBufferWriter(buffer);
+ writer.Write((byte)0x99); // Packet ID
+ writer.Write(t.AllowGround);
+ writer.Write(t.TargetID);
+ writer.Write((byte)t.Flags);
+ writer.Clear(11);
+ writer.Write((short)t.MultiID);
+ writer.Write((short)t.Offset.X);
+ writer.Write((short)t.Offset.Y);
+ writer.Write((short)t.Offset.Z);
+ if (ns.HighSeas)
+ {
+ writer.Write(0);
+ }
+
+ ns.Send(ref buffer, writer.Position);
+ }
+
+ public static void SendCancelTarget(this NetState ns)
+ {
+ if (ns == null)
+ {
+ return;
+ }
+
+ Span span = stackalloc byte[]
+ {
+ 0x6C, // Packet ID
+ 0, // Allow Ground?
+ 0, 0, 0, 0, // Target ID
+ 3, // Flags
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0
+ };
+
+ ns.Send(span);
+ }
+
+ public static void SendTargetReq(this NetState ns, Target t)
+ {
+ if (ns == null || !ns.GetSendBuffer(out var buffer))
+ {
+ return;
+ }
+
+ var writer = new CircularBufferWriter(buffer);
+ writer.Write((byte)0x6C); // Packet ID
+ writer.Write(t.AllowGround);
+ writer.Write(t.TargetID);
+ writer.Write((byte)t.Flags);
+ writer.Clear(12);
+
+ ns.Send(ref buffer, writer.Position);
+ }
+ }
+}
diff --git a/Projects/Server/Targeting/MultiTarget.cs b/Projects/Server/Targeting/MultiTarget.cs
index 4e6867803..24ffba3a8 100644
--- a/Projects/Server/Targeting/MultiTarget.cs
+++ b/Projects/Server/Targeting/MultiTarget.cs
@@ -18,14 +18,6 @@ namespace Server.Targeting
public Point3D Offset { get; set; }
- public override Packet GetPacketFor(NetState ns)
- {
- if (ns.HighSeas)
- {
- return new MultiTargetReqHS(this);
- }
-
- return new MultiTargetReq(this);
- }
+ public override void SendTargetTo(NetState ns) => ns.SendMultiTargetReq(this);
}
}
diff --git a/Projects/Server/Targeting/Target.cs b/Projects/Server/Targeting/Target.cs
index afc912c05..26ab65ec0 100644
--- a/Projects/Server/Targeting/Target.cs
+++ b/Projects/Server/Targeting/Target.cs
@@ -37,7 +37,7 @@ namespace Server.Targeting
public static void Cancel(Mobile m)
{
- m.NetState?.Send(CancelTarget.Instance);
+ m.NetState.SendCancelTarget();
m.Target?.OnTargetCancel(m, TargetCancelType.Canceled);
}
@@ -68,7 +68,7 @@ namespace Server.Targeting
OnTargetFinish(from);
}
- public virtual Packet GetPacketFor(NetState ns) => new TargetReq(this);
+ public virtual void SendTargetTo(NetState ns) => ns.SendTargetReq(this);
public void Cancel(Mobile from, TargetCancelType type)
{
diff --git a/Projects/Server/World/World.cs b/Projects/Server/World/World.cs
index 4ea98b54a..984910ffb 100644
--- a/Projects/Server/World/World.cs
+++ b/Projects/Server/World/World.cs
@@ -14,7 +14,6 @@
*************************************************************************/
using System;
-using System.Buffers;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
diff --git a/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs b/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs
index 73a04f4df..c5e4ce1a5 100644
--- a/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs
+++ b/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs
@@ -1,5 +1,4 @@
using System;
-using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Text;
diff --git a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs
index d379028a9..4a37dee19 100644
--- a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs
+++ b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs
@@ -1,5 +1,4 @@
using System;
-using System.Buffers;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Server.ContextMenus;
diff --git a/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs b/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs
index d830e8148..9030619cb 100644
--- a/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs
+++ b/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using Server.Network;
namespace Server.Spells.Mysticism
{
diff --git a/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs b/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs
index 4dd9a1a47..f927aba56 100644
--- a/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs
+++ b/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using Server.Network;
namespace Server.Spells.Mysticism
{