using System.Linq; using Content.Shared.Administration; using Content.Shared.Administration.Events; using Content.Shared.GameTicking; using Robust.Shared.Network; namespace Content.Client.Administration.Systems { public sealed partial class AdminSystem : EntitySystem { public event Action>? PlayerListChanged; private Dictionary? _playerList; public IReadOnlyList PlayerList { get { if (_playerList != null) return _playerList.Values.ToList(); return new List(); } } public override void Initialize() { base.Initialize(); InitializeOverlay(); SubscribeNetworkEvent(OnPlayerListChanged); SubscribeNetworkEvent(OnPlayerInfoChanged); } public override void Shutdown() { base.Shutdown(); ShutdownOverlay(); } private void OnPlayerInfoChanged(PlayerInfoChangedEvent ev) { if(ev.PlayerInfo == null) return; if (_playerList == null) _playerList = new(); _playerList[ev.PlayerInfo.SessionId] = ev.PlayerInfo; PlayerListChanged?.Invoke(_playerList.Values.ToList()); } private void OnPlayerListChanged(FullPlayerListEvent msg) { _playerList = msg.PlayersInfo.ToDictionary(x => x.SessionId, x => x); PlayerListChanged?.Invoke(msg.PlayersInfo); } } }