diff --git a/Content.Server/Commands/Entities/DeleteEntityCommand.cs b/Content.Server/Commands/Entities/DeleteEntityCommand.cs new file mode 100644 index 0000000000..2ab3f2398f --- /dev/null +++ b/Content.Server/Commands/Entities/DeleteEntityCommand.cs @@ -0,0 +1,42 @@ +using Content.Server.Administration; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.Commands.Entities +{ + [AdminCommand(AdminFlags.Spawn)] + public class DeleteEntityCommand : IConsoleCommand + { + public string Command => "deleteentity"; + public string Description => "Deletes an entity with the given id."; + public string Help => $"Usage: {Command} "; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 1) + { + shell.WriteLine($"Invalid amount of arguments.\n{Help}"); + return; + } + + if (!EntityUid.TryParse(args[0], out var id)) + { + shell.WriteLine($"{args[0]} is not a valid entity id."); + return; + } + + var entityManager = IoCManager.Resolve(); + + if (!entityManager.TryGetEntity(id, out var entity)) + { + shell.WriteLine($"No entity found with id {id}."); + return; + } + + entity.Delete(); + shell.WriteLine($"Deleted entity with id {id}."); + } + } +} diff --git a/Content.Server/GlobalVerbs/DeleteVerb.cs b/Content.Server/GlobalVerbs/DeleteVerb.cs new file mode 100644 index 0000000000..9d9ed75055 --- /dev/null +++ b/Content.Server/GlobalVerbs/DeleteVerb.cs @@ -0,0 +1,55 @@ +#nullable enable +using Content.Shared.GameObjects.Verbs; +using Robust.Server.Console; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; + +namespace Content.Server.GlobalVerbs +{ + [GlobalVerb] + public class DeleteVerb : GlobalVerb + { + public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; + + public override void GetData(IEntity user, IEntity target, VerbData data) + { + data.Visibility = VerbVisibility.Invisible; + + var groupController = IoCManager.Resolve(); + + if (!user.TryGetComponent(out IActorComponent? actor)) + { + return; + } + + if (!groupController.CanCommand(actor.playerSession, "deleteentity")) + { + return; + } + + data.Text = Loc.GetString("Delete"); + data.CategoryData = VerbCategories.Debug; + data.Visibility = VerbVisibility.Visible; + } + + public override void Activate(IEntity user, IEntity target) + { + var groupController = IoCManager.Resolve(); + + if (!user.TryGetComponent(out IActorComponent? actor)) + { + return; + } + + if (!groupController.CanCommand(actor.playerSession, "deleteentity")) + { + return; + } + + target.Delete(); + } + } +}