Files
OldThink/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Commands.cs
ThereDrD e91ee6af81 Наконец-то смешное: артефакты теперь рандомные предметы на станции (#654)
* funny random artifacts

* cvar logic

* ratio logic moved to cvars

* funny update
2024-08-22 01:07:43 +03:00

98 lines
3.2 KiB
C#

using System.Linq;
using System.Text;
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);
}
[AdminCommand(AdminFlags.Fun)]
private void ForceArtifactNode(IConsoleShell shell, string argstr, string[] args)
{
if (args.Length != 2)
{
shell.WriteError("Argument length must be 2");
return;
}
if (!NetEntity.TryParse(args[0], out var uidNet) || !TryGetEntity(uidNet, out var uid) || !int.TryParse(args[1], out var id))
return;
if (!TryComp<ArtifactComponent>(uid, out var artifact))
return;
if (artifact.NodeTree.FirstOrDefault(n => n.Id == id) is { } node)
{
EnterNode(uid.Value, ref node);
}
}
private CompletionResult ForceArtifactNodeCompletions(IConsoleShell shell, string[] args)
{
if (args.Length == 2 && NetEntity.TryParse(args[0], out var uidNet) && TryGetEntity(uidNet, out var uid))
{
if (TryComp<ArtifactComponent>(uid, out var artifact))
{
return CompletionResult.FromHintOptions(artifact.NodeTree.Select(s => s.Id.ToString()), "<node id>");
}
}
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;
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
}