]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add more centcomm spawning logs (#22726)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Tue, 19 Dec 2023 01:35:31 +0000 (20:35 -0500)
committerGitHub <noreply@github.com>
Tue, 19 Dec 2023 01:35:31 +0000 (12:35 +1100)
Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs
Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs
Content.Server/Shuttles/Components/StationCentcommComponent.cs
Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs
Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs

index 09affe2e5c88212ad511f1842a6611b6b0676e1a..ad0d409a4b3045bd8a60df564eb2074087ef8995 100644 (file)
@@ -455,9 +455,7 @@ namespace Content.Server.Atmos.EntitySystems
                     || TerminatingOrDeleted(x.MapUid.Value)
                     || x.MapID == MapId.Nullspace)
                 {
-                    Log.Error($"Attempting to process atmos without a map? Entity: {ToPrettyString(owner)}");
-                    _simulationPaused = false;
-                    _currentRunAtmosphere.Clear();
+                    Log.Error($"Attempted to process atmos without a map? Entity: {ToPrettyString(owner)}. Map: {ToPrettyString(x?.MapUid)}. MapId: {x?.MapID}");
                     continue;
                 }
 
index c1773b3140c610aa5fcc0c8362418d7e15d45238..dd5c61a22984d63d9245e5c92d6b06d2704ea5d3 100644 (file)
@@ -383,7 +383,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
                 continue;
 
             // UH OH
-            if (centcomms.Contains(nukeTransform.MapID))
+            if (nukeTransform.MapUid != null && centcomms.Contains(nukeTransform.MapUid.Value))
             {
                 component.WinConditions.Add(WinCondition.NukeActiveAtCentCom);
                 SetWinType(uid, WinType.OpsMajor, component);
@@ -447,8 +447,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
 
         while (diskQuery.MoveNext(out _, out var transform))
         {
-            var diskMapId = transform.MapID;
-            diskAtCentCom = centcomms.Contains(diskMapId);
+            diskAtCentCom = transform.MapUid != null && centcomms.Contains(transform.MapUid.Value);
 
             // TODO: The target station should be stored, and the nuke disk should store its original station.
             // This is fine for now, because we can assume a single station in base SS14.
index 43b35ebc50c58c055e02855e6cd0397601c79401..4ea7d313a1fa60b52191700041f3b361b0102212 100644 (file)
@@ -12,17 +12,18 @@ public sealed partial class StationCentcommComponent : Component
     /// <summary>
     /// Crude shuttle offset spawning.
     /// </summary>
-    [DataField("shuttleIndex")]
+    [DataField]
     public float ShuttleIndex;
 
-    [DataField("map")]
+    [DataField]
     public ResPath Map = new("/Maps/centcomm.yml");
 
     /// <summary>
     /// Centcomm entity that was loaded.
     /// </summary>
-    [DataField("entity")]
-    public EntityUid Entity = EntityUid.Invalid;
+    [DataField]
+    public EntityUid? Entity;
 
-    public MapId MapId = MapId.Nullspace;
+    [DataField]
+    public EntityUid? MapEntity;
 }
index 62478082d88a4a8c6974dbda9022299f252c078e..b1f2758fe40305e429423a84a685ee0099bbabb2 100644 (file)
@@ -166,18 +166,19 @@ public sealed partial class EmergencyShuttleSystem
                     continue;
                 }
 
-                if (Deleted(centcomm.Entity))
+                if (!Deleted(centcomm.Entity))
                 {
-                    // TODO: Need to get non-overlapping positions.
                     _shuttle.FTLTravel(comp.EmergencyShuttle.Value, shuttle,
-                        new EntityCoordinates(
-                            _mapManager.GetMapEntityId(centcomm.MapId),
-                            _random.NextVector2(1000f)), _consoleAccumulator, TransitTime);
+                        centcomm.Entity.Value, _consoleAccumulator, TransitTime, true);
+                    continue;
                 }
-                else
+
+                if (!Deleted(centcomm.MapEntity))
                 {
+                    // TODO: Need to get non-overlapping positions.
                     _shuttle.FTLTravel(comp.EmergencyShuttle.Value, shuttle,
-                        centcomm.Entity, _consoleAccumulator, TransitTime, true);
+                        new EntityCoordinates(centcomm.MapEntity.Value,
+                            _random.NextVector2(1000f)), _consoleAccumulator, TransitTime);
                 }
             }
 
@@ -205,7 +206,7 @@ public sealed partial class EmergencyShuttleSystem
             }
 
             // Don't dock them. If you do end up doing this then stagger launch.
-            _shuttle.FTLTravel(uid, shuttle, centcomm.Entity, hyperspaceTime: TransitTime);
+            _shuttle.FTLTravel(uid, shuttle, centcomm.Entity.Value, hyperspaceTime: TransitTime);
             RemCompDeferred<EscapePodComponent>(uid);
         }
 
@@ -229,7 +230,7 @@ public sealed partial class EmergencyShuttleSystem
                 if (Deleted(comp.Entity))
                     continue;
 
-                _shuttle.AddFTLDestination(comp.Entity, true);
+                _shuttle.AddFTLDestination(comp.Entity.Value, true);
             }
         }
     }
index 0f2b8b847c7b85eb4835de3fde5b92e110554556..a0b9c9599c55b8fc96baf384b602f02d361e1012 100644 (file)
@@ -20,8 +20,6 @@ using Content.Shared.Tag;
 using Content.Shared.Tiles;
 using Robust.Server.GameObjects;
 using Robust.Server.Maps;
