From 4854a54ee1e1b7dda505bfbfb629d09371c1e1da Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 25 Aug 2020 17:43:27 +0200 Subject: [PATCH] Add strip verb (#1894) * Add strip verb * Merge some of the verb and candragdrop checks --- .../Components/GUI/StrippableComponent.cs | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs index 4e43e0be99..fc54344448 100644 --- a/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs @@ -9,6 +9,7 @@ using Content.Server.Interfaces; using Content.Server.Utility; using Content.Shared.GameObjects.Components.GUI; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; @@ -78,10 +79,18 @@ namespace Content.Server.GameObjects.Components.GUI UserInterface.SetState(new StrippingBoundUserInterfaceState(inventory, hands, cuffs)); } + public bool CanBeStripped(IEntity by) + { + return by != Owner + && by.HasComponent() + && ActionBlockerSystem.CanInteract(by); + } + public bool CanDragDrop(DragDropEventArgs eventArgs) { - return eventArgs.User.HasComponent() - && eventArgs.Target != eventArgs.Dropped && eventArgs.Target == eventArgs.User; + return eventArgs.Target != eventArgs.Dropped + && eventArgs.Target == eventArgs.User + && CanBeStripped(eventArgs.User); } public bool DragDrop(DragDropEventArgs eventArgs) @@ -432,5 +441,31 @@ namespace Content.Server.GameObjects.Components.GUI break; } } + + [Verb] + private sealed class StripVerb : Verb + { + protected override void GetData(IEntity user, StrippableComponent component, VerbData data) + { + if (!component.CanBeStripped(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + + data.Visibility = VerbVisibility.Visible; + data.Text = Loc.GetString("Strip"); + } + + protected override void Activate(IEntity user, StrippableComponent component) + { + if (!user.TryGetComponent(out IActorComponent? actor)) + { + return; + } + + component.OpenUserInterface(actor.playerSession); + } + } } }