fix(core): Converts MobileUpdate packet (#369)

- [X] Converts mobile update packet
This commit is contained in:
Kamron Batman 2020-12-28 01:50:17 -08:00 committed by GitHub
parent 3d98e6e193
commit 9d4161b3e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 72 additions and 106 deletions

View file

@ -316,12 +316,12 @@ namespace Server.Network
state.Sequence = 0;
state.Send(new MobileUpdate(m, state.StygianAbyss));
state.Send(new MobileUpdate(m, state.StygianAbyss));
state.SendMobileUpdate(m);
state.SendMobileUpdate(m);
m.CheckLightLevels(true);
state.Send(new MobileUpdate(m, state.StygianAbyss));
state.SendMobileUpdate(m);
state.Send(new MobileIncoming(state, m, m));
@ -331,7 +331,7 @@ namespace Server.Network
m.SendEverything();
state.SendSupportedFeature();
state.Send(new MobileUpdate(m, state.StygianAbyss));
state.SendMobileUpdate(m);
state.SendMobileStatus(m);
state.SendSetWarMode(m.Warmode);

View file

@ -473,8 +473,7 @@ namespace Server.Network
return;
}
state.Send(new MobileUpdate(from, state.StygianAbyss));
state.SendMobileUpdate(from);
state.Send(new MobileIncoming(state, from, from));
from.SendEverything();

View file

@ -17,30 +17,6 @@ using System.Threading;
namespace Server.Network
{
public sealed class MobileUpdate : Packet
{
public MobileUpdate(Mobile m, bool stygianAbyss) : base(0x20, 19)
{
var hue = m.Hue;
if (m.SolidHueOverride >= 0)
{
hue = m.SolidHueOverride;
}
Stream.Write(m.Serial);
Stream.Write((short)m.Body);
Stream.Write((byte)0);
Stream.Write((short)hue);
Stream.Write((byte)m.GetPacketFlags(stygianAbyss));
Stream.Write((short)m.X);
Stream.Write((short)m.Y);
Stream.Write((short)0);
Stream.Write((byte)m.Direction);
Stream.Write((sbyte)m.Z);
}
}
public sealed class MobileIncoming : Packet
{
private static readonly ThreadLocal<int[]> m_DupedLayersTL = new(() => new int[256]);

View file

@ -513,5 +513,28 @@ namespace Server.Network
return writer.Position;
}
public static void SendMobileUpdate(this NetState ns, Mobile m)
{
if (ns == null || !ns.GetSendBuffer(out var buffer))
{
return;
}
var writer = new CircularBufferWriter(buffer);
writer.Write((byte)0x20); // Packet ID
writer.Write(m.Serial);
writer.Write((short)m.Body);
writer.Write((byte)0);
writer.Write((short)(m.SolidHueOverride >= 0 ? m.SolidHueOverride : m.Hue));
writer.Write((byte)m.GetPacketFlags(ns.StygianAbyss));
writer.Write((short)m.X);
writer.Write((short)m.Y);
writer.Write((short)0);
writer.Write((byte)m.Direction);
writer.Write((sbyte)m.Z);
ns.Send(ref buffer, writer.Position);
}
}
}