diff --git a/Content.Shared/Trigger/Components/Effects/LockOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/LockOnTriggerComponent.cs index 38eea0a461..6dbec86c5d 100644 --- a/Content.Shared/Trigger/Components/Effects/LockOnTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/Effects/LockOnTriggerComponent.cs @@ -1,19 +1,27 @@ +using Content.Shared.Lock; using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Trigger.Components.Effects; +/// +/// Will lock, unlock or toggle an entity with the . +/// If TargetUser is true then they will be (un)locked instead. +/// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class LockOnTriggerComponent : BaseXOnTriggerComponent { + /// + /// If the trigger will lock, unlock or toggle the lock. + /// [DataField, AutoNetworkedField] - public LockAction LockOnTrigger = LockAction.Toggle; + public LockAction LockMode = LockAction.Toggle; } [Serializable, NetSerializable] public enum LockAction { - Lock = 0, + Lock = 0, Unlock = 1, Toggle = 2, } diff --git a/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs index 8726ede899..2056d5fe51 100644 --- a/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs @@ -19,16 +19,21 @@ public sealed class LockOnTriggerSystem : EntitySystem if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key)) return; - switch (ent.Comp.LockOnTrigger) + var target = ent.Comp.TargetUser ? args.User : ent.Owner; + + if (!TryComp(target, out var lockComp)) + return; // prevent the Resolve in Lock/Unlock/ToggleLock from logging errors in case the user does not have the component + + switch (ent.Comp.LockMode) { case LockAction.Lock: - _lock.Lock(ent.Owner, args.User); + _lock.Lock(target.Value, args.User, lockComp); break; case LockAction.Unlock: - _lock.Unlock(ent, args.User); + _lock.Unlock(target.Value, args.User, lockComp); break; case LockAction.Toggle: - _lock.ToggleLock(ent, args.User); + _lock.ToggleLock(target.Value, args.User, lockComp); break; } }