Add ShowRules commmand (#5908)

This commit is contained in:
ShadowCommander
2021-12-28 23:31:18 -08:00
committed by GitHub
parent 9a0055a0ef
commit ca8d673fad
6 changed files with 122 additions and 1 deletions

View File

@@ -3,29 +3,38 @@ using System.Globalization;
using Content.Client.Lobby;
using Content.Client.Viewport;
using Content.Shared.CCVar;
using Content.Shared.Info;
using Robust.Client.Console;
using Robust.Client.State;
using Robust.Client.UserInterface;
using Robust.Shared.Configuration;
using Robust.Shared.ContentPack;
using Robust.Shared.IoC;
using Robust.Shared.Network;
using Robust.Shared.Utility;
namespace Content.Client.Info;
public sealed class RulesManager
public sealed class RulesManager : SharedRulesManager
{
[Dependency] private readonly IResourceManager _resource = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;
[Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!;
[Dependency] private readonly IStateManager _stateManager = default!;
[Dependency] private readonly IClientConsoleHost _consoleHost = default!;
[Dependency] private readonly INetManager _netManager = default!;
public void Initialize()
{
_netManager.RegisterNetMessage<ShowRulesPopupMessage>(OnShowRulesPopupMessage);
_stateManager.OnStateChanged += OnStateChanged;
}
private void OnShowRulesPopupMessage(ShowRulesPopupMessage message)
{
ShowRules(message.PopupTime);
}
private void OnStateChanged(StateChangedEventArgs args)
{
if (args.NewState is not (GameScreen or LobbyState))

View File

@@ -8,6 +8,7 @@ using Content.Server.Connection;
using Content.Server.Database;
using Content.Server.EUI;
using Content.Server.GameTicking;
using Content.Server.Info;
using Content.Server.IoC;
using Content.Server.Maps;
using Content.Server.NodeContainer.NodeGroups;
@@ -91,6 +92,7 @@ namespace Content.Server.Entry
IoCManager.Resolve<IAdminManager>().Initialize();
IoCManager.Resolve<INpcBehaviorManager>().Initialize();
IoCManager.Resolve<IAfkManager>().Initialize();
IoCManager.Resolve<RulesManager>().Initialize();
_euiManager.Initialize();
IoCManager.Resolve<IGameMapManager>().Initialize();

View File

@@ -0,0 +1,15 @@
using Content.Shared.Info;
using Robust.Shared.IoC;
using Robust.Shared.Network;
namespace Content.Server.Info;
public class RulesManager : SharedRulesManager
{
[Dependency] private readonly INetManager _netManager = default!;
public void Initialize()
{
_netManager.RegisterNetMessage<ShowRulesPopupMessage>();
}
}

View File

@@ -0,0 +1,67 @@
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.CCVar;
using Content.Shared.Info;
using Robust.Server.Player;
using Robust.Shared.Configuration;
using Robust.Shared.Console;
using Robust.Shared.IoC;
using Robust.Shared.Network;
namespace Content.Server.Info;
[AdminCommand(AdminFlags.Admin)]
public class ShowRulesCommand : IConsoleCommand
{
public string Command => "showrules";
public string Description => "Opens the rules popup for the specified player.";
public string Help => "showrules <username> [time]";
public async void Execute(IConsoleShell shell, string argStr, string[] args)
{
string target;
float seconds;
switch (args.Length)
{
case 1:
{
target = args[0];
var configurationManager = IoCManager.Resolve<IConfigurationManager>();
seconds = configurationManager.GetCVar(CCVars.RulesWaitTime);
break;
}
case 2:
{
if (float.TryParse(args[1], out seconds))
return;
target = args[0];
shell.WriteLine($"{args[1]} is not a valid amount of minutes.\n{Help}");
break;
}
default:
{
shell.WriteLine(Help);
return;
}
}
var locator = IoCManager.Resolve<IPlayerLocator>();
var located = await locator.LookupIdByNameOrIdAsync(target);
if (located == null)
{
shell.WriteError("Unable to find a player with that name.");
return;
}
var message = new SharedRulesManager.ShowRulesPopupMessage
{
PopupTime = seconds
};
var player = IoCManager.Resolve<IPlayerManager>()
.GetSessionByUserId(located.UserId);
IoCManager.Resolve<INetManager>()
.ServerSendMessage(message, player.ConnectedClient);
}
}

View File

@@ -11,6 +11,7 @@ using Content.Server.DeviceNetwork;
using Content.Server.EUI;
using Content.Server.Holiday;
using Content.Server.Holiday.Interfaces;
using Content.Server.Info;
using Content.Server.Maps;
using Content.Server.Module;
using Content.Server.MoMMI;
@@ -57,6 +58,7 @@ namespace Content.Server.IoC
IoCManager.Register<IAfkManager, AfkManager>();
IoCManager.Register<IGameMapManager, GameMapManager>();
IoCManager.Register<IGamePrototypeLoadManager, GamePrototypeLoadManager>();
IoCManager.Register<RulesManager, RulesManager>();
}
}
}

View File

@@ -0,0 +1,26 @@
using JetBrains.Annotations;
using Lidgren.Network;
using Robust.Shared.Network;
namespace Content.Shared.Info;
public abstract class SharedRulesManager
{
[UsedImplicitly]
public sealed class ShowRulesPopupMessage : NetMessage
{
public override MsgGroups MsgGroup => MsgGroups.Command;
public float PopupTime { get; set; }
public override void ReadFromBuffer(NetIncomingMessage buffer)
{
PopupTime = buffer.ReadFloat();
}
public override void WriteToBuffer(NetOutgoingMessage buffer)
{
buffer.Write(PopupTime);
}
}
}