Fix the admin panel only listing your character name (#3229)

This commit is contained in:
DrSmugleaf
2021-02-16 09:11:15 +01:00
committed by GitHub
parent ae5f971fc3
commit cf7ac025b4
5 changed files with 127 additions and 34 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Content.Client.Administration; using Content.Client.Administration;
using Content.Shared.Administration.AdminMenu;
using Content.Shared.Input; using Content.Shared.Input;
using Robust.Client.Console; using Robust.Client.Console;
using Robust.Client.Input; using Robust.Client.Input;
@@ -18,11 +19,14 @@ namespace Content.Client.UserInterface.AdminMenu
[Dependency] private readonly IClientAdminManager _clientAdminManager = default!; [Dependency] private readonly IClientAdminManager _clientAdminManager = default!;
[Dependency] private readonly IClientConGroupController _clientConGroupController = default!; [Dependency] private readonly IClientConGroupController _clientConGroupController = default!;
private SS14Window _window; private AdminMenuWindow _window;
private List<SS14Window> _commandWindows; private List<SS14Window> _commandWindows;
public void Initialize() public void Initialize()
{ {
_netManager.RegisterNetMessage<AdminMenuPlayerListRequest>(AdminMenuPlayerListRequest.NAME);
_netManager.RegisterNetMessage<AdminMenuPlayerListMessage>(AdminMenuPlayerListMessage.NAME, HandlePlayerListMessage);
_commandWindows = new List<SS14Window>(); _commandWindows = new List<SS14Window>();
// Reset the AdminMenu Window on disconnect // Reset the AdminMenu Window on disconnect
_netManager.Disconnect += (sender, channel) => ResetWindow(); _netManager.Disconnect += (sender, channel) => ResetWindow();
@@ -55,6 +59,18 @@ namespace Content.Client.UserInterface.AdminMenu
_gameHud.AdminButtonDown = false; _gameHud.AdminButtonDown = false;
} }
private void RequestPlayerList()
{
var message = _netManager.CreateNetMessage<AdminMenuPlayerListRequest>();
_netManager.ClientSendMessage(message);
}
private void HandlePlayerListMessage(AdminMenuPlayerListMessage msg)
{
_window.RefreshPlayerList(msg.NamesToPlayers);
}
public void ResetWindow() public void ResetWindow()
{ {
_window?.Close(); _window?.Close();
@@ -73,8 +89,8 @@ namespace Content.Client.UserInterface.AdminMenu
public void Open() public void Open()
{ {
if (_window == null) _window ??= new AdminMenuWindow();
_window = new AdminMenuWindow(); _window.OnPlayerListRefresh += RequestPlayerList;
_window.OpenCentered(); _window.OpenCentered();
} }

View File

@@ -33,6 +33,10 @@ namespace Content.Client.UserInterface.AdminMenu
protected override Vector2? CustomSize => (500, 250); protected override Vector2? CustomSize => (500, 250);
public delegate void PlayerListRefresh();
public event PlayerListRefresh? OnPlayerListRefresh;
private readonly List<CommandButton> _adminButtons = new() private readonly List<CommandButton> _adminButtons = new()
{ {
new KickCommandButton(), new KickCommandButton(),
@@ -94,15 +98,14 @@ namespace Content.Client.UserInterface.AdminMenu
} }
} }
private void RefreshPlayerList(ButtonEventArgs args) public void RefreshPlayerList(Dictionary<string, string> namesToPlayers)
{ {
PlayerList.RemoveAllChildren(); PlayerList.RemoveAllChildren();
var playerManager = IoCManager.Resolve<IPlayerManager>(); var playerManager = IoCManager.Resolve<IPlayerManager>();
var sessions = playerManager.Sessions;
PlayerCount.Text = $"Players: {playerManager.PlayerCount}"; PlayerCount.Text = $"Players: {playerManager.PlayerCount}";
Color altColor = Color.FromHex("#292B38"); var altColor = Color.FromHex("#292B38");
Color defaultColor = Color.FromHex("#2F2F3B"); var defaultColor = Color.FromHex("#2F2F3B");
var header = new HBoxContainer var header = new HBoxContainer
{ {
@@ -117,15 +120,6 @@ namespace Content.Client.UserInterface.AdminMenu
new Label { Text = "Player", new Label { Text = "Player",
SizeFlagsStretchRatio = 2f, SizeFlagsStretchRatio = 2f,
SizeFlagsHorizontal = SizeFlags.FillExpand }, SizeFlagsHorizontal = SizeFlags.FillExpand },
new VSeperator(),
new Label { Text = "Status",
SizeFlagsStretchRatio = 1f,
SizeFlagsHorizontal = SizeFlags.FillExpand },
new VSeperator(),
new Label { Text = "Ping",
SizeFlagsStretchRatio = 1f,
SizeFlagsHorizontal = SizeFlags.FillExpand,
Align = Label.AlignMode.Right },
} }
}; };
PlayerList.AddChild(new PanelContainer PlayerList.AddChild(new PanelContainer
@@ -142,36 +136,25 @@ namespace Content.Client.UserInterface.AdminMenu
PlayerList.AddChild(new HSeparator()); PlayerList.AddChild(new HSeparator());
var useAltColor = false; var useAltColor = false;
foreach (var player in sessions) foreach (var (name, player) in namesToPlayers)
{ {
var hbox = new HBoxContainer var hBox = new HBoxContainer
{ {
SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsHorizontal = SizeFlags.FillExpand,
SeparationOverride = 4, SeparationOverride = 4,
Children = Children =
{ {
new Label { new Label {
Text = player.Name, Text = name,
SizeFlagsStretchRatio = 2f, SizeFlagsStretchRatio = 2f,
SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsHorizontal = SizeFlags.FillExpand,
ClipText = true }, ClipText = true },
new VSeperator(), new VSeperator(),
new Label { new Label {
Text = player.AttachedEntity?.Name, Text = player,
SizeFlagsStretchRatio = 2f, SizeFlagsStretchRatio = 2f,
SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsHorizontal = SizeFlags.FillExpand,
ClipText = true }, ClipText = true },
new VSeperator(),
new Label {
Text = player.Status.ToString(),
SizeFlagsStretchRatio = 1f,
SizeFlagsHorizontal = SizeFlags.FillExpand },
new VSeperator(),
new Label {
Text = player.Ping.ToString(),
SizeFlagsStretchRatio = 1f,
SizeFlagsHorizontal = SizeFlags.FillExpand,
Align = Label.AlignMode.Right },
} }
}; };
PlayerList.AddChild(new PanelContainer PlayerList.AddChild(new PanelContainer
@@ -182,7 +165,7 @@ namespace Content.Client.UserInterface.AdminMenu
}, },
Children = Children =
{ {
hbox hBox
} }
}); });
useAltColor ^= true; useAltColor ^= true;
@@ -234,7 +217,7 @@ namespace Content.Client.UserInterface.AdminMenu
SizeFlagsStretchRatio = 0.3f, SizeFlagsStretchRatio = 0.3f,
Text = "Refresh", Text = "Refresh",
}; };
refreshButton.OnPressed += RefreshPlayerList; refreshButton.OnPressed += (_) => OnPlayerListRefresh?.Invoke();
PlayerList = new VBoxContainer(); PlayerList = new VBoxContainer();
@@ -265,7 +248,7 @@ namespace Content.Client.UserInterface.AdminMenu
} }
}; };
playerTabContainer.AddChild(playerVBox); playerTabContainer.AddChild(playerVBox);
RefreshPlayerList(null!); OnPlayerListRefresh?.Invoke();
#endregion PlayerList #endregion PlayerList
#region Admin Tab #region Admin Tab

