1
0

PersistenceSaveCommand.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Content.Shared.Administration;
  2. using Content.Shared.CCVar;
  3. using Robust.Shared.Configuration;
  4. using Robust.Shared.Console;
  5. using Robust.Shared.Map;
  6. using Robust.Shared.EntitySerialization.Systems;
  7. using Robust.Shared.Utility;
  8. namespace Content.Server.Administration.Commands;
  9. [AdminCommand(AdminFlags.Server)]
  10. public sealed class PersistenceSave : IConsoleCommand
  11. {
  12. [Dependency] private readonly IConfigurationManager _config = default!;
  13. [Dependency] private readonly IEntitySystemManager _system = default!;
  14. [Dependency] private readonly IMapManager _map = default!;
  15. public string Command => "persistencesave";
  16. public string Description => "Saves server data to a persistence file to be loaded later.";
  17. public string Help => "persistencesave [mapId] [filePath - default: game.map (CCVar) ]";
  18. public void Execute(IConsoleShell shell, string argStr, string[] args)
  19. {
  20. if (args.Length < 1 || args.Length > 2)
  21. {
  22. shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
  23. return;
  24. }
  25. if (!int.TryParse(args[0], out var intMapId))
  26. {
  27. shell.WriteError(Loc.GetString("cmd-parse-failure-integer", ("arg", args[0])));
  28. return;
  29. }
  30. var mapId = new MapId(intMapId);
  31. if (!_map.MapExists(mapId))
  32. {
  33. shell.WriteError(Loc.GetString("cmd-savemap-not-exist"));
  34. return;
  35. }
  36. var saveFilePath = (args.Length > 1 ? args[1] : null) ?? _config.GetCVar(CCVars.GameMap);
  37. if (string.IsNullOrWhiteSpace(saveFilePath))
  38. {
  39. shell.WriteError(Loc.GetString("cmd-persistencesave-no-path", ("cvar", nameof(CCVars.GameMap))));
  40. return;
  41. }
  42. var mapLoader = _system.GetEntitySystem<MapLoaderSystem>();
  43. mapLoader.TrySaveMap(mapId, new ResPath(saveFilePath));
  44. shell.WriteLine(Loc.GetString("cmd-savemap-success"));
  45. }
  46. }