ArtifactSystem.Commands.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Linq;
  2. using Content.Server.Administration;
  3. using Content.Shared.Administration;
  4. using Robust.Shared.Console;
  5. namespace Content.Server.Xenoarchaeology.XenoArtifacts;
  6. public partial class ArtifactSystem
  7. {
  8. [Dependency] private readonly IConsoleHost _conHost = default!;
  9. public void InitializeCommands()
  10. {
  11. _conHost.RegisterCommand("forceartifactnode", "Forces an artifact to traverse to a given node", "forceartifacteffect <uid> <node ID>",
  12. ForceArtifactNode,
  13. ForceArtifactNodeCompletions);
  14. _conHost.RegisterCommand("getartifactmaxvalue", "Reports the maximum research point value for a given artifact", "forceartifacteffect <uid>",
  15. GetArtifactMaxValue);
  16. }
  17. [AdminCommand(AdminFlags.Fun)]
  18. private void ForceArtifactNode(IConsoleShell shell, string argstr, string[] args)
  19. {
  20. if (args.Length != 2)
  21. {
  22. shell.WriteError("Argument length must be 2");
  23. return;
  24. }
  25. if (!NetEntity.TryParse(args[0], out var uidNet) || !TryGetEntity(uidNet, out var uid) || !int.TryParse(args[1], out var id))
  26. return;
  27. if (!TryComp<ArtifactComponent>(uid, out var artifact))
  28. return;
  29. if (artifact.NodeTree.FirstOrDefault(n => n.Id == id) is { } node)
  30. {
  31. EnterNode(uid.Value, ref node);
  32. }
  33. }
  34. private CompletionResult ForceArtifactNodeCompletions(IConsoleShell shell, string[] args)
  35. {
  36. if (args.Length == 2 && NetEntity.TryParse(args[0], out var uidNet) && TryGetEntity(uidNet, out var uid))
  37. {
  38. if (TryComp<ArtifactComponent>(uid, out var artifact))
  39. {
  40. return CompletionResult.FromHintOptions(artifact.NodeTree.Select(s => s.Id.ToString()), "<node id>");
  41. }
  42. }
  43. return CompletionResult.Empty;
  44. }
  45. [AdminCommand(AdminFlags.Debug)]
  46. private void GetArtifactMaxValue(IConsoleShell shell, string argstr, string[] args)
  47. {
  48. if (args.Length != 1)
  49. shell.WriteError("Argument length must be 1");
  50. if (!NetEntity.TryParse(args[0], out var uidNet) || !TryGetEntity(uidNet, out var uid))
  51. return;
  52. if (!TryComp<ArtifactComponent>(uid, out var artifact))
  53. return;
  54. var pointSum = GetResearchPointValue(uid.Value, artifact, true);
  55. shell.WriteLine($"Max point value for {ToPrettyString(uid.Value)} with {artifact.NodeTree.Count} nodes: {pointSum}");
  56. }
  57. }