Beispiel #1
0
        private void btnDeleteEntry_Click(object sender, EventArgs e)
        {
            if (treeMapperView.SelectedNode == null || treeMapperView.SelectedNode.Tag == null)
            {
                return;
            }

            CompositeMapEntry entry = (CompositeMapEntry)treeMapperView.SelectedNode.Tag;

            store.CompositeMap[entry.SubGPKName].Remove(entry);
            treeMapperView.OnDrawNodes();
        }
Beispiel #2
0
        private void treeMapperView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node == null || e.Node.Tag == null)
            {
                return;
            }

            CompositeMapEntry entry = (CompositeMapEntry)e.Node.Tag;
            string            path  = string.Format("{0}\\{1}.gpk", store.BaseSearchPath, entry.SubGPKName);

            if (!File.Exists(path))
            {
                logger.Info("GPK to load not found");
                return;
            }
            store.loadSubGpk(path, entry);
        }
Beispiel #3
0
        public GpkPackage loadSubGpk(string path, CompositeMapEntry entry)
        {
            var reader = new Reader();
            var gpk    = reader.ReadSubGpkFromComposite(path, entry.UID, entry.FileOffset, entry.FileLength);

            if (gpk == null)
            {
                return(null);
            }

            gpk.CompositeGpk   = true;
            gpk.CompositeEntry = entry;
            LoadedGpkPackages.Add(gpk);

            PackagesChanged?.Invoke();
            return(gpk);
        }
Beispiel #4
0
        public static void ParseMappings(string folder, GpkStore store)
        {
            logger.Debug("ParseMappings for " + folder);

            try
            {
                string pkgMapper  = folder + "\\PkgMapper.dat";
                string compMapper = folder + "\\CompositePackageMapper.dat";

                if (!File.Exists(pkgMapper) || !File.Exists(compMapper))
                {
                    logger.Info("Not all .dat files found");
                    return;
                }

                var pkgMapperData = File.ReadAllBytes(pkgMapper);
                DecryptFile(pkgMapperData);

                StreamReader reader        = new StreamReader(new MemoryStream(pkgMapperData));
                var          pkgMapperText = reader.ReadToEnd();
                reader.Close();

                store.ObjectMapperList = new Dictionary <string, string>();
                var objectEntries = pkgMapperText.Split('|');
                foreach (var entry in objectEntries)
                {
                    var split = entry.Split(',');
                    if (split.Length < 2)
                    {
                        continue;
                    }

                    var uid          = split[0];
                    var compositeUID = split[1];

                    logger.Trace("entry {0}:{1}", uid, compositeUID);
                    store.ObjectMapperList.Add(compositeUID, uid);
                }

                logger.Debug("parsing CompositePackageMapper");

                var compPkgMapper = File.ReadAllBytes(compMapper);
                DecryptFile(compPkgMapper);

                reader = new StreamReader(new MemoryStream(compPkgMapper));
                var comppPackMapperText = reader.ReadToEnd();
                reader.Close();

                store.CompositeMap = new Dictionary <string, List <CompositeMapEntry> >();
                var fileEntries = comppPackMapperText.Split('!');
                for (int i = 0; i < fileEntries.Length; i += 1)
                {
                    var baseSplit = fileEntries[i].Split('?');
                    if (baseSplit.Length < 2)
                    {
                        continue;
                    }

                    var fileName    = baseSplit[0];
                    var fileContent = baseSplit[1];

                    //Composite UID, Unkown Object ID, Sub-GPK File offset, Sub-GPK File length
                    //c7a706fb_6a349a6f_1d212.Chat2_dup,c7a706fb_6a349a6f_1d212,92291307,821218,|
                    var subGPKEntries = baseSplit[1].Split('|');

                    foreach (var entry in subGPKEntries)
                    {
                        var split = entry.Split(',');
                        if (split.Length < 5)
                        {
                            continue;
                        }

                        var tmp = new CompositeMapEntry();
                        tmp.CompositeUID    = split[0];
                        tmp.CompPackageName = split[1];
                        tmp.FileOffset      = Convert.ToInt32(split[2]);
                        tmp.FileLength      = Convert.ToInt32(split[3]);

                        //sanity
                        if (!store.ObjectMapperList.ContainsKey(tmp.CompositeUID))
                        {
                            logger.Debug("ObjectMapping for {0} not found", tmp.CompositeUID);
                            continue;
                        }

                        //enrich
                        tmp.SubGPKName = fileName;
                        tmp.UID        = store.ObjectMapperList[tmp.CompositeUID];

                        if (!store.CompositeMap.ContainsKey(fileName))
                        {
                            store.CompositeMap.Add(fileName, new List <CompositeMapEntry>());
                        }

                        store.CompositeMap[fileName].Add(tmp);

                        var unk = split[4];
                        if (unk != "")
                        {
                            logger.Warn("unk not empty!!!!!!! " + unk);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Info("Loading of mappings failed");
                logger.Error(ex);
            }
        }