From 3dd0d8f42b4990a3295ef2a64bffe45689755415 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Tue, 5 Jan 2021 00:35:56 -0800 Subject: [PATCH] fix(core): Converts the rest of the packets (#385) - [X] Converts vendor buy packets - [X] Converts vendor sell packets - [X] Converts target packets - [X] Converts secure trade packets - [X] Converts some player packets that were missed --- .../Network/Packets/OutgoingAccountPackets.cs | 2 +- .../Packets/OutgoingContainerPackets.cs | 2 +- .../Packets/OutgoingEquipmentPackets.cs | 2 +- .../Network/Packets/OutgoingMessagePackets.cs | 3 -- .../Network/Packets/OutgoingMobilePackets.cs | 5 +-- .../Network/Packets/OutgoingPlayerPackets.cs | 16 ++++---- .../Packets/OutgoingSecureTradePackets.cs | 24 ++++++------ .../Network/Packets/OutgoingTargetPackets.cs | 39 ++++++------------- .../Packets/OutgoingVendorBuyPackets.cs | 39 ++++++++++--------- .../Packets/OutgoingVendorSellPackets.cs | 21 +++++++--- 10 files changed, 73 insertions(+), 80 deletions(-) diff --git a/Projects/Server/Network/Packets/OutgoingAccountPackets.cs b/Projects/Server/Network/Packets/OutgoingAccountPackets.cs index b33b255ad..f49793649 100644 --- a/Projects/Server/Network/Packets/OutgoingAccountPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingAccountPackets.cs @@ -237,7 +237,7 @@ namespace Server.Network */ public static void SendCharacterListUpdate(this NetState ns, IAccount a) { - if (ns == null || a == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null || a == null) { return; } diff --git a/Projects/Server/Network/Packets/OutgoingContainerPackets.cs b/Projects/Server/Network/Packets/OutgoingContainerPackets.cs index 9663af367..69d6ffb01 100644 --- a/Projects/Server/Network/Packets/OutgoingContainerPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingContainerPackets.cs @@ -160,7 +160,7 @@ namespace Server.Network public static void SendContainerContent(this NetState ns, Mobile beholder, Item beheld) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } diff --git a/Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs b/Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs index 1df50738a..3e613466f 100644 --- a/Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs @@ -85,7 +85,7 @@ namespace Server.Network public static void SendEquipUpdate(this NetState ns, Item item) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } diff --git a/Projects/Server/Network/Packets/OutgoingMessagePackets.cs b/Projects/Server/Network/Packets/OutgoingMessagePackets.cs index 056693023..899fe02cc 100644 --- a/Projects/Server/Network/Packets/OutgoingMessagePackets.cs +++ b/Projects/Server/Network/Packets/OutgoingMessagePackets.cs @@ -77,7 +77,6 @@ namespace Server.Network writer.WriteLittleUniNull(args); writer.WritePacketLength(); - return writer.Position; } @@ -133,7 +132,6 @@ namespace Server.Network writer.WriteBigUniNull(args); writer.WritePacketLength(); - return writer.Position; } @@ -211,7 +209,6 @@ namespace Server.Network } writer.WritePacketLength(); - return writer.Position; } diff --git a/Projects/Server/Network/Packets/OutgoingMobilePackets.cs b/Projects/Server/Network/Packets/OutgoingMobilePackets.cs index 4fc594a77..4919eb93c 100644 --- a/Projects/Server/Network/Packets/OutgoingMobilePackets.cs +++ b/Projects/Server/Network/Packets/OutgoingMobilePackets.cs @@ -510,13 +510,12 @@ namespace Server.Network } writer.WritePacketLength(); - return writer.Position; } public static void SendMobileUpdate(this NetState ns, Mobile m) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } @@ -539,7 +538,7 @@ namespace Server.Network public static void SendMobileIncoming(this NetState ns, Mobile beholder, Mobile beheld) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } diff --git a/Projects/Server/Network/Packets/OutgoingPlayerPackets.cs b/Projects/Server/Network/Packets/OutgoingPlayerPackets.cs index cde6ccd5a..56e25e555 100644 --- a/Projects/Server/Network/Packets/OutgoingPlayerPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingPlayerPackets.cs @@ -66,24 +66,24 @@ namespace Server.Network public static void SendToggleSpecialAbility(this NetState ns, int abilityId, bool active) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[8]); writer.Write((byte)0xBF); // Packet ID writer.Write((ushort)8); writer.Write((short)0x25); writer.Write((short)abilityId); writer.Write(active); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendDisplayProfile(this NetState ns, Serial m, string header, string body, string footer) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } @@ -92,16 +92,16 @@ namespace Server.Network body ??= ""; footer ??= ""; - var writer = new CircularBufferWriter(buffer); + var length = 12 + header.Length + footer.Length * 2 + body.Length * 2; + var writer = new SpanWriter(stackalloc byte[length]); writer.Write((byte)0xB8); // Packet ID - writer.Seek(2, SeekOrigin.Current); + writer.Write((ushort)length); writer.Write(m); writer.WriteAsciiNull(header); writer.WriteBigUniNull(footer); writer.WriteBigUniNull(body); - writer.WritePacketLength(); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/Projects/Server/Network/Packets/OutgoingSecureTradePackets.cs b/Projects/Server/Network/Packets/OutgoingSecureTradePackets.cs index ea7f05c33..424df5d14 100644 --- a/Projects/Server/Network/Packets/OutgoingSecureTradePackets.cs +++ b/Projects/Server/Network/Packets/OutgoingSecureTradePackets.cs @@ -33,12 +33,12 @@ namespace Server.Network this NetState ns, Mobile them, Container first, Container second, string name ) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[47]); writer.Write((byte)0x6F); // Packet ID writer.Write((ushort)47); // Length writer.Write((byte)TradeFlag.Display); @@ -49,23 +49,23 @@ namespace Server.Network writer.WriteAscii(name ?? "", 30); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendCloseSecureTrade(this NetState ns, Container cont) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[8]); writer.Write((byte)0x6F); // Packet ID writer.Write((ushort)8); // Length writer.Write((byte)TradeFlag.Close); writer.Write(cont.Serial); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendUpdateSecureTrade(this NetState ns, Container cont, bool first, bool second) => @@ -73,12 +73,12 @@ namespace Server.Network public static void SendUpdateSecureTrade(this NetState ns, Container cont, TradeFlag flag, int first, int second) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[16]); writer.Write((byte)0x6F); // Packet ID writer.Write((ushort)16); // Length writer.Write((byte)flag); @@ -86,17 +86,17 @@ namespace Server.Network writer.Write(first); writer.Write(second); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendSecureTradeEquip(this NetState ns, Item item, Mobile m) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[ns.ContainerGridLines ? 21 : 20]); writer.Write((byte)0x25); // Packet ID writer.Write(item.Serial); writer.Write((short)item.ItemID); @@ -111,7 +111,7 @@ namespace Server.Network writer.Write(m.Serial); writer.Write((short)item.Hue); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } } } diff --git a/Projects/Server/Network/Packets/OutgoingTargetPackets.cs b/Projects/Server/Network/Packets/OutgoingTargetPackets.cs index dac4fa87a..f44f0c2fd 100644 --- a/Projects/Server/Network/Packets/OutgoingTargetPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingTargetPackets.cs @@ -23,12 +23,12 @@ namespace Server.Network { public static void SendMultiTargetReq(this NetState ns, MultiTarget t) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[ns.HighSeas ? 30 : 26]); writer.Write((byte)0x99); // Packet ID writer.Write(t.AllowGround); writer.Write(t.TargetID); @@ -43,45 +43,30 @@ namespace Server.Network writer.Write(0); } - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } - public static void SendCancelTarget(this NetState ns) + public static void SendCancelTarget(this NetState ns) => + ns?.Send(stackalloc byte[] + { + 0x6C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 + }); + + public static void SendTargetReq(this NetState ns, Target t) { 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); + var writer = new SpanWriter(stackalloc byte[19]); 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); + ns.Send(writer.Span); } } } diff --git a/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs b/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs index b46552f1a..39c413156 100644 --- a/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs @@ -24,15 +24,15 @@ namespace Server.Network { public static void SendVendorBuyContent(this NetState ns, List list) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var length = 5 + list.Count * (ns.ContainerGridLines ? 20 : 19); + var writer = new SpanWriter(stackalloc byte[length]); writer.Write((byte)0x3C); // Packet ID - writer.Seek(2, SeekOrigin.Current); - + writer.Write((ushort)length); writer.Write((short)list.Count); for (var i = list.Count - 1; i >= 0; --i) @@ -53,18 +53,17 @@ namespace Server.Network writer.Write((ushort)bis.Hue); } - writer.WritePacketLength(); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendDisplayBuyList(this NetState ns, Serial vendor) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[ns.HighSeas ? 9 : 7]); writer.Write((byte)0x24); // Packet ID writer.Write(vendor); writer.Write((short)0x30); // Vendor Buy Window @@ -73,19 +72,25 @@ namespace Server.Network writer.Write((short)0x0); } - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendVendorBuyList(this NetState ns, Mobile vendor, List list) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var length = 8; + for (int i = 0; i < list.Count; i++) + { + length += 5 + list[i].Description?.Length ?? 0; + } + + var writer = new SpanWriter(stackalloc byte[length]); writer.Write((byte)0x74); // Packet ID - writer.Seek(2, SeekOrigin.Current); + writer.Write((ushort)length); writer.Write((vendor.FindItemOnLayer(Layer.ShopBuy) as Container)?.Serial ?? Serial.MinusOne); writer.Write((byte)list.Count); @@ -101,25 +106,23 @@ namespace Server.Network writer.WriteAscii(desc); // Doesn't look like it is used anymore } - writer.WritePacketLength(); - - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendEndVendorBuy(this NetState ns, Serial vendor) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[8]); writer.Write((byte)0x3B); // Packet ID writer.Write((ushort)8); writer.Write(vendor); writer.Write((byte)0); // Buy count - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } } } diff --git a/Projects/Server/Network/Packets/OutgoingVendorSellPackets.cs b/Projects/Server/Network/Packets/OutgoingVendorSellPackets.cs index 7897b42a0..5393a4802 100644 --- a/Projects/Server/Network/Packets/OutgoingVendorSellPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingVendorSellPackets.cs @@ -13,6 +13,7 @@ * along with this program. If not, see . * *************************************************************************/ +using System; using System.Buffers; using System.Collections.Generic; using System.IO; @@ -23,12 +24,20 @@ namespace Server.Network { public static void SendVendorSellList(this NetState ns, Serial vendor, List list) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var maxLength = 9; + for (int i = 0; i < list.Count; i++) + { + var sis = list[i]; + var item = sis.Item; + maxLength += 14 + Math.Max(item.Name?.Length ?? 0, sis.Name?.Length ?? 0); + } + + var writer = new SpanWriter(stackalloc byte[maxLength]); writer.Write((byte)0x9E); // Packet ID writer.Seek(2, SeekOrigin.Current); @@ -52,23 +61,23 @@ namespace Server.Network } writer.WritePacketLength(); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } public static void SendEndVendorSell(this NetState ns, Serial vendor) { - if (ns == null || !ns.GetSendBuffer(out var buffer)) + if (ns == null) { return; } - var writer = new CircularBufferWriter(buffer); + var writer = new SpanWriter(stackalloc byte[8]); writer.Write((byte)0x3B); // Packet ID writer.Write((ushort)8); writer.Write(vendor); writer.Write((byte)0); - ns.Send(ref buffer, writer.Position); + ns.Send(writer.Span); } } }