ColorNetworkCommand.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Content.Server.Administration.Managers;
  2. using Content.Server.Atmos.Piping.Components;
  3. using Content.Server.Atmos.Piping.EntitySystems;
  4. using Content.Server.NodeContainer;
  5. using Content.Server.NodeContainer.NodeGroups;
  6. using Content.Shared.Administration;
  7. using Robust.Shared.Console;
  8. namespace Content.Server.Sandbox.Commands
  9. {
  10. [AnyCommand]
  11. public sealed class ColorNetworkCommand : LocalizedCommands
  12. {
  13. [Dependency] private readonly IEntityManager _entManager = default!;
  14. public override string Command => "colornetwork";
  15. public override void Execute(IConsoleShell shell, string argStr, string[] args)
  16. {
  17. var sandboxManager = _entManager.System<SandboxSystem>();
  18. var adminManager = IoCManager.Resolve<IAdminManager>();
  19. if (shell.IsClient || (!sandboxManager.IsSandboxEnabled && !adminManager.HasAdminFlag(shell.Player!, AdminFlags.Mapping)))
  20. {
  21. shell.WriteError(Loc.GetString("cmd-colornetwork-no-access"));
  22. }
  23. if (args.Length != 3)
  24. {
  25. shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
  26. return;
  27. }
  28. if (!int.TryParse(args[0], out var targetId))
  29. {
  30. shell.WriteLine(Loc.GetString("shell-argument-must-be-number"));
  31. return;
  32. }
  33. var nent = new NetEntity(targetId);
  34. if (!_entManager.TryGetEntity(nent, out var eUid))
  35. {
  36. shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
  37. return;
  38. }
  39. if (!_entManager.TryGetComponent(eUid, out NodeContainerComponent? nodeContainerComponent))
  40. {
  41. shell.WriteLine(Loc.GetString("shell-entity-is-not-node-container"));
  42. return;
  43. }
  44. if (!Enum.TryParse(args[1], out NodeGroupID nodeGroupId))
  45. {
  46. shell.WriteLine(Loc.GetString("shell-node-group-is-invalid"));
  47. return;
  48. }
  49. var color = Color.TryFromHex(args[2]);
  50. if (!color.HasValue)
  51. {
  52. shell.WriteError(Loc.GetString("shell-invalid-color-hex"));
  53. return;
  54. }
  55. PaintNodes(nodeContainerComponent, nodeGroupId, color.Value);
  56. }
  57. private void PaintNodes(NodeContainerComponent nodeContainerComponent, NodeGroupID nodeGroupId, Color color)
  58. {
  59. var group = nodeContainerComponent.Nodes[nodeGroupId.ToString().ToLower()].NodeGroup;
  60. if (group == null)
  61. return;
  62. foreach (var x in group.Nodes)
  63. {
  64. if (!_entManager.TryGetComponent(x.Owner, out AtmosPipeColorComponent? atmosPipeColorComponent))
  65. continue;
  66. _entManager.System<AtmosPipeColorSystem>().SetColor(x.Owner, atmosPipeColorComponent, color);
  67. }
  68. }
  69. }
  70. }