mirror of
https://github.com/modernuo/ModernUO
synced 2026-08-11 22:23:06 -04:00
71 lines
2 KiB
C#
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);
|
|
}
|
|
}
|