Files
tbd-station-14/Content.Server/StationEvents/StationEventCommand.cs
2022-05-27 10:19:58 +10:00

172 lines
5.6 KiB
C#

using Content.Server.Administration;
using Content.Shared.Administration;
using Robust.Server.Player;
using Robust.Shared.Console;
using System.Linq;
using System.Text;
namespace Content.Server.StationEvents
{
[AdminCommand(AdminFlags.Round)]
public sealed class StationEventCommand : IConsoleCommand
{
public string Command => "events";
public string Description => Loc.GetString("cmd-events-desc");
public string Help => Loc.GetString("cmd-events-help");
public void Execute(IConsoleShell shell, string argStr, string[] args)
{
var player = shell.Player as IPlayerSession;
if (!args.Any())
{
shell.WriteLine(Loc.GetString("shell-wrong-arguments-number") + $"\n{Help}");
return;
}
switch (args.First())
{
case "list":
List(shell, player);
break;
case "running":
Running(shell, player);
break;
// Didn't use a "toggle" so it's explicit
case "pause":
Pause(shell, player);
break;
case "resume":
Resume(shell, player);
break;
case "stop":
Stop(shell, player);
break;
case "run":
if (args.Length != 2)
{
shell.WriteLine(Loc.GetString("shell-wrong-arguments-number-need-specific",
("properAmount", 2),
("currentAmount", args.Length))
+ $"\n{Help}");
break;
}
Run(shell, player, args[1]);
break;
default:
shell.WriteLine(Loc.GetString($"shell-invalid-command-specific.", ("commandName", "events")) + $"\n{Help}");
break;
}
}
private void Run(IConsoleShell shell, IPlayerSession? player, string eventName)
{
var stationSystem = EntitySystem.Get<StationEventSystem>();
var resultText = eventName == "random"
? stationSystem.RunRandomEvent()
: stationSystem.RunEvent(eventName);
shell.WriteLine(resultText);
}
private void Running(IConsoleShell shell, IPlayerSession? player)
{
var eventName = EntitySystem.Get<StationEventSystem>().CurrentEvent?.Name;
if (!string.IsNullOrEmpty(eventName))
{
shell.WriteLine(eventName);
}
else
{
shell.WriteLine(Loc.GetString("cmd-events-none-running"));
}
}
private void List(IConsoleShell shell, IPlayerSession? player)
{
var events = EntitySystem.Get<StationEventSystem>();
var sb = new StringBuilder();
sb.AppendLine(Loc.GetString("cmd-events-list-random"));
foreach (var stationEvents in events.StationEvents)
{
sb.AppendLine(stationEvents.Name);
}
shell.WriteLine(sb.ToString());
}
private void Pause(IConsoleShell shell, IPlayerSession? player)
{
var stationEventSystem = EntitySystem.Get<StationEventSystem>();
if (!stationEventSystem.Enabled)
{
shell.WriteLine(Loc.GetString("cmd-events-already-paused"));
}
else
{
stationEventSystem.Enabled = false;
shell.WriteLine(Loc.GetString("cmd-events-paused"));
}
}
private void Resume(IConsoleShell shell, IPlayerSession? player)
{
var stationEventSystem = EntitySystem.Get<StationEventSystem>();
if (stationEventSystem.Enabled)
{
shell.WriteLine(Loc.GetString("cmd-events-already-running"));
}
else
{
stationEventSystem.Enabled = true;
shell.WriteLine(Loc.GetString("cmd-events-resumed"));
}
}
private void Stop(IConsoleShell shell, IPlayerSession? player)
{
var resultText = EntitySystem.Get<StationEventSystem>().StopEvent();
shell.WriteLine(resultText);
}
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
{
if (args.Length == 1)
{
var options = new[]
{
"list",
"running",
"pause",
"resume",
"stop",
"run"
};
return CompletionResult.FromHintOptions(options, Loc.GetString("cmd-events-arg-subcommand"));
}
var command = args[0];
if (args.Length != 2)
return CompletionResult.Empty;
if (command == "run")
{
var system = EntitySystem.Get<StationEventSystem>();
var options = new[] { "random" }.Concat(
system.StationEvents.Select(e => e.Name).OrderBy(e => e));
return CompletionResult.FromHintOptions(options, Loc.GetString("cmd-events-arg-run-eventName"));
}
return CompletionResult.Empty;
}
}
}