示例#1
0
 /// <summary>
 /// Read a DirectoryRecord from GGPK
 /// </summary>
 public DirectoryRecord(int length, GGPKContainer ggpk)
 {
     ggpkContainer = ggpk;
     Offset        = ggpk.fileStream.Position - 8;
     Length        = length;
     Read();
 }
示例#2
0
 public FreeRecord(int length, GGPKContainer ggpk, long nextFreeOffset, long recordBegin)
 {
     ggpkContainer  = ggpk;
     Offset         = recordBegin;
     Length         = length;
     NextFreeOffset = nextFreeOffset;
 }
示例#3
0
 public GGPKRecord(int length, GGPKContainer ggpk)
 {
     ggpkContainer = ggpk;
     Offset        = ggpk.fileStream.Position - 8;
     Length        = length; // 28
     Read();
 }
示例#4
0
 /// <summary>
 /// Create a node of the file in bundle
 /// </summary>
 public BundleFileNode(string name, LibBundle.Records.FileRecord record, GGPKContainer ggpkContainer)
 {
     Name               = name;
     BundleFileRecord   = record;
     Hash               = record.NameHash;
     Offset             = record.Offset;
     Length             = record.Size;
     this.ggpkContainer = ggpkContainer;
 }
示例#5
0
 /// <summary>
 /// Create a node of the directory in bundle
 /// </summary>
 public BundleDirectoryNode(string name, string path, ulong hash, int offset, int size, GGPKContainer ggpkContainer)
 {
     Name               = name;
     this.path          = path;
     Hash               = hash;
     Offset             = offset;
     Length             = size;
     this.ggpkContainer = ggpkContainer;
     Children           = new SortedSet <RecordTreeNode>(DirectoryRecord.Comparer);
 }
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            var ofd = new OpenFileDialog {
                DefaultExt = "ggpk",
                FileName   = SteamMode ? "_.index.bin" : "Content.ggpk",
                Filter     = SteamMode ? "Index Bundle File|*.index.bin" : "GGPK File|*.ggpk"
            };

            var setting = Properties.Settings.Default;

            if (setting.GGPKPath == "")
            {
                string path;
                path = Registry.CurrentUser.OpenSubKey(@"Software\GrindingGearGames\Path of Exile")?.GetValue("InstallLocation") as string;
                if (path != null && File.Exists(path + @"\Content.ggpk")) // Get POE path
                {
                    ofd.InitialDirectory = path.TrimEnd('\\');
                }
                else
                {
                    path = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Garena\PoE")?.GetValue("Path") as string;
                    if (path != null && File.Exists(path + @"\Content.ggpk")) // Get Garena POE path
                    {
                        ofd.InitialDirectory = path.TrimEnd('\\');
                    }
                }
            }
            else
            {
                ofd.InitialDirectory = setting.GGPKPath;
            }

            if (ofd.ShowDialog() == true)
            {
                setting.GGPKPath = Directory.GetParent(ofd.FileName).FullName;
                setting.Save();
            }
            else
            {
                Close();
                return;
            }

            var mi = new MenuItem {
                Header = "Export"
            };                                           // Initial ContextMenu

            mi.Click += OnExportClicked;
            TreeMenu.Items.Add(mi);
            mi = new MenuItem {
                Header = "Replace"
            };
            mi.Click += OnReplaceClicked;
            TreeMenu.Items.Add(mi);
            mi = new MenuItem {
                Header = "Recovery"
            };
            mi.Click += OnRecoveryClicked;
            TreeMenu.Items.Add(mi);

            var imageMenu = new ContextMenu();

            mi = new MenuItem {
                Header = "SaveAsPng"
            };
            mi.Click += OnSavePngClicked;
            imageMenu.Items.Add(mi);
            ImageView.ContextMenu = imageMenu;

            ggpkContainer = new GGPKContainer(ofd.FileName, BundleMode, SteamMode); // Initial GGPK
            var root = CreateNode(ggpkContainer.rootDirectory);

            Tree.Items.Add(root); // Initial TreeView
            root.IsExpanded = true;

            TextView.AppendText("\r\n\r\nDone!\r\n");
        }