diff --git a/Content.Server/AlertLevel/AlertLevelSystem.cs b/Content.Server/AlertLevel/AlertLevelSystem.cs index 291062c2a7..955966ed7e 100644 --- a/Content.Server/AlertLevel/AlertLevelSystem.cs +++ b/Content.Server/AlertLevel/AlertLevelSystem.cs @@ -182,7 +182,6 @@ public sealed class AlertLevelSystem : EntitySystem if (announce) { - _chatSystem.DispatchStationAnnouncement(station, announcementFull, playDefaultSound: playDefault, colorOverride: detail.Color, sender: stationName); } diff --git a/Content.Server/Chat/ChatSystem.cs b/Content.Server/Chat/ChatSystem.cs index 26d4bf9079..5b5958a532 100644 --- a/Content.Server/Chat/ChatSystem.cs +++ b/Content.Server/Chat/ChatSystem.cs @@ -158,7 +158,7 @@ public sealed class ChatSystem : SharedChatSystem bool playDefaultSound = true, Color? colorOverride = null) { var messageWrap = Loc.GetString("chat-manager-sender-announcement-wrap-message", ("sender", sender)); - _chatManager.ChatMessageToAll(ChatChannel.Radio, message, messageWrap); + _chatManager.ChatMessageToAll(ChatChannel.Radio, message, messageWrap, colorOverride); if (playDefaultSound) { SoundSystem.Play(Filter.Broadcast(), AnnouncementSound, AudioParams.Default.WithVolume(-2f)); @@ -180,21 +180,20 @@ public sealed class ChatSystem : SharedChatSystem var station = _stationSystem.GetOwningStation(source); var filter = Filter.Empty(); - if (station != null) + if (station == null) { - if (!EntityManager.TryGetComponent(station, out var stationDataComp)) return; - - foreach (var gridEnt in stationDataComp.Grids) - { - filter.AddInGrid(gridEnt); - } - } - else - { - filter = Filter.Pvs(source, entityManager: EntityManager); + // you can't make a station announcement without a station + return; } - _chatManager.ChatMessageToManyFiltered(filter, ChatChannel.Radio, message, messageWrap, source, true, colorOverride); + if (!EntityManager.TryGetComponent(station, out var stationDataComp)) return; + + foreach (var gridEnt in stationDataComp.Grids) + { + filter.AddInGrid(gridEnt); + } + + _chatManager.ChatMessageToManyFiltered(filter, ChatChannel.Radio, message, messageWrap, source, false, colorOverride); if (playDefaultSound) { diff --git a/Content.Server/Chat/Managers/ChatManager.cs b/Content.Server/Chat/Managers/ChatManager.cs index 4ee5365837..237d97520c 100644 --- a/Content.Server/Chat/Managers/ChatManager.cs +++ b/Content.Server/Chat/Managers/ChatManager.cs @@ -218,7 +218,7 @@ namespace Content.Server.Chat.Managers _netManager.ServerSendMessage(msg, client); } - public void ChatMessageToMany(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, List clients) + public void ChatMessageToMany(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, List clients, Color? colorOverride = null) { var msg = new MsgChatMessage(); msg.Channel = channel; @@ -226,6 +226,10 @@ namespace Content.Server.Chat.Managers msg.MessageWrap = messageWrap; msg.SenderEntity = source; msg.HideChat = hideChat; + if (colorOverride != null) + { + msg.MessageColorOverride = colorOverride.Value; + } _netManager.ServerSendToMany(msg, clients); } @@ -240,7 +244,7 @@ namespace Content.Server.Chat.Managers clients.Add(recipient.ConnectedClient); } - ChatMessageToMany(channel, message, messageWrap, source, hideChat, clients); + ChatMessageToMany(channel, message, messageWrap, source, hideChat, clients, colorOverride); } public void ChatMessageToAll(ChatChannel channel, string message, string messageWrap, Color? colorOverride = null) diff --git a/Content.Server/Chat/Managers/IChatManager.cs b/Content.Server/Chat/Managers/IChatManager.cs index 1115a429f2..c3e7c8bd81 100644 --- a/Content.Server/Chat/Managers/IChatManager.cs +++ b/Content.Server/Chat/Managers/IChatManager.cs @@ -26,7 +26,7 @@ namespace Content.Server.Chat.Managers void ChatMessageToOne(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, INetChannel client); void ChatMessageToMany(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, - List clients); + List clients, Color? colorOverride = null); void ChatMessageToManyFiltered(Filter filter, ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, Color? colorOverride); void ChatMessageToAll(ChatChannel channel, string message, string messageWrap, Color? colorOverride = null); diff --git a/Content.Server/Communications/CommunicationsConsoleComponent.cs b/Content.Server/Communications/CommunicationsConsoleComponent.cs index 020736f4ce..5f8556c48e 100644 --- a/Content.Server/Communications/CommunicationsConsoleComponent.cs +++ b/Content.Server/Communications/CommunicationsConsoleComponent.cs @@ -10,13 +10,12 @@ namespace Content.Server.Communications /// /// Remaining cooldown between making announcements. /// - [ViewVariables] + [ViewVariables(VVAccess.ReadWrite)] public float AnnouncementCooldownRemaining; /// /// Has the UI already been refreshed after the announcement /// - [ViewVariables] public bool AlreadyRefreshed = false; /// diff --git a/Content.Server/Communications/CommunicationsConsoleSystem.cs b/Content.Server/Communications/CommunicationsConsoleSystem.cs index 31b0fee2c6..e43c6ebd39 100644 --- a/Content.Server/Communications/CommunicationsConsoleSystem.cs +++ b/Content.Server/Communications/CommunicationsConsoleSystem.cs @@ -2,7 +2,6 @@ using System.Globalization; using Content.Server.Access.Systems; using Content.Server.AlertLevel; using Content.Server.Chat; -using Content.Server.Chat.Managers; using Content.Server.Popups; using Content.Server.RoundEnd; using Content.Server.Station.Systems; @@ -199,11 +198,9 @@ namespace Content.Server.Communications if (comp.AnnounceGlobal) { _chatSystem.DispatchGlobalStationAnnouncement(msg, title, colorOverride: comp.AnnouncementColor); + return; } - else - { - _chatSystem.DispatchStationAnnouncement(uid, msg, title, colorOverride: comp.AnnouncementColor); - } + _chatSystem.DispatchStationAnnouncement(uid, msg, title, colorOverride: comp.AnnouncementColor); } private void OnCallShuttleMessage(EntityUid uid, CommunicationsConsoleComponent comp, CommunicationsConsoleCallEmergencyShuttleMessage message) diff --git a/Content.Server/Station/Systems/StationSystem.cs b/Content.Server/Station/Systems/StationSystem.cs index e76571a35a..7635e6a27b 100644 --- a/Content.Server/Station/Systems/StationSystem.cs +++ b/Content.Server/Station/Systems/StationSystem.cs @@ -305,6 +305,12 @@ public sealed class StationSystem : EntitySystem if (!Resolve(entity, ref xform)) throw new ArgumentException("Tried to use an abstract entity!", nameof(entity)); + if (TryComp(entity, out _)) + { + // We are the station, just return ourselves. + return entity; + } + if (TryComp(entity, out _)) { // We are the station, just check ourselves. diff --git a/Content.Server/StationEvents/Events/DiseaseOutbreak.cs b/Content.Server/StationEvents/Events/DiseaseOutbreak.cs index ca6cc35b79..e78cd0a1c4 100644 --- a/Content.Server/StationEvents/Events/DiseaseOutbreak.cs +++ b/Content.Server/StationEvents/Events/DiseaseOutbreak.cs @@ -63,8 +63,9 @@ public sealed class DiseaseOutbreak : StationEvent return; var diseaseSystem = EntitySystem.Get(); - var stationSystem = IoCManager.Resolve().GetEntitySystem(); - var chatSystem = IoCManager.Resolve().GetEntitySystem(); + var entSysMgr = IoCManager.Resolve(); + var stationSystem = entSysMgr.GetEntitySystem(); + var chatSystem = entSysMgr.GetEntitySystem(); // Now we give it to people in the list of living disease carriers earlier foreach (var target in aliveList) { diff --git a/Content.Server/StationEvents/Events/RandomSentience.cs b/Content.Server/StationEvents/Events/RandomSentience.cs index 4d65a4df49..d9580d2979 100644 --- a/Content.Server/StationEvents/Events/RandomSentience.cs +++ b/Content.Server/StationEvents/Events/RandomSentience.cs @@ -51,8 +51,9 @@ public sealed class RandomSentience : StationEvent var kind2 = groupList.Count > 1 ? groupList[1] : "???"; var kind3 = groupList.Count > 2 ? groupList[2] : "???"; - var stationSystem = IoCManager.Resolve().GetEntitySystem(); - var chatSystem = IoCManager.Resolve().GetEntitySystem(); + var entSysMgr = IoCManager.Resolve(); + var stationSystem = entSysMgr.GetEntitySystem(); + var chatSystem = entSysMgr.GetEntitySystem(); foreach (var target in targetList) { var station = stationSystem.GetOwningStation(target.Owner); diff --git a/Content.Server/StationEvents/Events/ZombieOutbreak.cs b/Content.Server/StationEvents/Events/ZombieOutbreak.cs index e69af45baf..4eb4b43f53 100644 --- a/Content.Server/StationEvents/Events/ZombieOutbreak.cs +++ b/Content.Server/StationEvents/Events/ZombieOutbreak.cs @@ -43,8 +43,9 @@ namespace Content.Server.StationEvents.Events var toInfect = _random.Next(1, 3); // Now we give it to people in the list of dead entities earlier. - var stationSystem = IoCManager.Resolve().GetEntitySystem(); - var chatSystem = IoCManager.Resolve().GetEntitySystem(); + var entSysMgr = IoCManager.Resolve(); + var stationSystem = entSysMgr.GetEntitySystem(); + var chatSystem = entSysMgr.GetEntitySystem(); foreach (var target in deadList) { if (toInfect-- == 0)