From 586864ee85ed7e513ab40c65b8843730b02c8a7e Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Tue, 20 Dec 2022 16:33:59 +1300 Subject: [PATCH] Cardboard box fixes (#13087) --- .../CardboardBox/CardboardBoxSystem.cs | 53 +++++++++---------- .../Components/EntityStorageComponent.cs | 5 +- .../EntitySystems/EntityStorageSystem.cs | 4 +- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/Content.Server/CardboardBox/CardboardBoxSystem.cs b/Content.Server/CardboardBox/CardboardBoxSystem.cs index c697ed99d5..b482ef9826 100644 --- a/Content.Server/CardboardBox/CardboardBoxSystem.cs +++ b/Content.Server/CardboardBox/CardboardBoxSystem.cs @@ -1,18 +1,17 @@ -using System.Linq; -using Content.Shared.CardboardBox.Components; using Content.Server.Storage.Components; using Content.Server.Storage.EntitySystems; using Content.Shared.CardboardBox; +using Content.Shared.CardboardBox.Components; using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; using Content.Shared.Interaction; using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; +using Content.Shared.Stealth; +using Content.Shared.Stealth.Components; +using Robust.Server.GameObjects; +using Robust.Shared.Containers; using Robust.Shared.Player; using Robust.Shared.Timing; -using Content.Shared.Stealth.Components; -using Content.Shared.Stealth; -using Robust.Shared.Prototypes; namespace Content.Server.CardboardBox; @@ -23,16 +22,15 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedStealthSystem _stealth = default!; [Dependency] private readonly DamageableSystem _damageable = default!; - [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly EntityStorageSystem _storage = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnBeforeStorageClosed); SubscribeLocalEvent(AfterStorageOpen); SubscribeLocalEvent(AfterStorageClosed); SubscribeLocalEvent(OnNoHandInteracted); + SubscribeLocalEvent(OnEntInserted); SubscribeLocalEvent(OnDamage); } @@ -46,26 +44,6 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem _storage.OpenStorage(uid); } - private void OnBeforeStorageClosed(EntityUid uid, CardboardBoxComponent component, StorageBeforeCloseEvent args) - { - var mobMover = args.Contents.Where(HasComp).ToList(); - - //Grab the first mob to set as the mover and to prevent other mobs from entering. - foreach (var mover in mobMover) - { - //Set the movement relay for the box as the first mob - if (component.Mover == null) - { - var relay = EnsureComp(mover); - _mover.SetRelay(mover, uid, relay); - component.Mover = mover; - } - - if (mover != component.Mover) - args.Contents.Remove(mover); - } - } - private void AfterStorageOpen(EntityUid uid, CardboardBoxComponent component, StorageAfterOpenEvent args) { //Remove the mover after the box is opened and play the effect if it hasn't been played yet. @@ -104,4 +82,23 @@ public sealed class CardboardBoxSystem : SharedCardboardBoxSystem _damageable.TryChangeDamage(component.Mover, args.DamageDelta, origin: args.Origin); } } + + private void OnEntInserted(EntityUid uid, CardboardBoxComponent component, EntInsertedIntoContainerMessage args) + { + if (!TryComp(args.Entity, out MobMoverComponent? mover)) + return; + + if (component.Mover != null) + { + // player movers take priority + if (HasComp(component.Mover) || !HasComp(args.Entity)) + return; + + RemComp(component.Mover.Value); + } + + var relay = EnsureComp(args.Entity); + _mover.SetRelay(args.Entity, uid, relay); + component.Mover = args.Entity; + } } diff --git a/Content.Server/Storage/Components/EntityStorageComponent.cs b/Content.Server/Storage/Components/EntityStorageComponent.cs index 8d33c163a6..ce0ad41c74 100644 --- a/Content.Server/Storage/Components/EntityStorageComponent.cs +++ b/Content.Server/Storage/Components/EntityStorageComponent.cs @@ -118,8 +118,6 @@ public sealed class StorageAfterOpenEvent : EventArgs { } public sealed class StorageCloseAttemptEvent : CancellableEntityEventArgs { } public sealed class StorageBeforeCloseEvent : EventArgs { - public EntityUid Container; - public HashSet Contents; /// @@ -127,9 +125,8 @@ public sealed class StorageBeforeCloseEvent : EventArgs /// public HashSet BypassChecks = new(); - public StorageBeforeCloseEvent(EntityUid container, HashSet contents) + public StorageBeforeCloseEvent(HashSet contents) { - Container = container; Contents = contents; } } diff --git a/Content.Server/Storage/EntitySystems/EntityStorageSystem.cs b/Content.Server/Storage/EntitySystems/EntityStorageSystem.cs index 8d56e3de78..649d082552 100644 --- a/Content.Server/Storage/EntitySystems/EntityStorageSystem.cs +++ b/Content.Server/Storage/EntitySystems/EntityStorageSystem.cs @@ -178,8 +178,8 @@ public sealed class EntityStorageSystem : EntitySystem var entities = _lookup.GetEntitiesInRange(targetCoordinates, component.EnteringRange, LookupFlags.Approximate | LookupFlags.Dynamic | LookupFlags.Sundries); - var ev = new StorageBeforeCloseEvent(uid, entities); - RaiseLocalEvent(uid, ev, true); + var ev = new StorageBeforeCloseEvent(entities); + RaiseLocalEvent(uid, ev); var count = 0; foreach (var entity in ev.Contents) {