]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix magnet despawning deletion (#23657)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 7 Jan 2024 06:40:49 +0000 (17:40 +1100)
committerGitHub <noreply@github.com>
Sun, 7 Jan 2024 06:40:49 +0000 (23:40 -0700)
Silly mechanic.

Content.Server/Salvage/SalvageSystem.Magnet.cs

index 27eee5360e73b4087b8a42ecadefe63112c0a424..2a5e15a3634ec42dbc9bd4d3487b85ff2aaf6e44 100644 (file)
@@ -18,6 +18,8 @@ public sealed partial class SalvageSystem
 
     private EntityQuery<SalvageMobRestrictionsComponent> _salvMobQuery;
 
+    private List<(Entity<TransformComponent> Entity, EntityUid MapUid)> _detachEnts = new();
+
     private void InitializeMagnet()
     {
         _salvMobQuery = GetEntityQuery<SalvageMobRestrictionsComponent>();
@@ -134,13 +136,16 @@ public sealed partial class SalvageSystem
 
             // Uhh yeah don't delete mobs or whatever
             var mobQuery = AllEntityQuery<HumanoidAppearanceComponent, MobStateComponent, TransformComponent>();
+            _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;
         }