1
0

VariantizeCommand.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Content.Shared.Administration;
  2. using Content.Shared.Maps;
  3. using Robust.Shared.Console;
  4. using Robust.Shared.Map;
  5. using Robust.Shared.Map.Components;
  6. namespace Content.Server.Administration.Commands;
  7. [AdminCommand(AdminFlags.Mapping)]
  8. public sealed class VariantizeCommand : IConsoleCommand
  9. {
  10. [Dependency] private readonly IEntityManager _entManager = default!;
  11. [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
  12. public string Command => "variantize";
  13. public string Description => Loc.GetString("variantize-command-description");
  14. public string Help => Loc.GetString("variantize-command-help-text");
  15. public void Execute(IConsoleShell shell, string argStr, string[] args)
  16. {
  17. if (args.Length != 1)
  18. {
  19. shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
  20. return;
  21. }
  22. if (!NetEntity.TryParse(args[0], out var euidNet) || !_entManager.TryGetEntity(euidNet, out var euid))
  23. {
  24. shell.WriteError($"Failed to parse euid '{args[0]}'.");
  25. return;
  26. }
  27. if (!_entManager.TryGetComponent(euid, out MapGridComponent? gridComp))
  28. {
  29. shell.WriteError($"Euid '{euid}' does not exist or is not a grid.");
  30. return;
  31. }
  32. var mapsSystem = _entManager.System<SharedMapSystem>();
  33. var tileSystem = _entManager.System<TileSystem>();
  34. foreach (var tile in mapsSystem.GetAllTiles(euid.Value, gridComp))
  35. {
  36. var def = tile.GetContentTileDefinition(_tileDefManager);
  37. var newTile = new Tile(tile.Tile.TypeId, tile.Tile.Flags, tileSystem.PickVariant(def));
  38. mapsSystem.SetTile(euid.Value, gridComp, tile.GridIndices, newTile);
  39. }
  40. }
  41. }