using JetBrains.Annotations; using Lidgren.Network; using Robust.Shared.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Network; namespace Content.Shared.Chat { /// /// Sent from server to client to notify the client about a new chat message. /// [UsedImplicitly] public sealed class MsgChatMessage : NetMessage { public override MsgGroups MsgGroup => MsgGroups.Command; /// /// The channel the message is on. This can also change whether certain params are used. /// public ChatChannel Channel { get; set; } /// /// The actual message contents. /// public string Message { get; set; } = string.Empty; /// /// What to "wrap" the message contents with. Example is stuff like 'Joe says: "{0}"' /// public string MessageWrap { get; set; } = string.Empty; /// /// The sending entity. /// Only applies to , and . /// public EntityUid SenderEntity { get; set; } /// /// The override color of the message /// public Color MessageColorOverride { get; set; } = Color.Transparent; public override void ReadFromBuffer(NetIncomingMessage buffer) { Channel = (ChatChannel) buffer.ReadInt16(); Message = buffer.ReadString(); MessageWrap = buffer.ReadString(); switch (Channel) { case ChatChannel.Local: case ChatChannel.Dead: case ChatChannel.Admin: case ChatChannel.Emotes: SenderEntity = buffer.ReadEntityUid(); break; } MessageColorOverride = buffer.ReadColor(); } public override void WriteToBuffer(NetOutgoingMessage buffer) { buffer.Write((short)Channel); buffer.Write(Message); buffer.Write(MessageWrap); switch (Channel) { case ChatChannel.Local: case ChatChannel.Dead: case ChatChannel.Admin: case ChatChannel.Emotes: buffer.Write(SenderEntity); break; } buffer.Write(MessageColorOverride); } } }