SetMapAtmosCommand.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Content.Server.Administration;
  2. using Content.Server.Atmos.Components;
  3. using Content.Server.Atmos.EntitySystems;
  4. using Content.Shared.Administration;
  5. using Content.Shared.Atmos;
  6. using Robust.Shared.Console;
  7. using Robust.Shared.Map;
  8. namespace Content.Server.Atmos.Commands;
  9. [AdminCommand(AdminFlags.Admin)]
  10. public sealed class AddMapAtmosCommand : LocalizedCommands
  11. {
  12. [Dependency] private readonly IEntityManager _entities = default!;
  13. [Dependency] private readonly IMapManager _map = default!;
  14. private const string _cmd = "cmd-set-map-atmos";
  15. public override string Command => "setmapatmos";
  16. public override string Description => Loc.GetString($"{_cmd}-desc");
  17. public override string Help => Loc.GetString($"{_cmd}-help");
  18. public override void Execute(IConsoleShell shell, string argStr, string[] args)
  19. {
  20. if (args.Length < 2)
  21. {
  22. shell.WriteLine(Help);
  23. return;
  24. }
  25. int.TryParse(args[0], out var id);
  26. var map = _map.GetMapEntityId(new MapId(id));
  27. if (!map.IsValid())
  28. {
  29. shell.WriteError(Loc.GetString("cmd-parse-failure-mapid", ("arg", args[0])));
  30. return;
  31. }
  32. if (!bool.TryParse(args[1], out var space))
  33. {
  34. shell.WriteError(Loc.GetString("cmd-parse-failure-bool", ("arg", args[1])));
  35. return;
  36. }
  37. if (space || args.Length < 4)
  38. {
  39. _entities.RemoveComponent<MapAtmosphereComponent>(map);
  40. shell.WriteLine(Loc.GetString($"{_cmd}-removed", ("map", id)));
  41. return;
  42. }
  43. if (!float.TryParse(args[2], out var temp))
  44. {
  45. shell.WriteError(Loc.GetString("cmd-parse-failure-float", ("arg", args[2])));
  46. return;
  47. }
  48. var mix = new GasMixture(Atmospherics.CellVolume) {Temperature = Math.Max(temp, Atmospherics.TCMB)};
  49. for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
  50. {
  51. if (args.Length == 3 + i)
  52. break;
  53. if (!float.TryParse(args[3+i], out var moles))
  54. {
  55. shell.WriteError(Loc.GetString("cmd-parse-failure-float", ("arg", args[3+i])));
  56. return;
  57. }
  58. mix.AdjustMoles(i, moles);
  59. }
  60. var atmos = _entities.EntitySysManager.GetEntitySystem<AtmosphereSystem>();
  61. atmos.SetMapAtmosphere(map, space, mix);
  62. shell.WriteLine(Loc.GetString($"{_cmd}-updated", ("map", id)));
  63. }
  64. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  65. {
  66. if (args.Length == 1)
  67. return CompletionResult.FromHintOptions(CompletionHelper.MapIds(_entities), Loc.GetString($"{_cmd}-hint-map"));
  68. if (args.Length == 2)
  69. return CompletionResult.FromHintOptions(new[]{ "false", "true"}, Loc.GetString($"{_cmd}-hint-space"));
  70. if (!bool.TryParse(args[1], out var space) || space)
  71. return CompletionResult.Empty;
  72. if (args.Length == 3)
  73. return CompletionResult.FromHint(Loc.GetString($"{_cmd}-hint-temp"));
  74. var gas = (Gas) args.Length - 4;
  75. return CompletionResult.FromHint(Loc.GetString($"{_cmd}-hint-gas" , ("gas", gas.ToString())));
  76. }
  77. }