View File

@@ -10,6 +10,7 @@ using Content.Server.Interfaces.Chat;
using Content.Server.Players; using Content.Server.Players;
using Content.Shared; using Content.Shared;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Administration.AdminMenu;
using Content.Shared.Network.NetMessages; using Content.Shared.Network.NetMessages;
using Robust.Server.Console; using Robust.Server.Console;
using Robust.Server.Player; using Robust.Server.Player;
@@ -167,6 +168,8 @@ namespace Content.Server.Administration
public void Initialize() public void Initialize()
{ {
_netMgr.RegisterNetMessage<MsgUpdateAdminStatus>(MsgUpdateAdminStatus.NAME); _netMgr.RegisterNetMessage<MsgUpdateAdminStatus>(MsgUpdateAdminStatus.NAME);
_netMgr.RegisterNetMessage<AdminMenuPlayerListRequest>(AdminMenuPlayerListRequest.NAME, HandlePlayerListRequest);
_netMgr.RegisterNetMessage<AdminMenuPlayerListMessage>(AdminMenuPlayerListMessage.NAME);
// Cache permissions for loaded console commands with the requisite attributes. // Cache permissions for loaded console commands with the requisite attributes.
foreach (var (cmdName, cmd) in _consoleHost.RegisteredCommands) foreach (var (cmdName, cmd) in _consoleHost.RegisteredCommands)
@@ -227,6 +230,31 @@ namespace Content.Server.Administration
} }
} }
private void HandlePlayerListRequest(AdminMenuPlayerListRequest message)
{
var senderSession = _playerManager.GetSessionByChannel(message.MsgChannel);
if (!_admins.ContainsKey(senderSession))
{
return;
}
var netMsg = _netMgr.CreateNetMessage<AdminMenuPlayerListMessage>();
var namesToPlayers = new Dictionary<string, string>();
foreach (var session in _playerManager.GetAllPlayers())
{
var name = session.Name;
var player = session.AttachedEntity?.Name ?? "";
namesToPlayers.Add(name, player);
}
netMsg.NamesToPlayers = namesToPlayers;
_netMgr.ServerSendMessage(netMsg, senderSession.ConnectedClient);
}
public void PromoteHost(IPlayerSession player) public void PromoteHost(IPlayerSession player)
{ {
_promotedPlayers.Add(player.UserId); _promotedPlayers.Add(player.UserId);

View File

@@ -0,0 +1,44 @@
#nullable enable
using System.Collections.Generic;
using Lidgren.Network;
using Robust.Shared.Network;
namespace Content.Shared.Administration.AdminMenu
{
public class AdminMenuPlayerListMessage : NetMessage
{
#region REQUIRED
public static readonly MsgGroups GROUP = MsgGroups.Command;
public static readonly string NAME = nameof(AdminMenuPlayerListMessage);
public AdminMenuPlayerListMessage(INetChannel channel) : base(NAME, GROUP) { }
#endregion
public Dictionary<string, string> NamesToPlayers = default!;
public override void ReadFromBuffer(NetIncomingMessage buffer)
{
var pairs = buffer.ReadInt32();
NamesToPlayers = new Dictionary<string, string>();
for (var i = 0; i < pairs; i++)
{
var name = buffer.ReadString();
var player = buffer.ReadString();
NamesToPlayers.Add(name, player);
}
}
public override void WriteToBuffer(NetOutgoingMessage buffer)
{
buffer.Write(NamesToPlayers.Count);
foreach (var (name, player) in NamesToPlayers)
{
buffer.Write(name);
buffer.Write(player);
}
}
}
}

View File

@@ -0,0 +1,22 @@
using Lidgren.Network;
using Robust.Shared.Network;
namespace Content.Shared.Administration.AdminMenu
{
public class AdminMenuPlayerListRequest : NetMessage
{
#region REQUIRED
public static readonly MsgGroups GROUP = MsgGroups.Command;
public static readonly string NAME = nameof(AdminMenuPlayerListRequest);
public AdminMenuPlayerListRequest(INetChannel channel) : base(NAME, GROUP) { }
#endregion
public override void ReadFromBuffer(NetIncomingMessage buffer)
{
}
public override void WriteToBuffer(NetOutgoingMessage buffer)
{
}
}
}