From 427e5c95ca9203bca0a4c956e41ba77a75eff8fa Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 24 Mar 2023 13:50:49 +1100 Subject: [PATCH] Add autocomplete to nukearm (#14819) --- .../Nuke/Commands/ToggleNukeCommand.cs | 90 +++++++++++-------- Resources/Locale/en-US/nuke/nuke-command.ftl | 6 ++ 2 files changed, 59 insertions(+), 37 deletions(-) create mode 100644 Resources/Locale/en-US/nuke/nuke-command.ftl diff --git a/Content.Server/Nuke/Commands/ToggleNukeCommand.cs b/Content.Server/Nuke/Commands/ToggleNukeCommand.cs index e1f29264c4..6caafc13c4 100644 --- a/Content.Server/Nuke/Commands/ToggleNukeCommand.cs +++ b/Content.Server/Nuke/Commands/ToggleNukeCommand.cs @@ -4,57 +4,73 @@ using Content.Shared.Administration; using JetBrains.Annotations; using Robust.Shared.Console; -namespace Content.Server.Nuke.Commands +namespace Content.Server.Nuke.Commands; + +[UsedImplicitly] +[AdminCommand(AdminFlags.Fun)] +public sealed class ToggleNukeCommand : LocalizedCommands { - [UsedImplicitly] - [AdminCommand(AdminFlags.Fun)] - public sealed class ToggleNukeCommand : IConsoleCommand + [Dependency] private readonly IEntityManager _entManager = default!; + + public override string Command => "nukearm"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - public string Command => "nukearm"; - public string Description => "Toggle nuclear bomb timer. You can set timer directly. Uid is optional."; - public string Help => "nukearm "; + EntityUid bombUid; + NukeComponent? bomb = null; - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (args.Length >= 2) { - EntityUid bombUid; - NukeComponent? bomb = null; + if (!EntityUid.TryParse(args[1], out bombUid)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + } + else + { + var query = _entManager.EntityQueryEnumerator(); - if (args.Length >= 2) + while (query.MoveNext(out bombUid, out bomb)) { - if (!EntityUid.TryParse(args[1], out bombUid)) - { - shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); - return; - } + break; } - else + + if (bomb == null) { - var entManager = IoCManager.Resolve(); - var bombs = entManager.EntityQuery(); + shell.WriteError(Loc.GetString("cmd-nukearm-not-found")); + return; + } + } - bomb = bombs.FirstOrDefault(); - if (bomb == null) - { - shell.WriteError("Can't find any entity with a NukeComponent"); - return; - } + var nukeSys = _entManager.System(); - bombUid = bomb.Owner; + if (args.Length >= 1) + { + if (!float.TryParse(args[0], out var timer)) + { + shell.WriteError("shell-argument-must-be-number"); + return; } - var nukeSys = EntitySystem.Get(); - if (args.Length >= 1) - { - if (!float.TryParse(args[0], out var timer)) - { - shell.WriteError("shell-argument-must-be-number"); - return; - } + nukeSys.SetRemainingTime(bombUid, timer, bomb); + } - nukeSys.SetRemainingTime(bombUid, timer, bomb); - } + nukeSys.ToggleBomb(bombUid, bomb); + } - nukeSys.ToggleBomb(bombUid, bomb); + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString(Loc.GetString("cmd-nukearm-1-help"))); } + + if (args.Length == 2) + { + return CompletionResult.FromHintOptions(CompletionHelper.Components(args[1]), Loc.GetString("cmd-nukearm-2-help")); + } + + return CompletionResult.Empty; } } diff --git a/Resources/Locale/en-US/nuke/nuke-command.ftl b/Resources/Locale/en-US/nuke/nuke-command.ftl new file mode 100644 index 0000000000..6fd71ada75 --- /dev/null +++ b/Resources/Locale/en-US/nuke/nuke-command.ftl @@ -0,0 +1,6 @@ +cmd-nukearm-desc = Toggle nuclear bomb timer. You can set timer directly. Uid is optional. +cmd-nukearm-help = nukearm +cmd-nukearm-not-found = Can't find any entity with a NukeComponent. + +cmd-nukearm-1-help = Time (in seconds) +cmd-nukearm-2-help = Nuke -- 2.51.2