public static bool Prefix(ScribeSaver __instance, string filePath, string documentElementName) { if (!Enable) { return(true); } Loger.Log("ScribeSaver_InitSaving_Patch Start"); var that = Traverse.Create(__instance); if (Scribe.mode != 0) { Log.Error("Called InitSaving() but current mode is " + Scribe.mode); Scribe.ForceStop(); } if (that.Field("curPath").GetValue <string>() != null) { Log.Error("Current path is not null in InitSaving"); that.Field("curPath").SetValue(null); that.Field("savedNodes").GetValue <HashSet <string> >().Clear(); that.Field("nextListElementTemporaryId").SetValue(0); } try { Scribe.mode = LoadSaveMode.Saving; var saveStream = SaveData = new MemoryStream(); //var saveStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None); File.WriteAllText(filePath, "Online save"); that.Field("saveStream").SetValue(saveStream); XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.Indent = true; xmlWriterSettings.IndentChars = "\t"; var writer = XmlWriter.Create(saveStream, xmlWriterSettings); that.Field("writer").SetValue(writer); writer.WriteStartDocument(); __instance.EnterNode(documentElementName); } catch (Exception ex) { Log.Error("Exception while init saving file: " + filePath + "\n" + ex); __instance.ForceStop(); throw; } Loger.Log("ScribeSaver_InitSaving_Patch End"); return(false); }
public static bool EnterNode(string nodeName) { if (mode == LoadSaveMode.Inactive) { return(false); } if (mode == LoadSaveMode.Saving) { return(saver.EnterNode(nodeName)); } if (mode == LoadSaveMode.LoadingVars || mode == LoadSaveMode.ResolvingCrossRefs || mode == LoadSaveMode.PostLoadInit) { return(loader.EnterNode(nodeName)); } return(true); }