]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fixed Emag wiping door access without bolting open (#25836)
authorexincore <me@exin.xyz>
Tue, 5 Mar 2024 07:20:38 +0000 (01:20 -0600)
committerGitHub <noreply@github.com>
Tue, 5 Mar 2024 07:20:38 +0000 (18:20 +1100)
Content.Shared/Doors/Systems/SharedDoorSystem.cs

index da6a91aff2deb2047bc0e18c9b23e881b37b6f32..b58b7b265e9aba9112161de5b8ccb4f43f6a6f3c 100644 (file)
@@ -81,6 +81,7 @@ public abstract partial class SharedDoorSystem : EntitySystem
         SubscribeLocalEvent<DoorComponent, WeldableChangedEvent>(OnWeldChanged);
         SubscribeLocalEvent<DoorComponent, GetPryTimeModifierEvent>(OnPryTimeModifier);
 
+        SubscribeLocalEvent<DoorComponent, OnAttemptEmagEvent>(OnAttemptEmag);
         SubscribeLocalEvent<DoorComponent, GotEmaggedEvent>(OnEmagged);
     }
 
@@ -120,23 +121,34 @@ public abstract partial class SharedDoorSystem : EntitySystem
         _activeDoors.Remove(door);
     }
 
-    private void OnEmagged(EntityUid uid, DoorComponent door, ref GotEmaggedEvent args)
+    private void OnAttemptEmag(EntityUid uid, DoorComponent door, ref OnAttemptEmagEvent args)
     {
         if (!TryComp<AirlockComponent>(uid, out var airlock))
+        {
+            args.Handled = true;
             return;
+        }
 
         if (IsBolted(uid) || !airlock.Powered)
+        {
+            args.Handled = true;
             return;
+        }
 
-        if (door.State == DoorState.Closed)
+        if (door.State != DoorState.Closed)
         {
-            if (!SetState(uid, DoorState.Emagging, door))
-                return;
-            Audio.PlayPredicted(door.SparkSound, uid, args.UserUid, AudioParams.Default.WithVolume(8));
             args.Handled = true;
         }
     }
 
+    private void OnEmagged(EntityUid uid, DoorComponent door, ref GotEmaggedEvent args)
+    {
+        if (!SetState(uid, DoorState.Emagging, door))
+            return;
+        Audio.PlayPredicted(door.SparkSound, uid, args.UserUid, AudioParams.Default.WithVolume(8));
+        args.Handled = true;
+    }
+
     #region StateManagement
     private void OnHandleState(Entity<DoorComponent> ent, ref AfterAutoHandleStateEvent args)
     {