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; public Dictionary PlayerInfos = new(); public IReadOnlyList PlayerList => PlayerInfos != null ? PlayerInfos.Values.ToList() : 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 (PlayerInfos == null) PlayerInfos = new(); PlayerInfos[ev.PlayerInfo.SessionId] = ev.PlayerInfo; PlayerListChanged?.Invoke(PlayerInfos.Values.ToList()); } private void OnPlayerListChanged(FullPlayerListEvent msg) { PlayerInfos = msg.PlayersInfo.ToDictionary(x => x.SessionId, x => x); PlayerListChanged?.Invoke(msg.PlayersInfo); } } }