diff --git a/Content.Client/Administration/AdminSystem.Overlay.cs b/Content.Client/Administration/AdminSystem.Overlay.cs index b2d442db45..8a9a0ffb7c 100644 --- a/Content.Client/Administration/AdminSystem.Overlay.cs +++ b/Content.Client/Administration/AdminSystem.Overlay.cs @@ -1,14 +1,28 @@ +using Content.Client.Administration.Managers; using Robust.Client.UserInterface.Controls; +using Robust.Shared.IoC; namespace Content.Client.Administration { public partial class AdminSystem { + [Dependency] private readonly IClientAdminManager _adminManager = default!; private AdminNameOverlay _adminNameOverlay = default!; private void InitializeOverlay() { _adminNameOverlay = new AdminNameOverlay(this, _entityManager, _eyeManager, _resourceCache, _entityLookup); + _adminManager.AdminStatusUpdated += OnAdminStatusUpdated; + } + + private void ShutdownOverlay() + { + _adminManager.AdminStatusUpdated -= OnAdminStatusUpdated; + } + + private void OnAdminStatusUpdated() + { + AdminOverlayOff(); } public void AdminOverlayOn(BaseButton.ButtonEventArgs? _ = null) diff --git a/Content.Client/Administration/AdminSystem.cs b/Content.Client/Administration/AdminSystem.cs index 6e72234a92..910d1f5736 100644 --- a/Content.Client/Administration/AdminSystem.cs +++ b/Content.Client/Administration/AdminSystem.cs @@ -40,6 +40,12 @@ namespace Content.Client.Administration SubscribeNetworkEvent(OnPlayerInfoRemoval); } + public override void Shutdown() + { + base.Shutdown(); + ShutdownOverlay(); + } + private void OnPlayerInfoRemoval(PlayerInfoRemovalMessage ev) { if (_playerList == null) _playerList = new(); diff --git a/Content.Server/Administration/AdminSystem.cs b/Content.Server/Administration/AdminSystem.cs index cfc11dbbf3..d04c7eb8c2 100644 --- a/Content.Server/Administration/AdminSystem.cs +++ b/Content.Server/Administration/AdminSystem.cs @@ -2,6 +2,8 @@ using System; using System.Linq; using Content.Server.Administration.Managers; using Content.Server.Players; +using Content.Server.Roles; +using Content.Server.Traitor; using Content.Shared.Administration; using Content.Shared.Administration.Events; using Robust.Server.GameObjects; @@ -25,11 +27,28 @@ namespace Content.Server.Administration _adminManager.OnPermsChanged += OnAdminPermsChanged; SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnRoleAddedEvent); + } + + private void OnRoleAddedEvent(RoleAddedEvent ev) + { + if (ev.Role.Antagonist && ev.Role.Mind.Session != null) + { + foreach (var admin in _adminManager.ActiveAdmins) + { + RaiseNetworkEvent(GetChangedEvent(ev.Role.Mind.Session), admin.ConnectedClient); + } + } } private void OnAdminPermsChanged(AdminPermsChangedEventArgs obj) { - if(!obj.IsAdmin) return; + if(!obj.IsAdmin) + { + RaiseNetworkEvent(new FullPlayerListEvent(), obj.Player.ConnectedClient); + return; + } + SendFullPlayerList(obj.Player); }