From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 7 Jan 2024 06:40:49 +0000 (+1100) Subject: Fix magnet despawning deletion (#23657) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=0fc5bf5546e238176b213040516372b2ae2729ff;p=space-station-14.git Fix magnet despawning deletion (#23657) Silly mechanic. --- diff --git a/Content.Server/Salvage/SalvageSystem.Magnet.cs b/Content.Server/Salvage/SalvageSystem.Magnet.cs index 27eee5360e..2a5e15a363 100644 --- a/Content.Server/Salvage/SalvageSystem.Magnet.cs +++ b/Content.Server/Salvage/SalvageSystem.Magnet.cs @@ -18,6 +18,8 @@ public sealed partial class SalvageSystem private EntityQuery _salvMobQuery; + private List<(Entity Entity, EntityUid MapUid)> _detachEnts = new(); + private void InitializeMagnet() { _salvMobQuery = GetEntityQuery(); @@ -134,13 +136,16 @@ public sealed partial class SalvageSystem // Uhh yeah don't delete mobs or whatever var mobQuery = AllEntityQuery(); + _detachEnts.Clear(); while (mobQuery.MoveNext(out var mobUid, out _, out _, out var xform)) { if (xform.GridUid == null || !data.Comp.ActiveEntities.Contains(xform.GridUid.Value) || xform.MapUid == null) continue; - _transform.SetParent(mobUid, xform.MapUid.Value); + // Can't parent directly to map as it runs grid traversal. + _detachEnts.Add(((mobUid, xform), xform.MapUid.Value)); + _transform.DetachParentToNull(mobUid, xform); } // Go and cleanup the active ents. @@ -149,6 +154,11 @@ public sealed partial class SalvageSystem Del(ent); } + foreach (var entity in _detachEnts) + { + _transform.SetParent(entity.Entity.Owner, entity.Entity.Comp, entity.MapUid); + } + data.Comp.ActiveEntities = null; }