using Content.Server.GameTicking.Events;
using Content.Shared.Audio;
using Content.Shared.Audio.Events;
+using Content.Shared.CCVar;
using Content.Shared.GameTicking;
using Robust.Server.Audio;
using Robust.Shared.Audio;
+using Robust.Shared.Configuration;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
+
namespace Content.Server.Audio;
public sealed class ContentAudioSystem : SharedContentAudioSystem
{
- [ValidatePrototypeId<SoundCollectionPrototype>]
- private const string LobbyMusicCollection = "LobbyMusic";
-
[Dependency] private readonly AudioSystem _serverAudio = default!;
[Dependency] private readonly IRobustRandom _robustRandom = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
- private SoundCollectionPrototype _lobbyMusicCollection = default!;
+ private SoundCollectionPrototype? _lobbyMusicCollection = default!;
private string[]? _lobbyPlaylist;
public override void Initialize()
{
base.Initialize();
- _lobbyMusicCollection = _prototypeManager.Index<SoundCollectionPrototype>(LobbyMusicCollection);
- _lobbyPlaylist = ShuffleLobbyPlaylist();
+ //changes the music collection and reshuffles the playlist to update the lobby music
+ Subs.CVar(
+ _cfg,
+ CCVars.LobbyMusicCollection,
+ x =>
+ {
+ //Checks to see if the sound collection exists. If it does change it if not defaults to null
+ // as the new _lobbyMusicCollection meaning it wont play anything in the lobby.
+ if(_prototypeManager.TryIndex<SoundCollectionPrototype>(x, out var outputSoundCollection))
+ {
+ _lobbyMusicCollection = outputSoundCollection;
+ }
+ else
+ {
+ Log.Error($"Invalid Lobby Music sound collection specified: {x}");
+ _lobbyMusicCollection = null;
+ }
+
+ _lobbyPlaylist = ShuffleLobbyPlaylist();
+ },
+ true);
SubscribeLocalEvent<RoundEndMessageEvent>(OnRoundEnd);
SubscribeLocalEvent<PlayerJoinedLobbyEvent>(OnPlayerJoinedLobby);
private string[] ShuffleLobbyPlaylist()
{
+ if (_lobbyMusicCollection == null)
+ {
+ return [];
+ }
+
var playlist = _lobbyMusicCollection.PickFiles
.Select(x => x.ToString())
.ToArray();
- _robustRandom.Shuffle(playlist);
+ _robustRandom.Shuffle(playlist);
- return playlist;
+ return playlist;
}
}
-using Robust.Shared.Configuration;
+using Content.Shared.Administration;
+using Content.Shared.CCVar.CVarAccess;
+using Robust.Shared.Configuration;
namespace Content.Shared.CCVar;
public static readonly CVarDef<float> InterfaceVolume =
CVarDef.Create("audio.interface_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY);
+ /// <summary>
+ /// Lobby music collection string
+ /// </summary>
+ [CVarControl(AdminFlags.VarEdit)]
+ public static readonly CVarDef<string> LobbyMusicCollection =
+ CVarDef.Create("audio.lobby_music_collection", "LobbyMusic", CVar.REPLICATED | CVar.SERVER);
}