]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix empty atmos deserialization (#26540)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Fri, 29 Mar 2024 23:58:12 +0000 (12:58 +1300)
committerGitHub <noreply@github.com>
Fri, 29 Mar 2024 23:58:12 +0000 (10:58 +1100)
Fix atmos deserialization

Content.Server/Atmos/Serialization/TileAtmosCollectionSerializer.cs

index 71e4c2d0def536047b49c479c364b38e2e90ecf0..00be83e86d941dd2d7004e46c0a4051527be2420 100644 (file)
@@ -26,7 +26,7 @@ public sealed partial class TileAtmosCollectionSerializer : ITypeSerializer<Dict
     {
         node.TryGetValue(new ValueDataNode("version"), out var versionNode);
         var version = ((ValueDataNode?) versionNode)?.AsInt() ?? 1;
-        Dictionary<Vector2i, TileAtmosphere> tiles;
+        Dictionary<Vector2i, TileAtmosphere> tiles = new();
 
         // Backwards compatability
         if (version == 1)
@@ -36,8 +36,6 @@ public sealed partial class TileAtmosCollectionSerializer : ITypeSerializer<Dict
             var mixies = serializationManager.Read<Dictionary<Vector2i, int>?>(tile2, hookCtx, context);
             var unique = serializationManager.Read<List<GasMixture>?>(node["uniqueMixes"], hookCtx, context);
 
-            tiles = new Dictionary<Vector2i, TileAtmosphere>();
-
             if (unique != null && mixies != null)
             {
                 foreach (var (indices, mix) in mixies)
@@ -58,15 +56,14 @@ public sealed partial class TileAtmosCollectionSerializer : ITypeSerializer<Dict
         else
         {
             var dataNode = (MappingDataNode) node["data"];
-            var tileNode = (MappingDataNode) dataNode["tiles"];
             var chunkSize = serializationManager.Read<int>(dataNode["chunkSize"], hookCtx, context);
 
-            var unique = serializationManager.Read<List<GasMixture>?>(dataNode["uniqueMixes"], hookCtx, context);
-
-            tiles = new Dictionary<Vector2i, TileAtmosphere>();
+            dataNode.TryGetValue(new ValueDataNode("uniqueMixes"), out var mixNode);
+            var unique = mixNode == null ? null : serializationManager.Read<List<GasMixture>?>(mixNode, hookCtx, context);
 
             if (unique != null)
             {
+                var tileNode = (MappingDataNode) dataNode["tiles"];
                 foreach (var (chunkNode, valueNode) in tileNode)
                 {
                     var chunkOrigin = serializationManager.Read<Vector2i>(chunkNode, hookCtx, context);