modernuo/Projects/UOContent/Network/BuffIconPackets.cs

71 lines
2 KiB
C#

using System.Buffers;
namespace Server.Network;
public static class BuffIconPackets
{
public static void SendAddBuffPacket(
this NetState ns, Serial mob, BuffIcon iconID, int titleCliloc, int secondaryCliloc, TextDefinition args, long ticks
)
{
if (ns.CannotSendPackets())
{
return;
}
var hasArgs = args != null;
var length = hasArgs ? args.ToString()!.Length * 2 + 52 : 46;
var writer = new SpanWriter(stackalloc byte[length]);
writer.Write((byte)0xDF); // Packet ID
writer.Write((ushort)length);
writer.Write(mob);
writer.Write((short)iconID);
writer.Write((short)0x1); // command (0 = remove, 1 = add, 2 = data)
writer.Write(0);
writer.Write((short)iconID);
writer.Write((short)0x1); // command (0 = remove, 1 = add, 2 = data)
writer.Write(0);
// Truncate to whole seconds - The packet should be delayed by the partial seconds and then sent "on the second"
writer.Write((short)(ticks / 1000));
writer.Clear(3);
writer.Write(titleCliloc);
writer.Write(secondaryCliloc);
if (hasArgs)
{
writer.Write(0);
writer.Write((short)0x1);
writer.Write((ushort)0);
writer.WriteLE('\t');
writer.WriteLittleUniNull(args);
writer.Write((short)0x1);
writer.Write((ushort)0);
}
else
{
writer.Clear(10);
}
ns.Send(writer.Span);
}
public static void SendRemoveBuffPacket(this NetState ns, Serial mob, BuffIcon iconID)
{
if (ns.CannotSendPackets())
{
return;
}
var writer = new SpanWriter(stackalloc byte[15]);
writer.Write((byte)0xDF); // Packet ID
writer.Write((ushort)15);
writer.Write(mob);
writer.Write((short)iconID);
writer.Write((short)0x0); // command (0 = remove, 1 = add, 2 = data)
writer.Write(0);
ns.Send(writer.Span);
}
}