diff --git a/Content.Server/_White/Keyhole/KeyholeSystem.cs b/Content.Server/_White/Keyhole/KeyholeSystem.cs index 7bba988ae4..8a6c92f0cb 100644 --- a/Content.Server/_White/Keyhole/KeyholeSystem.cs +++ b/Content.Server/_White/Keyhole/KeyholeSystem.cs @@ -10,6 +10,9 @@ using Robust.Shared.Random; namespace Content.Server._White.Keyhole; +// TODO: Исправить, что дверь на замке можно разобрать через ее id: DoorGraph +// TODO: Исправить, что при прерывании закрытия девственной двери форма замка принимает форму ключа, хотя закрытия не произошло + public sealed partial class KeyholeSystem : EntitySystem { @@ -66,7 +69,7 @@ public sealed partial class KeyholeSystem : EntitySystem private void OnDoAfter(EntityUid uid, KeyholeComponent component, KeyInsertDoAfterEvent args) { - if (args.Handled || args.Cancelled) + if (args.Handled || args.Cancelled || IsStateChanging(uid)) return; Lock(uid, component, args.User); @@ -74,6 +77,12 @@ public sealed partial class KeyholeSystem : EntitySystem args.Handled = true; } + private bool IsStateChanging(EntityUid uid) + { + return TryComp(uid, out var doorComponent) && + (doorComponent.State == DoorState.Closing || doorComponent.State == DoorState.Opening); + } + private void Lock(EntityUid uid, KeyholeComponent component, EntityUid user) { var sound = component.Locked ? component.UnlockSound : component.LockSound; diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 3400d67d60..d6f7d55b26 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -178,10 +178,11 @@ public abstract class SharedDoorSystem : EntitySystem args.BaseTime = door.PryTime; } - private void OnBeforePry(EntityUid uid, DoorComponent door, ref BeforePryEvent args) + private void OnBeforePry(EntityUid uid, DoorComponent door, ref BeforePryEvent args) // WD edit { - if (door.State == DoorState.Welded || !door.CanPry) - args.Cancelled = true; + args.Cancelled = door.State == DoorState.Welded || + !door.CanPry || + TryComp(uid, out var keyholeComponent) && keyholeComponent.Locked; } /// diff --git a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml index e5473dfa35..84f8edfd14 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml @@ -57,7 +57,6 @@ mode: NoSprite - type: Occluder - type: ReflectAspectMark - - type: Keyhole - type: entity parent: BaseMaterialDoor @@ -65,6 +64,7 @@ abstract: true components: - type: NavMapDoor + - type: Keyhole - type: entity id: MetalDoor