]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix StrippableSystem blunders (#26166)
authorKrunklehorn <42424291+Krunklehorn@users.noreply.github.com>
Sat, 16 Mar 2024 03:50:53 +0000 (23:50 -0400)
committerGitHub <noreply@github.com>
Sat, 16 Mar 2024 03:50:53 +0000 (14:50 +1100)
* 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
Content.Shared/Strip/Components/StrippableComponent.cs

index 950411a8e2cbf86717e91723440097ef3625f054..3b38b65a19d5f094a7b5c13d0b2cb5e19bf4bb98 100644 (file)
@@ -122,13 +122,12 @@ namespace Content.Server.Strip
         private void OnStripButtonPressed(Entity<StrippableComponent> strippable, ref StrippingSlotButtonPressed args)
         {
             if (args.Session.AttachedEntity is not { Valid: true } user ||
-                !TryComp<HandsComponent>(user, out var userHands) ||
-                !TryComp<HandsComponent>(strippable.Owner, out var targetHands))
+                !TryComp<HandsComponent>(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 @@ namespace Content.Server.Strip
                 !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 @@ namespace Content.Server.Strip
             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 @@ namespace Content.Server.Strip
             Entity<HandsComponent?> user,
             Entity<HandsComponent?> 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 @@ namespace Content.Server.Strip
             {
                 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);
             }
         }
     }
index 8bf09c3f4c6c2659999197282716c031f7abb237..4faca4d8f21c45a6d514fad17f1c785978b489c5 100644 (file)
@@ -35,11 +35,11 @@ namespace Content.Shared.Strip.Components
     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;
     }