SetGamePresetCommand.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Linq;
  2. using Content.Server.Administration;
  3. using Content.Server.GameTicking.Presets;
  4. using Content.Shared.Administration;
  5. using Robust.Shared.Console;
  6. using Robust.Shared.Prototypes;
  7. namespace Content.Server.GameTicking.Commands
  8. {
  9. [AdminCommand(AdminFlags.Round)]
  10. public sealed class SetGamePresetCommand : IConsoleCommand
  11. {
  12. [Dependency] private readonly IEntityManager _entity = default!;
  13. [Dependency] private readonly IPrototypeManager _prototype = default!;
  14. public string Command => "setgamepreset";
  15. public string Description => Loc.GetString("set-game-preset-command-description", ("command", Command));
  16. public string Help => Loc.GetString("set-game-preset-command-help-text", ("command", Command));
  17. public void Execute(IConsoleShell shell, string argStr, string[] args)
  18. {
  19. if (args.Length != 1)
  20. {
  21. shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", ("properAmount", 1), ("currentAmount", args.Length)));
  22. return;
  23. }
  24. var ticker = _entity.System<GameTicker>();
  25. if (!ticker.TryFindGamePreset(args[0], out var preset))
  26. {
  27. shell.WriteError(Loc.GetString("set-game-preset-preset-error", ("preset", args[0])));
  28. return;
  29. }
  30. ticker.SetGamePreset(preset);
  31. shell.WriteLine(Loc.GetString("set-game-preset-preset-set", ("preset", preset.ID)));
  32. }
  33. public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  34. {
  35. if (args.Length == 1)
  36. {
  37. var gamePresets = _prototype.EnumeratePrototypes<GamePresetPrototype>()
  38. .OrderBy(p => p.ID);
  39. var options = new List<string>();
  40. foreach (var preset in gamePresets)
  41. {
  42. options.Add(preset.ID);
  43. options.AddRange(preset.Alias);
  44. }
  45. return CompletionResult.FromHintOptions(options, "<id>");
  46. }
  47. return CompletionResult.Empty;
  48. }
  49. }
  50. }