Exemplo n.º 1
0
 private void openPkg(string filename)
 {
     using (var fs = File.OpenRead(filename))
     {
         var pkg = new LibOrbisPkg.PKG.PkgReader(fs).ReadHeader();
         OpenTab(new Views.ObjectView(pkg), Path.GetFileName(filename));
     }
 }
Exemplo n.º 2
0
        private void LoadPackage(string filename)
        {
            if (state.Loaded)
            {
                Unload();
            }
            var pkgFile = GameArchives.Util.LocalFile(filename);


            if (filename.EndsWith(".pkg"))
            {
                try
                {
                    string contentId;
                    using (var tempS = pkgFile.GetStream())
                    {
                        var hdr = new LibOrbisPkg.PKG.PkgReader(tempS).ReadHeader();
                        contentId = hdr.content_id;
                    }
                    state.pkg = GameArchives.PackageReader.ReadPackageFromFile(pkgFile,
                                                                               new string(LibOrbisPkg.Util.Crypto.ComputeKeys(
                                                                                              contentId, "00000000000000000000000000000000", 1)
                                                                                          .Select(b => (char)b).ToArray()));
                }
                catch (Exception) { }
            }
            else
            {
                state.pkg = GameArchives.PackageReader.ReadPackageFromFile(pkgFile);
            }
            if (state.pkg is GameArchives.PFS.PFSPackage)
            {
                if (state.pkg.RootDirectory.TryGetFile("pfs_image.dat", out var f))
                {
                    state.dispose = state.pkg.Dispose;
                    state.pkg     = GameArchives.PackageReader.ReadPackageFromFile(f);
                }
                if (state.pkg.RootDirectory.TryGetFile("main_ps4.hdr", out var f2))
                {
                    state.dispose = state.pkg.Dispose;
                    state.pkg     = GameArchives.PackageReader.ReadPackageFromFile(f2);
                }
            }
            state.root = state.pkg.RootDirectory;
            SetTitle(filename);
            FinishLoad();
        }
Exemplo n.º 3
0
        private async void CombinePKGPartsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (var ofd = new OpenFileDialog()
            {
                Title = "Select part 0", Filter = "PKG Files (*_0.pkg)|*_0.pkg"
            })
            {
                if (ofd.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                var filenames = new List <string>();
                filenames.Add(ofd.FileName);
                ulong pkgSize       = 0;
                long  remainingSize = 0;
                using (var s = File.OpenRead(filenames[0]))
                {
                    var hdr = new LibOrbisPkg.PKG.PkgReader(s).ReadHeader();
                    pkgSize       = hdr.package_size;
                    remainingSize = (long)hdr.package_size - s.Length;
                }
                if (remainingSize <= 0)
                {
                    MessageBox.Show("Error: reported package size was less than part file size");
                    return;
                }

                // remove the _0.pkg (6 characters) from the filename
                var baseFilename   = filenames[0].Substring(0, filenames[0].Length - 6);
                var targetFilename = baseFilename + ".pkg";
                using (var sfd = new SaveFileDialog()
                {
                    Title = "Select output file",
                    Filter = "PKG Files (*.pkg)|*.pkg",
                    FileName = targetFilename
                })
                {
                    if (sfd.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    targetFilename = sfd.FileName;
                }
                var i = 0;
                while (remainingSize > 0)
                {
                    var newFile = $"{baseFilename}_{++i}.pkg";
                    if (File.Exists(newFile))
                    {
                        filenames.Add(newFile);
                        remainingSize -= new FileInfo(newFile).Length;
                    }
                    else
                    {
                        MessageBox.Show($"Error: missing part {i}, should be {remainingSize} bytes.");
                        return;
                    }
                }

                using (var logWindow = new LogWindow())
                    using (var fo = File.Create(targetFilename))
                    {
                        fo.SetLength((long)pkgSize);
                        logWindow.StartPosition = this.StartPosition;
                        logWindow.Show(this);
                        logWindow.GetWriter().WriteLine($"Merging files to {targetFilename}...");
                        foreach (var fn in filenames)
                        {
                            using (var fi = File.OpenRead(fn))
                            {
                                logWindow.GetWriter().WriteLine($"Copying {fn}");
                                await fi.CopyToAsync(fo);
                            }
                        }
                        logWindow.GetWriter().WriteLine("Done. Saved to " + targetFilename);
                    }
            }
        }