From 979c82443cddfaeda5cfa7712120763a4d1d9d33 Mon Sep 17 00:00:00 2001 From: Regalis Date: Mon, 27 Feb 2017 21:33:42 +0200 Subject: [PATCH] Derp: fixed submarine files not being included in saves if the player saves and quits from the single player lobby --- Subsurface/Source/Utils/SaveUtil.cs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Subsurface/Source/Utils/SaveUtil.cs b/Subsurface/Source/Utils/SaveUtil.cs index b78fee054..83c39e761 100644 --- a/Subsurface/Source/Utils/SaveUtil.cs +++ b/Subsurface/Source/Utils/SaveUtil.cs @@ -28,7 +28,7 @@ namespace Barotrauma Directory.CreateDirectory(tempPath); try { - ClearFolder(tempPath); + ClearFolder(tempPath, new string[] { GameMain.GameSession.Submarine.FilePath }); } catch { @@ -37,7 +37,7 @@ namespace Barotrauma try { - if (Submarine.MainSub != null) + if (Submarine.MainSub != null && Submarine.Loaded.Contains(Submarine.MainSub)) { Submarine.MainSub.FilePath = Path.Combine(tempPath, Submarine.MainSub.Name + ".sub"); Submarine.MainSub.SaveAs(Submarine.MainSub.FilePath); @@ -77,7 +77,7 @@ namespace Barotrauma XDocument doc = ToolBox.TryLoadXml(Path.Combine(TempPath, "gamesession.xml")); - string subPath = Path.Combine(TempPath, ToolBox.GetAttributeString(doc.Root, "submarine", "")); + string subPath = Path.Combine(TempPath, ToolBox.GetAttributeString(doc.Root, "submarine", ""))+".sub"; Submarine selectedMap = new Submarine(subPath, "");// Submarine.Load(); GameMain.GameSession = new GameSession(selectedMap, fileName, doc); @@ -285,19 +285,31 @@ namespace Barotrauma while (DecompressFile(sDir, zipStream, progress)) ; } - private static void ClearFolder(string FolderName) + private static void ClearFolder(string FolderName, string[] ignoredFiles = null) { DirectoryInfo dir = new DirectoryInfo(FolderName); foreach (FileInfo fi in dir.GetFiles()) { + bool ignore = false; + foreach (string ignoredFile in ignoredFiles) + { + if (Path.GetFullPath(fi.FullName).Equals(Path.GetFullPath(ignoredFile))) + { + ignore = true; + break; + } + } + + if (ignore) continue; + fi.IsReadOnly = false; fi.Delete(); } foreach (DirectoryInfo di in dir.GetDirectories()) { - ClearFolder(di.FullName); + ClearFolder(di.FullName, ignoredFiles); di.Delete(); } }