]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Removes clown abuse (#15145)
authorkeronshb <54602815+keronshb@users.noreply.github.com>
Wed, 5 Apr 2023 22:44:26 +0000 (18:44 -0400)
committerGitHub <noreply@github.com>
Wed, 5 Apr 2023 22:44:26 +0000 (16:44 -0600)
Content.Server/Climbing/ClimbSystem.cs
Content.Shared/Climbing/BonkSystem.cs
Content.Shared/Climbing/BonkableComponent.cs

index 82e41d66cef2a5cbd88c4b96b11634b6a13cbabc..4dc89219102b2091238bfea1dfb40acf6f7f2237 100644 (file)
@@ -41,7 +41,6 @@ public sealed class ClimbSystem : SharedClimbSystem
     [Dependency] private readonly InteractionSystem _interactionSystem = default!;
     [Dependency] private readonly StunSystem _stunSystem = default!;
     [Dependency] private readonly SharedPhysicsSystem _physics = default!;
-    [Dependency] private readonly BonkSystem _bonkSystem = default!;
 
     private const string ClimbingFixtureName = "climb";
     private const int ClimbingCollisionGroup = (int) (CollisionGroup.TableLayer | CollisionGroup.LowImpassable);
@@ -110,9 +109,6 @@ public sealed class ClimbSystem : SharedClimbSystem
         if (!TryComp(entityToMove, out ClimbingComponent? climbingComponent) || climbingComponent.IsClimbing)
             return;
 
-        if (_bonkSystem.TryBonk(entityToMove, climbable))
-            return;
-
         var args = new DoAfterArgs(user, component.ClimbDelay, new ClimbDoAfterEvent(), entityToMove, target: climbable, used: entityToMove)
         {
             BreakOnTargetMove = true,
index 02c3686041a6f2653e9b2529b1af0c2d35d2d207..1a68f9cf08ac5ee86a8b7bc66a41b04044710fce 100644 (file)
@@ -2,11 +2,13 @@ using Content.Shared.Interaction;
 using Content.Shared.Stunnable;
 using Content.Shared.CCVar;
 using Content.Shared.Damage;
+using Content.Shared.DoAfter;
 using Content.Shared.DragDrop;
 using Robust.Shared.Configuration;
 using Content.Shared.Popups;
 using Content.Shared.IdentityManagement;
 using Robust.Shared.Player;
+using Robust.Shared.Serialization;
 
 namespace Content.Shared.Climbing;
 
@@ -18,13 +20,26 @@ public sealed class BonkSystem : EntitySystem
     [Dependency] private readonly SharedStunSystem _stunSystem = default!;
     [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
     [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
+    [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
 
     public override void Initialize()
     {
         base.Initialize();
         SubscribeLocalEvent<BonkableComponent, DragDropTargetEvent>(OnDragDrop);
+        SubscribeLocalEvent<BonkableComponent, BonkDoAfterEvent>(OnBonkDoAfter);
     }
 
+    private void OnBonkDoAfter(EntityUid uid, BonkableComponent component, BonkDoAfterEvent args)
+    {
+        if (args.Handled || args.Cancelled || args.Args.Target == null)
+            return;
+
+        TryBonk(args.Args.User, uid, component);
+
+        args.Handled = true;
+    }
+
+
     public bool TryBonk(EntityUid user, EntityUid bonkableUid, BonkableComponent? bonkableComponent = null)
     {
         if (!Resolve(bonkableUid, ref bonkableComponent, false))
@@ -55,8 +70,25 @@ public sealed class BonkSystem : EntitySystem
 
     }
 
-    private void OnDragDrop(EntityUid uid, BonkableComponent bonkableComponent, ref DragDropTargetEvent args)
+    private void OnDragDrop(EntityUid uid, BonkableComponent component, ref DragDropTargetEvent args)
+    {
+        if (args.Handled)
+            return;
+
+        var doAfterArgs = new DoAfterArgs(args.Dragged, component.BonkDelay, new BonkDoAfterEvent(), uid, target: uid)
+        {
+            BreakOnTargetMove = true,
+            BreakOnUserMove = true,
+            BreakOnDamage = true
+        };
+
+        _doAfter.TryStartDoAfter(doAfterArgs);
+
+        args.Handled = true;
+    }
+
+    [Serializable, NetSerializable]
+    private sealed class BonkDoAfterEvent : SimpleDoAfterEvent
     {
-        TryBonk(args.Dragged, uid);
     }
 }
index 63f4f8c73968b90daad73171fef0fdfab9d206ab..7fccde5bc4c72a9a1b4073b67d9cced8980477ca 100644 (file)
@@ -37,4 +37,10 @@ public sealed class BonkableComponent : Component
     /// <seealso cref="Bonk"/>
     [DataField("bonkDamage")]
     public DamageSpecifier? BonkDamage;
+
+    /// <summary>
+    /// How long it takes to bonk.
+    /// </summary>
+    [DataField("bonkDelay")]
+    public float BonkDelay = 0.8f;
 }