Files

98 lines
3.2 KiB
C#
Raw Permalink Normal View History

2022-11-17 11:40:05 -06:00
using System.Linq;
using System.Text;
2022-11-17 11:40:05 -06:00
using Content.Server.Administration;
using Content.Shared.Administration;
using Robust.Shared.Console;
namespace Content.Server.Xenoarchaeology.XenoArtifacts;
public partial class ArtifactSystem
{
[Dependency] private readonly IConsoleHost _conHost = default!;
public void InitializeCommands()
{
_conHost.RegisterCommand("forceartifactnode", "Forces an artifact to traverse to a given node", "forceartifacteffect <uid> <node ID>",
ForceArtifactNode,
ForceArtifactNodeCompletions);
_conHost.RegisterCommand("getartifactmaxvalue", "Reports the maximum research point value for a given artifact", "forceartifacteffect <uid>",
GetArtifactMaxValue);
// WD added
_conHost.RegisterCommand("listartifacts", "List all artifact ids and names", "forceartifacteffect",
ListArtifacts);
2022-11-17 11:40:05 -06:00
}
[AdminCommand(AdminFlags.Fun)]
private void ForceArtifactNode(IConsoleShell shell, string argstr, string[] args)
{
if (args.Length != 2)
{
2022-11-17 11:40:05 -06:00
shell.WriteError("Argument length must be 2");
return;
}
2022-11-17 11:40:05 -06:00
if (!NetEntity.TryParse(args[0], out var uidNet) || !TryGetEntity(uidNet, out var uid) || !int.TryParse(args[1], out var id))
2022-11-17 11:40:05 -06:00
return;
2023-03-23 22:50:24 -04:00
if (!TryComp<ArtifactComponent>(uid, out var artifact))
2022-11-17 11:40:05 -06:00
return;
2023-03-23 22:50:24 -04:00
if (artifact.NodeTree.FirstOrDefault(n => n.Id == id) is { } node)
2022-11-17 11:40:05 -06:00
{
EnterNode(uid.Value, ref node);
2022-11-17 11:40:05 -06:00
}
}
private CompletionResult ForceArtifactNodeCompletions(IConsoleShell shell, string[] args)
{
if (args.Length == 2 && NetEntity.TryParse(args[0], out var uidNet) && TryGetEntity(uidNet, out var uid))
2022-11-17 11:40:05 -06:00
{
2023-03-23 22:50:24 -04:00
if (TryComp<ArtifactComponent>(uid, out var artifact))
2022-11-17 11:40:05 -06:00
{
2023-03-23 22:50:24 -04:00
return CompletionResult.FromHintOptions(artifact.NodeTree.Select(s => s.Id.ToString()), "<node id>");
2022-11-17 11:40:05 -06:00
}
}
return CompletionResult.Empty;
}
[AdminCommand(AdminFlags.Debug)]
private void GetArtifactMaxValue(IConsoleShell shell, string argstr, string[] args)
{
if (args.Length != 1)
shell.WriteError("Argument length must be 1");
if (!NetEntity.TryParse(args[0], out var uidNet) || !TryGetEntity(uidNet, out var uid))
return;
2023-03-23 22:50:24 -04:00
if (!TryComp<ArtifactComponent>(uid, out var artifact))
return;
var pointSum = GetResearchPointValue(uid.Value, artifact, true);
shell.WriteLine($"Max point value for {ToPrettyString(uid.Value)} with {artifact.NodeTree.Count} nodes: {pointSum}");
}
// WD added - start
[AdminCommand(AdminFlags.Admin)]
private void ListArtifacts(IConsoleShell shell, string argstr, string[] args)
{
var items = EntityQuery<ArtifactComponent>();
var msg = new StringBuilder();
foreach (var artifact in items)
{
var entity = artifact.Owner;
var effects = string.Join(", ", artifact.NodeTree.ToArray().Select(x => x.Effect));
msg.AppendFormat("{0}: {1}, {2}\n\n", Name(entity), effects, entity);
}
shell.WriteLine(msg.ToString());
}
// WD added - end
2022-11-17 11:40:05 -06:00
}