Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            });
        }