From 8ecb78ee5ac879ef0c79e9c35f3d05e72faf72fd Mon Sep 17 00:00:00 2001 From: Krunklehorn <42424291+Krunklehorn@users.noreply.github.com> Date: Fri, 15 Mar 2024 23:50:53 -0400 Subject: [PATCH] Fix StrippableSystem blunders (#26166) * Fixes target hand check when no hands were needed. * Adds missing CanStripX checks. * Whitespace. * Fixed bad math causing instant strips. --- Content.Server/Strip/StrippableSystem.cs | 16 +++++++++++----- .../Strip/Components/StrippableComponent.cs | 4 ++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Content.Server/Strip/StrippableSystem.cs b/Content.Server/Strip/StrippableSystem.cs index 950411a8e2cbf8..3b38b65a19d5f0 100644 --- a/Content.Server/Strip/StrippableSystem.cs +++ b/Content.Server/Strip/StrippableSystem.cs @@ -122,13 +122,12 @@ public override void StartOpeningStripper(EntityUid user, Entity strippable, ref StrippingSlotButtonPressed args) { if (args.Session.AttachedEntity is not { Valid: true } user || - !TryComp(user, out var userHands) || - !TryComp(strippable.Owner, out var targetHands)) + !TryComp(user, out var userHands)) return; if (args.IsHand) { - StripHand((user, userHands), (strippable.Owner, targetHands), args.Slot, strippable); + StripHand((user, userHands), (strippable.Owner, null), args.Slot, strippable); return; } @@ -478,6 +477,9 @@ private void StripInsertHand( !Resolve(target, ref target.Comp)) return; + if (!CanStripInsertHand(user, target, held, handName)) + return; + _handsSystem.TryDrop(user, checkActionBlocker: false, handsComp: user.Comp); _handsSystem.TryPickup(target, held, handName, checkActionBlocker: false, animateUser: stealth, animate: stealth, handsComp: target.Comp); _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has placed the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s hands"); @@ -542,7 +544,7 @@ private void StartStripRemoveHand( var (time, stealth) = GetStripTimeModifiers(user, target, targetStrippable.HandStripDelay); if (!stealth) - _popupSystem.PopupEntity( Loc.GetString("strippable-component-alert-owner", ("user", Identity.Entity(user, EntityManager)), ("item", item)), target, target); + _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner", ("user", Identity.Entity(user, EntityManager)), ("item", item)), target, target); var prefix = stealth ? "stealthily " : ""; _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}strip the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s hands"); @@ -569,12 +571,16 @@ private void StripRemoveHand( Entity user, Entity target, EntityUid item, + string handName, bool stealth) { if (!Resolve(user, ref user.Comp) || !Resolve(target, ref target.Comp)) return; + if (!CanStripRemoveHand(user, target, item, handName)) + return; + _handsSystem.TryDrop(target, item, checkActionBlocker: false, handsComp: target.Comp); _handsSystem.PickupOrDrop(user, item, animateUser: stealth, animate: stealth, handsComp: user.Comp); _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has stripped the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s hands"); @@ -625,7 +631,7 @@ private void OnStrippableDoAfterFinished(Entity entity, ref Stri { if (ev.InsertOrRemove) StripInsertHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); - else StripRemoveHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.Args.Hidden); + else StripRemoveHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); } } } diff --git a/Content.Shared/Strip/Components/StrippableComponent.cs b/Content.Shared/Strip/Components/StrippableComponent.cs index 8bf09c3f4c6c26..4faca4d8f21c45 100644 --- a/Content.Shared/Strip/Components/StrippableComponent.cs +++ b/Content.Shared/Strip/Components/StrippableComponent.cs @@ -35,11 +35,11 @@ public sealed class StrippingEnsnareButtonPressed : BoundUserInterfaceMessage; public abstract class BaseBeforeStripEvent(TimeSpan initialTime, bool stealth = false) : EntityEventArgs, IInventoryRelayEvent { public readonly TimeSpan InitialTime = initialTime; - public TimeSpan Multiplier = TimeSpan.FromSeconds(1f); + public float Multiplier = 1f; public TimeSpan Additive = TimeSpan.Zero; public bool Stealth = stealth; - public TimeSpan Time => TimeSpan.FromSeconds(MathF.Max(InitialTime.Seconds * Multiplier.Seconds + Additive.Seconds, 0f)); + public TimeSpan Time => TimeSpan.FromSeconds(MathF.Max(InitialTime.Seconds * Multiplier + Additive.Seconds, 0f)); public SlotFlags TargetSlots { get; } = SlotFlags.GLOVES; }