From 86fbd285040b5f67b1567c57b235fe19bc0d470e Mon Sep 17 00:00:00 2001 From: Krunklehorn <42424291+Krunklehorn@users.noreply.github.com> Date: Fri, 3 Jul 2026 23:26:26 -0400 Subject: [PATCH] Allow handless mobs to exit containers, make ResistLocker respect OpenOnMove (#37250) reviews Co-authored-by: AJCM-git --- Content.Server/Resist/ResistLockerSystem.cs | 30 +++++++++++-------- .../SharedEntityStorageSystem.cs | 6 ++-- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/Content.Server/Resist/ResistLockerSystem.cs b/Content.Server/Resist/ResistLockerSystem.cs index 15ac927748..24e23e3498 100644 --- a/Content.Server/Resist/ResistLockerSystem.cs +++ b/Content.Server/Resist/ResistLockerSystem.cs @@ -33,7 +33,7 @@ public sealed partial class ResistLockerSystem : EntitySystem if (component.IsResisting) return; - if (!TryComp(uid, out EntityStorageComponent? storageComponent)) + if (!TryComp(uid, out EntityStorageComponent? storageComponent) || !storageComponent.OpenOnMove) return; if (!_actionBlocker.CanMove(args.Entity)) @@ -65,30 +65,34 @@ public sealed partial class ResistLockerSystem : EntitySystem _popupSystem.PopupEntity(Loc.GetString("resist-locker-component-start-resisting"), user, user, PopupType.Large); } + // TODO: Convert to DoAfterAttemptEvent private void OnDoAfter(EntityUid uid, ResistLockerComponent component, DoAfterEvent args) { - if (args.Cancelled) - { - component.IsResisting = false; - _popupSystem.PopupEntity(Loc.GetString("resist-locker-component-resist-interrupted"), args.Args.User, args.Args.User, PopupType.Medium); - return; - } - - if (args.Handled || args.Args.Target == null) + if (args.Handled) return; component.IsResisting = false; - if (HasComp(uid)) + if (args.Target != uid) + return; + + if (args.Cancelled) + { + _popupSystem.PopupEntity(Loc.GetString("resist-locker-component-resist-interrupted"), args.User, args.User, PopupType.Medium); + return; + } + + if (TryComp(uid, out EntityStorageComponent? storageComponent)) { WeldableComponent? weldable = null; if (_weldable.IsWelded(uid, weldable)) _weldable.SetWeldedState(uid, false, weldable); - if (TryComp(args.Args.Target.Value, out var lockComponent)) - _lockSystem.Unlock(uid, args.Args.User, lockComponent); + if (TryComp(uid, out var lockComponent)) + _lockSystem.Unlock(uid, args.User, lockComponent); - _entityStorage.TryOpenStorage(args.Args.User, uid); + if (storageComponent.OpenOnMove) + _entityStorage.TryOpenStorage(args.User, uid); } args.Handled = true; diff --git a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs index dd8079cef6..6ffc743908 100644 --- a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs @@ -115,7 +115,8 @@ public abstract partial class SharedEntityStorageSystem : EntitySystem private void OnRelayMovement(EntityUid uid, EntityStorageComponent component, ref ContainerRelayMovementEntityEvent args) { - if (!HasComp(args.Entity)) + if (!component.Contents.Contains(args.Entity) && + !HasComp(args.Entity)) return; if (!_actionBlocker.CanMove(args.Entity)) @@ -415,7 +416,8 @@ public abstract partial class SharedEntityStorageSystem : EntitySystem if (!Resolve(target, ref component)) return false; - if (!HasComp(user)) + if (!component.Contents.Contains(user) && + !HasComp(user)) return false; if (_weldable.IsWelded(target))