Files
tbd-station-14/Content.Server/Toolshed/Commands/Verbs/RunVerbAsCommand.cs
Perry Fraser 7c7aeffde2 Make RunVerbAs take and return EntityUids (#38155)
fix: make RunVerbAs take and return EntityUids
2025-07-14 08:45:13 -07:00

60 lines
1.8 KiB
C#

using System.Linq;
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.Verbs;
using Robust.Shared.Toolshed;
using Robust.Shared.Toolshed.Syntax;
using Robust.Shared.Toolshed.TypeParsers;
namespace Content.Server.Toolshed.Commands.Verbs;
[ToolshedCommand, AdminCommand(AdminFlags.Moderator)]
public sealed class RunVerbAsCommand : ToolshedCommand
{
private SharedVerbSystem? _verb;
[CommandImplementation]
public IEnumerable<EntityUid> RunVerbAs(
IInvocationContext ctx,
[PipedArgument] IEnumerable<EntityUid> input,
EntityUid runner,
string verb
)
{
_verb ??= GetSys<SharedVerbSystem>();
verb = verb.ToLowerInvariant();
foreach (var eId in input)
{
if (EntityManager.Deleted(runner) && runner.IsValid())
ctx.ReportError(new DeadEntity(runner));
if (ctx.GetErrors().Any())
yield break;
var verbs = _verb.GetLocalVerbs(eId, runner, Verb.VerbTypes, true);
// if the "verb name" is actually a verb-type, try run any verb of that type.
var verbType = Verb.VerbTypes.FirstOrDefault(x => x.Name == verb);
if (verbType != null)
{
var verbTy = verbs.FirstOrDefault(v => v.GetType() == verbType);
if (verbTy != null)
{
_verb.ExecuteVerb(verbTy, runner, eId, forced: true);
yield return eId;
}
}
foreach (var verbTy in verbs)
{
if (verbTy.Text.ToLowerInvariant() == verb)
{
_verb.ExecuteVerb(verbTy, runner, eId, forced: true);
yield return eId;
}
}
}
}
}