diff --git a/Content.Client/ClientNotifyManager.cs b/Content.Client/ClientNotifyManager.cs index 7ffa7aa2f8..2d59f0e380 100644 --- a/Content.Client/ClientNotifyManager.cs +++ b/Content.Client/ClientNotifyManager.cs @@ -43,7 +43,14 @@ namespace Content.Client private void DoNotifyMessage(MsgDoNotify message) { - PopupMessage(_eyeManager.WorldToScreen(message.Coordinates), message.Message); + if (message.AtCursor) + { + PopupMessage(message.Message); + } + else + { + PopupMessage(_eyeManager.WorldToScreen(message.Coordinates), message.Message); + } } public override void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message) @@ -56,6 +63,16 @@ namespace Content.Client PopupMessage(_eyeManager.WorldToScreen(coordinates), message); } + public override void PopupMessageCursor(IEntity viewer, string message) + { + if (viewer != _playerManager.LocalPlayer.ControlledEntity) + { + return; + } + + PopupMessage(message); + } + public void PopupMessage(ScreenCoordinates coordinates, string message) { var label = new PopupLabel diff --git a/Content.Server/ServerNotifyManager.cs b/Content.Server/ServerNotifyManager.cs index 66eea0f0fa..2e2e11f125 100644 --- a/Content.Server/ServerNotifyManager.cs +++ b/Content.Server/ServerNotifyManager.cs @@ -42,6 +42,19 @@ namespace Content.Server _netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient); } + public override void PopupMessageCursor(IEntity viewer, string message) + { + if (!viewer.TryGetComponent(out IActorComponent actor)) + { + return; + } + + var netMessage = _netManager.CreateNetMessage(); + netMessage.Message = message; + netMessage.AtCursor = true; + _netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient); + } + public class PopupMsgCommand : IClientCommand { public string Command => "srvpopupmsg"; diff --git a/Content.Shared/Interfaces/ISharedNotifyManager.cs b/Content.Shared/Interfaces/ISharedNotifyManager.cs index b91c646741..24ed109a2b 100644 --- a/Content.Shared/Interfaces/ISharedNotifyManager.cs +++ b/Content.Shared/Interfaces/ISharedNotifyManager.cs @@ -8,6 +8,7 @@ namespace Content.Shared.Interfaces { void PopupMessage(IEntity source, IEntity viewer, string message); void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message); + void PopupMessageCursor(IEntity viewer, string message); } public static class NotifyManagerExt diff --git a/Content.Shared/SharedNotifyManager.cs b/Content.Shared/SharedNotifyManager.cs index 5e4a98786f..3899a91170 100644 --- a/Content.Shared/SharedNotifyManager.cs +++ b/Content.Shared/SharedNotifyManager.cs @@ -17,6 +17,7 @@ namespace Content.Shared } public abstract void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message); + public abstract void PopupMessageCursor(IEntity viewer, string message); protected class MsgDoNotify : NetMessage { @@ -29,18 +30,28 @@ namespace Content.Shared #endregion public string Message { get; set; } - public GridCoordinates Coordinates; + public bool AtCursor { get; set; } + public GridCoordinates Coordinates { get; set; } public override void ReadFromBuffer(NetIncomingMessage buffer) { Message = buffer.ReadString(); - Coordinates = buffer.ReadGridLocalCoordinates(); + AtCursor = buffer.ReadBoolean(); + if (!AtCursor) + { + Coordinates = buffer.ReadGridLocalCoordinates(); + } } public override void WriteToBuffer(NetOutgoingMessage buffer) { buffer.Write(Message); - buffer.Write(Coordinates); + buffer.Write(AtCursor); + + if (!AtCursor) + { + buffer.Write(Coordinates); + } } } }