diff --git a/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml b/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml
index 6180e5c389..3071bf8358 100644
--- a/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml
+++ b/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml
@@ -5,6 +5,8 @@
+
diff --git a/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml.cs b/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml.cs
index c7bd84f767..7ece83d1cf 100644
--- a/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml.cs
+++ b/Content.Client/Administration/UI/Tabs/PlayerTab/PlayerTab.xaml.cs
@@ -1,3 +1,4 @@
+using System.Linq;
using Content.Client.Administration.Systems;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
@@ -18,10 +19,11 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
private readonly Color _altColor = Color.FromHex("#292B38");
private readonly Color _defaultColor = Color.FromHex("#2F2F3B");
private readonly AdminSystem _adminSystem;
- private readonly List _players = new();
+ private IReadOnlyList _players = new List();
private Header _headerClicked = Header.Username;
private bool _ascending = true;
+ private bool _showDisconnected;
public event Action? OnEntryPressed;
@@ -36,6 +38,7 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
_adminSystem.OverlayDisabled += OverlayDisabled;
OverlayButton.OnPressed += OverlayButtonPressed;
+ ShowDisconnectedButton.OnPressed += ShowDisconnectedPressed;
ListHeader.BackgroundColorPanel.PanelOverride = new StyleBoxFlat(_altColor);
ListHeader.OnHeaderClicked += HeaderClicked;
@@ -63,6 +66,12 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
}
}
+ private void ShowDisconnectedPressed(ButtonEventArgs args)
+ {
+ _showDisconnected = args.Button.Pressed;
+ RefreshPlayerList(_players);
+ }
+
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
@@ -81,12 +90,13 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
private void RefreshPlayerList(IReadOnlyList players)
{
- foreach (var control in _players)
+ foreach (var child in PlayerList.Children.ToArray())
{
- PlayerList.RemoveChild(control);
+ if (child is PlayerTabEntry)
+ child.Orphan();
}
- _players.Clear();
+ _players = players;
var playerManager = IoCManager.Resolve();
PlayerCount.Text = $"Players: {playerManager.PlayerCount}";
@@ -99,6 +109,9 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
var useAltColor = false;
foreach (var player in sortedPlayers)
{
+ if (!_showDisconnected && !player.Connected)
+ continue;
+
var entry = new PlayerTabEntry(player.Username,
player.CharacterName,
player.IdentityName,
@@ -109,7 +122,6 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
entry.PlayerUid = player.EntityUid;
entry.OnPressed += args => OnEntryPressed?.Invoke(args);
PlayerList.AddChild(entry);
- _players.Add(entry);
useAltColor ^= true;
}
diff --git a/Resources/Locale/en-US/administration/ui/tabs/player-tab.ftl b/Resources/Locale/en-US/administration/ui/tabs/player-tab.ftl
index c4a8bdee75..b9c8f4e5ab 100644
--- a/Resources/Locale/en-US/administration/ui/tabs/player-tab.ftl
+++ b/Resources/Locale/en-US/administration/ui/tabs/player-tab.ftl
@@ -2,4 +2,5 @@
player-tab-character = Character
player-tab-job = Job
player-tab-antagonist = Antagonist
+player-tab-show-disconnected = Show Disconnected
player-tab-overlay = Overlay