diff --git a/Content.Server/_Sunrise/StationGoal/StationGoalCommand.cs b/Content.Server/_Sunrise/StationGoal/StationGoalCommand.cs index b4ee9ebaa3..ad3e2f1f7c 100644 --- a/Content.Server/_Sunrise/StationGoal/StationGoalCommand.cs +++ b/Content.Server/_Sunrise/StationGoal/StationGoalCommand.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server.Administration; +using Content.Server.Commands; using Content.Shared.Administration; using Robust.Shared.Console; using Robust.Shared.Prototypes; @@ -9,19 +10,27 @@ namespace Content.Server._Sunrise.StationGoal [AdminCommand(AdminFlags.Fun)] public sealed class StationGoalCommand : IConsoleCommand { + [Dependency] private readonly IEntityManager _entManager = default!; + public string Command => "sendstationgoal"; public string Description => Loc.GetString("send-station-goal-command-description"); public string Help => Loc.GetString("send-station-goal-command-help-text", ("command", Command)); public void Execute(IConsoleShell shell, string argStr, string[] args) { - if (args.Length != 1) + if (args.Length != 2) { - shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); return; } - var protoId = args[0]; + if (!NetEntity.TryParse(args[0], out var euidNet) || !_entManager.TryGetEntity(euidNet, out var euid)) + { + shell.WriteError($"Failed to parse euid '{args[0]}'."); + return; + } + + var protoId = args[1]; var prototypeManager = IoCManager.Resolve(); if (!prototypeManager.TryIndex(protoId, out var proto)) { @@ -30,24 +39,26 @@ namespace Content.Server._Sunrise.StationGoal } var stationGoalPaper = IoCManager.Resolve().System(); - if (!stationGoalPaper.SendStationGoal(proto)) + if (!stationGoalPaper.SendStationGoal(euid, protoId)) { shell.WriteError("Station goal was not sent"); - return; } } public CompletionResult GetCompletion(IConsoleShell shell, string[] args) { - if (args.Length == 1) + switch (args.Length) { - var options = IoCManager.Resolve() - .EnumeratePrototypes() - .Select(p => new CompletionOption(p.ID)); + case 1: + var stations = ContentCompletionHelper.StationIds(_entManager); + return CompletionResult.FromHintOptions(stations, "[StationId]"); + case 2: + var options = IoCManager.Resolve() + .EnumeratePrototypes() + .Select(p => new CompletionOption(p.ID)); - return CompletionResult.FromHintOptions(options, Loc.GetString("send-station-goal-command-arg-id")); + return CompletionResult.FromHintOptions(options, Loc.GetString("send-station-goal-command-arg-id")); } - return CompletionResult.Empty; } } diff --git a/Content.Server/_Sunrise/StationGoal/StationGoalPaperSystem.cs b/Content.Server/_Sunrise/StationGoal/StationGoalPaperSystem.cs index e353d9b3ae..e81ee467cf 100644 --- a/Content.Server/_Sunrise/StationGoal/StationGoalPaperSystem.cs +++ b/Content.Server/_Sunrise/StationGoal/StationGoalPaperSystem.cs @@ -59,6 +59,11 @@ namespace Content.Server._Sunrise.StationGoal } } + public bool SendStationGoal(EntityUid? ent, ProtoId goal) + { + return SendStationGoal(ent, _prototypeManager.Index(goal)); + } + public bool SendStationGoal(EntityUid? ent, StationGoalPrototype goal) { if (ent is null)