private static bool SaveSim(WorldGenSettings settings, Data data, Action <OfflineWorldGen.ErrorInfo> error_cb) { try { Manager.Clear(); SimSaveFileStructure simSaveFileStructure = new SimSaveFileStructure(); for (int i = 0; i < data.overworldCells.Count; i++) { simSaveFileStructure.worldDetail.overworldCells.Add(new WorldDetailSave.OverworldCell(SettingsCache.GetCachedSubWorld(data.overworldCells[i].node.type).zoneType, data.overworldCells[i])); } simSaveFileStructure.worldDetail.globalWorldSeed = data.globalWorldSeed; simSaveFileStructure.worldDetail.globalWorldLayoutSeed = data.globalWorldLayoutSeed; simSaveFileStructure.worldDetail.globalTerrainSeed = data.globalTerrainSeed; simSaveFileStructure.worldDetail.globalNoiseSeed = data.globalNoiseSeed; simSaveFileStructure.WidthInCells = Grid.WidthInCells; simSaveFileStructure.HeightInCells = Grid.HeightInCells; using (MemoryStream memoryStream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(memoryStream)) { Sim.Save(writer); } simSaveFileStructure.Sim = memoryStream.ToArray(); } using (MemoryStream memoryStream2 = new MemoryStream()) { using (BinaryWriter writer2 = new BinaryWriter(memoryStream2)) { try { Serializer.Serialize(simSaveFileStructure, writer2); } catch (Exception ex) { DebugUtil.LogErrorArgs("Couldn't serialize", ex.Message, ex.StackTrace); } } using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(WorldGen.SIM_SAVE_FILENAME, FileMode.Create))) { Manager.SerializeDirectory(binaryWriter); binaryWriter.Write(memoryStream2.ToArray()); } } return(true); } catch (Exception ex2) { error_cb(new OfflineWorldGen.ErrorInfo { errorDesc = string.Format(UI.FRONTEND.SUPPORTWARNINGS.SAVE_DIRECTORY_READ_ONLY, WorldGen.SIM_SAVE_FILENAME), exception = ex2 }); DebugUtil.LogErrorArgs("Couldn't write", ex2.Message, ex2.StackTrace); return(false); } }