private static void Convert(string[] args) { string output = args.FirstOrDefault(); ulong[] guids = args.Skip(1).Select(x => ulong.Parse(x, NumberStyles.HexNumber)).ToArray(); if (string.IsNullOrWhiteSpace(output)) { return; } Dictionary <ulong, PackageRecord[]> records = new Dictionary <ulong, PackageRecord[]>(); Dictionary <ulong, PackageHeader> packages = new Dictionary <ulong, PackageHeader>(); var apm = TankHandler.m_packageManifest; for (int i = 0; i < apm.m_packageEntries.Length; ++i) { PackageEntry entry = apm.m_packageEntries[i]; if (!guids.Contains(teResourceGUID.LongKey(entry.m_packageGUID)) && !guids.Contains(teResourceGUID.Index(entry.m_packageGUID)) && !guids.Contains(entry.m_packageGUID)) { continue; } packages[entry.m_packageGUID] = apm.m_packages[i]; records[entry.m_packageGUID] = apm.m_packageRecords[i]; } ICLIFlags flags = FlagParser.Parse <ExtractFlags>(); void Body(ulong key) { DataTool.FindLogic.Combo.ComboInfo info = new DataTool.FindLogic.Combo.ComboInfo(); string dest = Path.Combine(output, teResourceGUID.AsString(key)); foreach (PackageRecord record in records[key]) { DataTool.FindLogic.Combo.Find(info, record.m_GUID); } var context = new DataTool.SaveLogic.Combo.SaveContext(info); DataTool.SaveLogic.Combo.Save(flags, dest, context); context.Wait(); } Parallel.ForEach(records.Keys, Body); }
private static void Convert(string[] args) { string output = args.FirstOrDefault(); ulong[] guids = args.Skip(1).Select(x => ulong.Parse(x, NumberStyles.HexNumber)).ToArray(); if (string.IsNullOrWhiteSpace(output)) { return; } Dictionary <ulong, PackageRecord[]> records = new Dictionary <ulong, PackageRecord[]>(); Dictionary <ulong, Package> packages = new Dictionary <ulong, Package>(); foreach (ApplicationPackageManifest apm in Root.APMFiles) { for (int i = 0; i < apm.PackageEntries.Length; ++i) { PackageEntry entry = apm.PackageEntries[i]; if (guids.Contains(teResourceGUID.LongKey(entry.PackageGUID)) || guids.Contains(teResourceGUID.Index(entry.PackageGUID))) { packages[entry.PackageGUID] = apm.Packages[i]; records[entry.PackageGUID] = apm.Records[i]; } } } ICLIFlags flags = FlagParser.Parse <ExtractFlags>(); MapCMF(); LoadGUIDTable(); Sound.WwiseBank.GetReady(); Parallel.ForEach(records.Keys, (key) => { DataTool.FindLogic.Combo.ComboInfo info = new DataTool.FindLogic.Combo.ComboInfo(); string dest = Path.Combine(output, teResourceGUID.AsString(key)); foreach (PackageRecord record in records[key]) { DataTool.FindLogic.Combo.Find(info, record.GUID); } DataTool.SaveLogic.Combo.Save(flags, dest, info); }); }