public static void VisClear_OnCommand(CommandEventArgs e) { if (e.Mobile is PlayerMobile pm) { var list = new List <Mobile>(pm.VisibilityList); pm.VisibilityList.Clear(); pm.SendMessage("Your visibility list has been cleared."); if (list.Count > 0) { Span <byte> removeEntity = stackalloc byte[OutgoingEntityPackets.RemoveEntityLength].InitializePacket(); for (var i = 0; i < list.Count; ++i) { var m = list[i]; if (!m.CanSee(pm) && Utility.InUpdateRange(m, pm)) { OutgoingEntityPackets.CreateRemoveEntity(removeEntity, pm.Serial); m.NetState?.Send(removeEntity); } } } } }
public static void SendDisplayBoatHS(this NetState ns, Mobile beholder, BaseBoat boat) { if (ns?.HighSeas != true) { return; } var minLength = PacketContainerBuilder.MinPacketLength + OutgoingEntityPackets.MaxWorldEntityPacketLength * 5; // Minimum of boat, hold, planks, and the player using var builder = new PacketContainerBuilder(stackalloc byte[minLength]); Span <byte> buffer = builder.GetSpan(OutgoingEntityPackets.MaxWorldEntityPacketLength); foreach (var entity in boat.GetMovingEntities(true)) { if (!beholder.CanSee(entity)) { continue; } buffer.InitializePacket(); var bytesWritten = OutgoingEntityPackets.CreateWorldEntity(buffer, entity, true); builder.Advance(bytesWritten); } ns.Send(builder.Finalize()); }
private void SendGMItem(NetState ns) { // GM Packet var buffer = stackalloc byte[OutgoingEntityPackets.MaxWorldEntityPacketLength].InitializePacket(); int length; if (ns.StygianAbyss) { length = OutgoingEntityPackets.CreateWorldEntity(buffer, this, ns.HighSeas); BinaryPrimitives.WriteUInt16BigEndian(buffer[8..10], _gmItemId);
public static void SendWorldItem(this NetState ns, Item item) { if (ns.CannotSendPackets()) { return; } Span <byte> buffer = stackalloc byte[OutgoingEntityPackets.MaxWorldEntityPacketLength].InitializePacket(); var length = ns.StygianAbyss ? OutgoingEntityPackets.CreateWorldEntity(buffer, item, ns.HighSeas) : CreateWorldItem(buffer, item); ns.Send(buffer[..length]);