]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add autocomplete to nukearm (#14819)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Fri, 24 Mar 2023 02:50:49 +0000 (13:50 +1100)
committerGitHub <noreply@github.com>
Fri, 24 Mar 2023 02:50:49 +0000 (13:50 +1100)
Content.Server/Nuke/Commands/ToggleNukeCommand.cs
Resources/Locale/en-US/nuke/nuke-command.ftl [new file with mode: 0644]

index e1f29264c4bf6c57dbed37094a84214922fc401f..6caafc13c417d93d4043b62569b13b1f7a93a666 100644 (file)
@@ -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 <timer> <uid>";
+        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<NukeComponent>();
 
-            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<IEntityManager>();
-                var bombs = entManager.EntityQuery<NukeComponent>();
+                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<NukeSystem>();
 
-                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<NukeSystem>();
-            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<NukeComponent>(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 (file)
index 0000000..6fd71ad
--- /dev/null
@@ -0,0 +1,6 @@
+cmd-nukearm-desc = Toggle nuclear bomb timer. You can set timer directly. Uid is optional.
+cmd-nukearm-help = nukearm <timer> <uid>
+cmd-nukearm-not-found = Can't find any entity with a NukeComponent.
+
+cmd-nukearm-1-help = Time (in seconds)
+cmd-nukearm-2-help = Nuke