Add ShowRules commmand (#5908)
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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();
|
||||
|
||||
15
Content.Server/Info/RulesManager.cs
Normal file
15
Content.Server/Info/RulesManager.cs
Normal 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>();
|
||||
}
|
||||
}
|
||||
67
Content.Server/Info/ShowRulesCommand.cs
Normal file
67
Content.Server/Info/ShowRulesCommand.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
26
Content.Shared/Info/SharedRulesManager.cs
Normal file
26
Content.Shared/Info/SharedRulesManager.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user