]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix salvage sites ejecting borg brains when they despawn (#35855)
authorTayrtahn <tayrtahn@gmail.com>
Sun, 16 Mar 2025 18:15:39 +0000 (14:15 -0400)
committerGitHub <noreply@github.com>
Sun, 16 Mar 2025 18:15:39 +0000 (19:15 +0100)
* Fix salvage sites ejecting borg brains when they despawn

* Extra check in while loop

* Move mobStateQuery to InitializeMagnet

Content.Server/Salvage/SalvageSystem.Magnet.cs

index 988c5da7978cc4a84d422d55853da30ad959e412..694186da9a7ed5b154da414358958f3e3bba3162 100644 (file)
@@ -19,12 +19,14 @@ public sealed partial class SalvageSystem
     private const string MagnetChannel = "Supply";
 
     private EntityQuery<SalvageMobRestrictionsComponent> _salvMobQuery;
+    private EntityQuery<MobStateComponent> _mobStateQuery;
 
     private List<(Entity<TransformComponent> Entity, EntityUid MapUid, Vector2 LocalPosition)> _detachEnts = new();
 
     private void InitializeMagnet()
     {
         _salvMobQuery = GetEntityQuery<SalvageMobRestrictionsComponent>();
+        _mobStateQuery = GetEntityQuery<MobStateComponent>();
 
         SubscribeLocalEvent<SalvageMagnetDataComponent, MapInitEvent>(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);