-using Robust.Server.Player;
-using Robust.Shared.Audio;
 using Robust.Shared.Audio.Systems;
 using Robust.Shared.Configuration;
 using Robust.Shared.Map;
@@ -89,13 +87,15 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem
 
     private void OnCentcommShutdown(EntityUid uid, StationCentcommComponent component, ComponentShutdown args)
     {
-        QueueDel(component.Entity);
-        component.Entity = EntityUid.Invalid;
-
-        if (_mapManager.MapExists(component.MapId))
-            _mapManager.DeleteMap(component.MapId);
+        ClearCentcomm(component);
+    }
 
-        component.MapId = MapId.Nullspace;
+    private void ClearCentcomm(StationCentcommComponent component)
+    {
+        QueueDel(component.Entity);
+        QueueDel(component.MapEntity);
+        component.Entity = null;
+        component.MapEntity = null;
     }
 
     private void SetEmergencyShuttleEnabled(bool value)
@@ -232,7 +232,7 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem
         // Post mapinit? fancy
         if (TryComp<TransformComponent>(component.Entity, out var xform))
         {
-            component.MapId = xform.MapID;
+            component.MapEntity = xform.MapUid;
             return;
         }
 
@@ -293,46 +293,78 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem
 
     private void AddCentcomm(StationCentcommComponent component)
     {
+        if (component.MapEntity != null || component.Entity != null)
+        {
+            _sawmill.Warning("Attempted to re-add an existing centcomm map.");
+            return;
+        }
+
         // Check for existing centcomms and just point to that
         var query = AllEntityQuery<StationCentcommComponent>();
-
         while (query.MoveNext(out var otherComp))
         {
             if (otherComp == component)
                 continue;
 
-            component.MapId = otherComp.MapId;
+            if (!Exists(otherComp.MapEntity) || !Exists(otherComp.Entity))
+            {
+                Log.Error($"Disconvered invalid centcomm component?");
+                ClearCentcomm(otherComp);
+                continue;
+            }
+
+            component.MapEntity = otherComp.MapEntity;
             component.ShuttleIndex = otherComp.ShuttleIndex;
             return;
         }
 
+        if (string.IsNullOrEmpty(component.Map.ToString()))
+        {
+            _sawmill.Warning("No CentComm map found, skipping setup.");
+            return;
+        }
+
         var mapId = _mapManager.CreateMap();
-        component.MapId = mapId;
+        var grid = _map.LoadGrid(mapId, component.Map.ToString());
+        var map = _mapManager.GetMapEntityId(mapId);
 
-        if (!string.IsNullOrEmpty(component.Map.ToString()))
+        if (!Exists(map))
         {
-            var ent = _map.LoadGrid(mapId, component.Map.ToString());
+            Log.Error($"Failed to set up centcomm map!");
+            QueueDel(grid);
+            return;
+        }
 
-            if (ent != null)
-            {
-                component.Entity = ent.Value;
-                _shuttle.AddFTLDestination(ent.Value, false);
-            }
+        if (!Exists(grid))
+        {
+            Log.Error($"Failed to set up centcomm grid!");
+            QueueDel(map);
+            return;
         }
-        else
+
+        var xform = Transform(grid.Value);
+        if (xform.ParentUid != map || xform.MapUid != map)
         {
-            _sawmill.Warning("No CentComm map found, skipping setup.");
+            Log.Error($"Centcomm grid is not parented to its own map?");
+            QueueDel(map);
+            QueueDel(grid);
+            return;
         }
+
+        component.MapEntity = map;
+        component.Entity = grid;
+        _shuttle.AddFTLDestination(grid.Value, false);
     }
 
-    public HashSet<MapId> GetCentcommMaps()
+    public HashSet<EntityUid> GetCentcommMaps()
     {
         var query = AllEntityQuery<StationCentcommComponent>();
-        var maps = new HashSet<MapId>(Count<StationCentcommComponent>());
+        var maps = new HashSet<EntityUid>(Count<StationCentcommComponent>());
 
         while (query.MoveNext(out var comp))
         {
-            maps.Add(comp.MapId);
+            if (comp.MapEntity != null)
+                maps.Add(comp.MapEntity.Value);
         }
 
         return maps;
@@ -342,14 +374,15 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem
     {
         if (!_emergencyShuttleEnabled
             || component.EmergencyShuttle != null ||
-            !TryComp<StationCentcommComponent>(uid, out var centcomm))
+            !TryComp<StationCentcommComponent>(uid, out var centcomm)
+            || !TryComp(centcomm.MapEntity, out MapComponent? map))
         {
             return;
         }
 
         // Load escape shuttle
         var shuttlePath = component.EmergencyShuttlePath;
-        var shuttle = _map.LoadGrid(centcomm.MapId, shuttlePath.ToString(), new MapLoadOptions()
+        var shuttle = _map.LoadGrid(map.MapId, shuttlePath.ToString(), new MapLoadOptions()
         {
             // Should be far enough... right? I'm too lazy to bounds check CentCom rn.
             Offset = new Vector2(500f + centcomm.ShuttleIndex, 0f)
@@ -368,7 +401,7 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem
 
         while (query.MoveNext(out var comp))
         {
-            if (comp == centcomm || comp.MapId != centcomm.MapId)
+            if (comp == centcomm || comp.MapEntity != centcomm.MapEntity)
                 continue;
 
             comp.ShuttleIndex = centcomm.ShuttleIndex;