diff --git a/Content.Server/Administration/AdminSystem.cs b/Content.Server/Administration/AdminSystem.cs index 5070d2e29a..cfc11dbbf3 100644 --- a/Content.Server/Administration/AdminSystem.cs +++ b/Content.Server/Administration/AdminSystem.cs @@ -22,10 +22,17 @@ namespace Content.Server.Administration base.Initialize(); _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; + _adminManager.OnPermsChanged += OnAdminPermsChanged; SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); } + private void OnAdminPermsChanged(AdminPermsChangedEventArgs obj) + { + if(!obj.IsAdmin) return; + SendFullPlayerList(obj.Player); + } + private void OnPlayerDetached(PlayerDetachedEvent ev) { if(ev.Player.Status == SessionStatus.Disconnected) return; @@ -50,17 +57,14 @@ namespace Content.Server.Administration { base.Shutdown(); _playerManager.PlayerStatusChanged -= OnPlayerStatusChanged; + _adminManager.OnPermsChanged -= OnAdminPermsChanged; } private PlayerInfoChangedEvent GetChangedEvent(IPlayerSession session) { return new() { - PlayerInfo = new PlayerInfo( - session.Name, session.AttachedEntity?.Name ?? string.Empty, - session.ContentData()?.Mind?.AllRoles.Any(r => r.Antagonist) ?? false, - session.AttachedEntity?.Uid ?? EntityUid.Invalid, - session.UserId), + PlayerInfo = GetPlayerInfo(session), }; } @@ -84,11 +88,6 @@ namespace Content.Server.Administration { RaiseNetworkEvent(args, admin.ConnectedClient); } - - if (e.NewStatus != SessionStatus.Disconnected && _adminManager.IsAdmin(e.Session, true)) - { - SendFullPlayerList(e.Session); - } } private void SendFullPlayerList(IPlayerSession playerSession) @@ -97,15 +96,20 @@ namespace Content.Server.Administration ev.PlayersInfo.Clear(); foreach (var session in _playerManager.GetAllPlayers()) { - var name = session.Name; - var username = session.AttachedEntity?.Name ?? string.Empty; - var antag = session.ContentData()?.Mind?.AllRoles.Any(r => r.Antagonist) ?? false; - var uid = session.AttachedEntity?.Uid ?? EntityUid.Invalid; - - ev.PlayersInfo.Add(new PlayerInfo(name, username, antag, uid, session.UserId)); + ev.PlayersInfo.Add(GetPlayerInfo(session)); } RaiseNetworkEvent(ev, playerSession.ConnectedClient); } + + private PlayerInfo GetPlayerInfo(IPlayerSession session) + { + var name = session.Name; + var username = session.AttachedEntity?.Name ?? string.Empty; + var antag = session.ContentData()?.Mind?.AllRoles.Any(r => r.Antagonist) ?? false; + var uid = session.AttachedEntity?.Uid ?? EntityUid.Invalid; + + return new PlayerInfo(name, username, antag, uid, session.UserId); + } } }