ForAll command! (#4982)

* ForAll command!
Implements "Bad Query Language", which has a few specifiers you can use for badminning, namely:
named <regex>
prototyped <prototype name>
with <component name>
tagged <tag name>
parented_to <parent entity uid>

For example: forall prototyped MobHuman parented_to 855 do explode $WX $WY 1 1 1 1; addcomp $ID Item

* oops

* fix a silent parsing bug, make parser louder.

* cleanup

* rename shit
This commit is contained in:
moonheart08
2021-10-23 12:15:40 -05:00
committed by GitHub
parent 328b3b2b6a
commit 89bbb71f75
3 changed files with 238 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using Robust.Server.Player;
using Robust.Shared.Console;
using Robust.Shared.GameObjects;
@@ -51,5 +52,38 @@ namespace Content.Server.Commands
attachedEntity = session.AttachedEntity;
return true;
}
public static string SubstituteEntityDetails(IConsoleShell shell, IEntity ent, string ruleString)
{
// gross, is there a better way to do this?
ruleString = ruleString.Replace("$ID", ent.Uid.ToString());
ruleString = ruleString.Replace("$WX",
ent.Transform.WorldPosition.X.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$WY",
ent.Transform.WorldPosition.Y.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$LX",
ent.Transform.LocalPosition.X.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$LY",
ent.Transform.LocalPosition.Y.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$NAME", ent.Name);
if (shell.Player is IPlayerSession player)
{
if (player.AttachedEntity != null)
{
var p = player.AttachedEntity;
ruleString = ruleString.Replace("$PID", ent.Uid.ToString());
ruleString = ruleString.Replace("$PWX",
p.Transform.WorldPosition.X.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$PWY",
p.Transform.WorldPosition.Y.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$PLX",
p.Transform.LocalPosition.X.ToString(CultureInfo.InvariantCulture));
ruleString = ruleString.Replace("$PLY",
p.Transform.LocalPosition.Y.ToString(CultureInfo.InvariantCulture));
}
}
return ruleString;
}
}
}