Fix the admin panel only listing your character name (#3229)
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user