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(); }
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); }
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); }
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); } }