_chatManager.ChatMessageToAll(ChatChannel.Radio, message, wrappedMessage, default, false, true, colorOverride);
if (playSound)
{
- _audio.PlayGlobal(announcementSound?.GetSound() ?? DefaultAnnouncementSound, Filter.Broadcast(), true, AudioParams.Default.WithVolume(-2f));
+ _audio.PlayGlobal(announcementSound == null ? DefaultAnnouncementSound : _audio.GetSound(announcementSound), Filter.Broadcast(), true, AudioParams.Default.WithVolume(-2f));
}
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Global station announcement from {sender}: {message}");
}
+ /// <summary>
+ /// Dispatches an announcement to players selected by filter.
+ /// </summary>
+ /// <param name="filter">Filter to select players who will recieve the announcement</param>
+ /// <param name="message">The contents of the message</param>
+ /// <param name="source">The entity making the announcement (used to determine the station)</param>
+ /// <param name="sender">The sender (Communications Console in Communications Console Announcement)</param>
+ /// <param name="playDefaultSound">Play the announcement sound</param>
+ /// <param name="announcementSound">Sound to play</param>
+ /// <param name="colorOverride">Optional color for the announcement message</param>
+ public void DispatchFilteredAnnouncement(
+ Filter filter,
+ string message,
+ EntityUid? source = null,
+ string? sender = null,
+ bool playSound = true,
+ SoundSpecifier? announcementSound = null,
+ Color? colorOverride = null)
+ {
+ sender ??= Loc.GetString("chat-manager-sender-announcement");
+
+ var wrappedMessage = Loc.GetString("chat-manager-sender-announcement-wrap-message", ("sender", sender), ("message", FormattedMessage.EscapeText(message)));
+ _chatManager.ChatMessageToManyFiltered(filter, ChatChannel.Radio, message, wrappedMessage, source ?? default, false, true, colorOverride);
+ if (playSound)
+ {
+ _audio.PlayGlobal(announcementSound?.ToString() ?? DefaultAnnouncementSound, filter, true, AudioParams.Default.WithVolume(-2f));
+ }
+ _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Station Announcement from {sender}: {message}");
+ }
+
/// <summary>
/// Dispatches an announcement on a specific station
/// </summary>
if (playDefaultSound)
{
- _audio.PlayGlobal(announcementSound?.GetSound() ?? DefaultAnnouncementSound, filter, true, AudioParams.Default.WithVolume(-2f));
+ _audio.PlayGlobal(announcementSound?.ToString() ?? DefaultAnnouncementSound, filter, true, AudioParams.Default.WithVolume(-2f));
}
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Station Announcement on {station} from {sender}: {message}");
using Content.Server.Administration.Logs;
using Content.Server.Chat.Systems;
+using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.Station.Systems;
using Content.Server.StationEvents.Components;
[Dependency] protected readonly ChatSystem ChatSystem = default!;
[Dependency] protected readonly SharedAudioSystem Audio = default!;
[Dependency] protected readonly StationSystem StationSystem = default!;
+ [Dependency] protected readonly GameTicker GameTicker = default!;
protected ISawmill Sawmill = default!;
AdminLogManager.Add(LogType.EventAnnounced, $"Event added / announced: {ToPrettyString(uid)}");
+ // we don't want to send to players who aren't in game (i.e. in the lobby)
+ Filter allPlayersInGame = Filter.Empty().AddWhere(GameTicker.UserHasJoinedGame);
+
if (stationEvent.StartAnnouncement != null)
- ChatSystem.DispatchGlobalAnnouncement(Loc.GetString(stationEvent.StartAnnouncement), playSound: false, colorOverride: stationEvent.StartAnnouncementColor);
+ ChatSystem.DispatchFilteredAnnouncement(allPlayersInGame, Loc.GetString(stationEvent.StartAnnouncement), playSound: false, colorOverride: stationEvent.StartAnnouncementColor);
- Audio.PlayGlobal(stationEvent.StartAudio, Filter.Broadcast(), true);
+ Audio.PlayGlobal(stationEvent.StartAudio, allPlayersInGame, true);
}
/// <inheritdoc/>
AdminLogManager.Add(LogType.EventStopped, $"Event ended: {ToPrettyString(uid)}");
+ // we don't want to send to players who aren't in game (i.e. in the lobby)
+ Filter allPlayersInGame = Filter.Empty().AddWhere(GameTicker.UserHasJoinedGame);
+
if (stationEvent.EndAnnouncement != null)
- ChatSystem.DispatchGlobalAnnouncement(Loc.GetString(stationEvent.EndAnnouncement), playSound: false, colorOverride: stationEvent.EndAnnouncementColor);
+ ChatSystem.DispatchFilteredAnnouncement(allPlayersInGame, Loc.GetString(stationEvent.EndAnnouncement), playSound: false, colorOverride: stationEvent.EndAnnouncementColor);
- Audio.PlayGlobal(stationEvent.EndAudio, Filter.Broadcast(), true);
+ Audio.PlayGlobal(stationEvent.EndAudio, allPlayersInGame, true);
}
/// <summary>