diff --git a/Content.Server/Salvage/SalvageSystem.Magnet.cs b/Content.Server/Salvage/SalvageSystem.Magnet.cs index 988c5da797..694186da9a 100644 --- a/Content.Server/Salvage/SalvageSystem.Magnet.cs +++ b/Content.Server/Salvage/SalvageSystem.Magnet.cs @@ -19,12 +19,14 @@ public sealed partial class SalvageSystem private const string MagnetChannel = "Supply"; private EntityQuery _salvMobQuery; + private EntityQuery _mobStateQuery; private List<(Entity Entity, EntityUid MapUid, Vector2 LocalPosition)> _detachEnts = new(); private void InitializeMagnet() { _salvMobQuery = GetEntityQuery(); + _mobStateQuery = GetEntityQuery(); SubscribeLocalEvent(OnMagnetDataMapInit); @@ -155,6 +157,21 @@ public sealed partial class SalvageSystem if (_salvMobQuery.HasComp(mobUid)) continue; + bool CheckParents(EntityUid uid) + { + do + { + uid = _transform.GetParentUid(uid); + if (_mobStateQuery.HasComp(uid)) + return true; + } + while (uid != xform.GridUid && uid != EntityUid.Invalid); + return false; + } + + if (CheckParents(mobUid)) + continue; + // Can't parent directly to map as it runs grid traversal. _detachEnts.Add(((mobUid, xform), xform.MapUid.Value, _transform.GetWorldPosition(xform))); _transform.DetachEntity(mobUid, xform);