Ejemplo n.º 1
0
 /// <summary>See <see cref="IDisposable.Dispose"/>.</summary>
 public void Dispose()
 {
     if (reader != null)
     {
         reader.Dispose();
     }
 }
        /// <summary>
        /// Releases all resources used by this object
        /// </summary>
        /// <param name="disposing">True if this method was called from
        ///    <Typ>/System.IDisposable.Dispose</Typ></param>
        protected override void Dispose(bool disposing)
        {
            try
            {
                if (m_isDisposed)
                {
                    return;
                }

                if (m_spPackageReader != null)
                {
                    m_spPackageReader.Dispose();
                    m_spPackageReader = null;
                    m_isDisposed      = true;
                }
            }
            finally
            {
                base.Dispose(disposing);
            }
        }
Ejemplo n.º 3
0
 public void Dispose()
 {
     PackageStream?.Dispose();
     PackageReader?.Dispose();
 }
Ejemplo n.º 4
0
        private void SaveSavegameDatabase()
        {
            var     packageReader = new PackageReader(storyFilePath.Text);
            Package package       = packageReader.Read();

            AbstractFileInfo globalsLsf = package.Files.FirstOrDefault(p => p.Name == "globals.lsf");

            if (globalsLsf == null)
            {
                MessageBox.Show("The specified package is not a valid savegame (globals.lsf not found)", "Load Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // Load globals.lsf
            Resource resource;
            Stream   rsrcStream = globalsLsf.MakeStream();

            try
            {
                using (var rsrcReader = new LSFReader(rsrcStream))
                {
                    resource = rsrcReader.Read();
                }
            }
            finally
            {
                globalsLsf.ReleaseStream();
            }

            // Save story resource and pack into the Story.Story attribute in globals.lsf
            using (var storyStream = new MemoryStream())
            {
                var storyWriter = new StoryWriter();
                storyWriter.Write(storyStream, _story);

                LSLib.LS.Node storyNode = resource.Regions["Story"].Children["Story"][0];
                storyNode.Attributes["Story"].Value = storyStream.ToArray();
            }

            // Save globals.lsf
            var rewrittenStream = new MemoryStream();
            // TODO: Resave using original version
            var rsrcWriter = new LSFWriter(rewrittenStream, FileVersion.CurrentVersion);

            rsrcWriter.Write(resource);
            rewrittenStream.Seek(0, SeekOrigin.Begin);

            // Re-package global.lsf
            var            rewrittenPackage = new Package();
            StreamFileInfo globalsRepacked  = StreamFileInfo.CreateFromStream(rewrittenStream, "globals.lsf");

            rewrittenPackage.Files.Add(globalsRepacked);

            List <AbstractFileInfo> files = package.Files.Where(x => x.Name != "globals.lsf").ToList();

            rewrittenPackage.Files.AddRange(files);

            using (var packageWriter = new PackageWriter(rewrittenPackage, $"{storyFilePath.Text}.tmp"))
            {
                // TODO: Resave using original version and flags
                packageWriter.Version          = PackageVersion.V13;
                packageWriter.Compression      = CompressionMethod.Zlib;
                packageWriter.CompressionLevel = CompressionLevel.DefaultCompression;
                packageWriter.Write();
            }

            rewrittenStream.Dispose();
            packageReader.Dispose();

            // Create a backup of the original .lsf
            string backupPath = $"{storyFilePath.Text}.backup";

            if (!File.Exists(backupPath))
            {
                File.Move(storyFilePath.Text, backupPath);
            }
            else
            {
                File.Delete(storyFilePath.Text);
            }

            // Replace original savegame with new one
            File.Move($"{storyFilePath.Text}.tmp", storyFilePath.Text);
        }