1
0

BiomeSystem.Commands.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using System.Linq;
  2. using Content.Server.Administration;
  3. using Content.Shared.Administration;
  4. using Content.Shared.Parallax.Biomes;
  5. using Content.Shared.Parallax.Biomes.Layers;
  6. using Content.Shared.Parallax.Biomes.Markers;
  7. using Robust.Shared.Console;
  8. using Robust.Shared.Map;
  9. using Robust.Shared.Map.Components;
  10. namespace Content.Server.Parallax;
  11. public sealed partial class BiomeSystem
  12. {
  13. private void InitializeCommands()
  14. {
  15. _console.RegisterCommand("biome_clear", Loc.GetString("cmd-biome_clear-desc"), Loc.GetString("cmd-biome_clear-help"), BiomeClearCallback, BiomeClearCallbackHelper);
  16. _console.RegisterCommand("biome_addlayer", Loc.GetString("cmd-biome_addlayer-desc"), Loc.GetString("cmd-biome_addlayer-help"), AddLayerCallback, AddLayerCallbackHelp);
  17. _console.RegisterCommand("biome_addmarkerlayer", Loc.GetString("cmd-biome_addmarkerlayer-desc"), Loc.GetString("cmd-biome_addmarkerlayer-desc"), AddMarkerLayerCallback, AddMarkerLayerCallbackHelper);
  18. }
  19. [AdminCommand(AdminFlags.Fun)]
  20. private void BiomeClearCallback(IConsoleShell shell, string argstr, string[] args)
  21. {
  22. if (args.Length != 1)
  23. {
  24. return;
  25. }
  26. int.TryParse(args[0], out var mapInt);
  27. var mapId = new MapId(mapInt);
  28. var mapUid = _mapManager.GetMapEntityId(mapId);
  29. if (_mapManager.MapExists(mapId) ||
  30. !TryComp<BiomeComponent>(mapUid, out var biome))
  31. {
  32. return;
  33. }
  34. ClearTemplate(mapUid, biome);
  35. }
  36. private CompletionResult BiomeClearCallbackHelper(IConsoleShell shell, string[] args)
  37. {
  38. if (args.Length == 1)
  39. {
  40. return CompletionResult.FromHintOptions(CompletionHelper.Components<BiomeComponent>(args[0], EntityManager), "Biome");
  41. }
  42. return CompletionResult.Empty;
  43. }
  44. [AdminCommand(AdminFlags.Fun)]
  45. private void AddLayerCallback(IConsoleShell shell, string argstr, string[] args)
  46. {
  47. if (args.Length < 3 || args.Length > 4)
  48. {
  49. return;
  50. }
  51. if (!int.TryParse(args[0], out var mapInt))
  52. {
  53. return;
  54. }
  55. var mapId = new MapId(mapInt);
  56. var mapUid = _mapManager.GetMapEntityId(mapId);
  57. if (!_mapManager.MapExists(mapId) || !TryComp<BiomeComponent>(mapUid, out var biome))
  58. {
  59. return;
  60. }
  61. if (!ProtoManager.TryIndex<BiomeTemplatePrototype>(args[1], out var template))
  62. {
  63. return;
  64. }
  65. var offset = 0;
  66. if (args.Length == 4)
  67. {
  68. int.TryParse(args[3], out offset);
  69. }
  70. AddTemplate(mapUid, biome, args[2], template, offset);
  71. }
  72. private CompletionResult AddLayerCallbackHelp(IConsoleShell shell, string[] args)
  73. {
  74. if (args.Length == 1)
  75. {
  76. return CompletionResult.FromHintOptions(CompletionHelper.MapIds(EntityManager), "Map ID");
  77. }
  78. if (args.Length == 2)
  79. {
  80. return CompletionResult.FromHintOptions(
  81. CompletionHelper.PrototypeIDs<BiomeTemplatePrototype>(proto: ProtoManager), "Biome template");
  82. }
  83. if (args.Length == 3)
  84. {
  85. if (int.TryParse(args[0], out var mapInt))
  86. {
  87. var mapId = new MapId(mapInt);
  88. if (TryComp<BiomeComponent>(_mapManager.GetMapEntityId(mapId), out var biome))
  89. {
  90. var results = new List<string>();
  91. foreach (var layer in biome.Layers)
  92. {
  93. if (layer is not BiomeDummyLayer dummy)
  94. continue;
  95. results.Add(dummy.ID);
  96. }
  97. return CompletionResult.FromHintOptions(results, "Dummy layer ID");
  98. }
  99. }
  100. }
  101. if (args.Length == 4)
  102. {
  103. return CompletionResult.FromHint("Seed offset");
  104. }
  105. return CompletionResult.Empty;
  106. }
  107. [AdminCommand(AdminFlags.Fun)]
  108. private void AddMarkerLayerCallback(IConsoleShell shell, string argstr, string[] args)
  109. {
  110. if (args.Length != 2)
  111. {
  112. return;
  113. }
  114. if (!int.TryParse(args[0], out var mapInt))
  115. {
  116. return;
  117. }
  118. var mapId = new MapId(mapInt);
  119. if (!_mapManager.MapExists(mapId) || !TryComp<BiomeComponent>(_mapManager.GetMapEntityId(mapId), out var biome))
  120. {
  121. return;
  122. }
  123. if (!ProtoManager.HasIndex<BiomeMarkerLayerPrototype>(args[1]))
  124. {
  125. return;
  126. }
  127. if (!biome.MarkerLayers.Add(args[1]))
  128. {
  129. return;
  130. }
  131. biome.ForcedMarkerLayers.Add(args[1]);
  132. }
  133. private CompletionResult AddMarkerLayerCallbackHelper(IConsoleShell shell, string[] args)
  134. {
  135. if (args.Length == 1)
  136. {
  137. var allQuery = AllEntityQuery<MapComponent, BiomeComponent>();
  138. var options = new List<CompletionOption>();
  139. while (allQuery.MoveNext(out var mapComp, out _))
  140. {
  141. options.Add(new CompletionOption(mapComp.MapId.ToString()));
  142. }
  143. return CompletionResult.FromHintOptions(options, "Biome");
  144. }
  145. if (args.Length == 2)
  146. {
  147. return CompletionResult.FromHintOptions(
  148. CompletionHelper.PrototypeIDs<BiomeMarkerLayerPrototype>(proto: ProtoManager), "Marker");
  149. }
  150. return CompletionResult.Empty;
  151. }
  152. }