Ejemplo n.º 1
0
        private static void Run(Options options)
        {
            Clean(options);

            options.LoadConfig();

            EncodingCache.Initialise(options);

            // create the repo
            var tactRepo = CreateRepo(options);

            // load the the Install/Download tag lookups
            TagGenerator.Load(tactRepo);

            // load the readers
            var dirReader = new DirectoryReader(options, tactRepo);
            var mpqReader = new MPQReader(options, tactRepo, dirReader.PatchArchives);

            // populate the Install and Root files
            PopulateInstallFile(tactRepo, dirReader, mpqReader);
            PopulateRootFile(tactRepo, dirReader, mpqReader);

            // build and save the repo
            Log.WriteLine("Building and Saving repo");
            tactRepo.Save(options.OutputFolder, Path.Combine(options.OutputFolder, options.BuildName));

            EncodingCache.Save();

            // cleanup
            Clean(options);
        }
        public WoWFormatParser(string directory, WoWBuild build, Options options = null)
        {
            Directory = directory;
            if (!System.IO.Directory.Exists(Directory))
            {
                throw new ArgumentException("Invalid Directory argument.");
            }

            Build = build;
            if (Build == null)
            {
                throw new ArgumentException("Invalid Build argument.");
            }

            Options = options ?? new Options();

            _directoryReader = new DirectoryReader(Directory, Options, Build);
            _mpqReader       = new MPQReader(Options, Build, _directoryReader.GetPatchArchives());
        }
Ejemplo n.º 3
0
        private static void PopulateRootFile(TACTRepo repo, DirectoryReader dirReader, MPQReader mpqReader)
        {
            Log.WriteLine("Extracting Data files");

            // load files from mpqs, patches and loose files in the data directory
            mpqReader.FileList.Clear();
            mpqReader.EnumerateDataArchives(dirReader.DataArchives);
            mpqReader.EnumeratePatchArchives();
            //mpqReader.EnumerateLooseDataFiles(dirReader.GetLooseDataFiles());

            Log.WriteLine("Populating Root file");
            mpqReader.Process <RootFile>((x) =>
            {
                repo.RootFile.AddOrUpdate(x);
                repo.EncodingFile.AddOrUpdate(x);
                repo.IndexContainer.Enqueue(x);
                repo.DownloadFile.AddOrUpdate(x);
            });
        }
Ejemplo n.º 4
0
        private static void PopulateInstallFile(TACTRepo repo, DirectoryReader dirReader, MPQReader mpqReader)
        {
            Log.WriteLine("Extracting and Populating Install file");

            // use base-*.mpq if available else enumerate all non-archived files not inside the data folder
            // this ignores temp data folders e.g. wdb, wtf, cache etc
            if (dirReader.BaseArchives.Count == 0)
            {
                dirReader.ExportFiles();
            }
            else
            {
                mpqReader.EnumerateDataArchives(dirReader.BaseArchives, true);
                mpqReader.Process <InstallFile>((x) =>
                {
                    repo.InstallFile.AddOrUpdate(x);
                    repo.EncodingFile.AddOrUpdate(x);
                    repo.IndexContainer.Enqueue(x);
                    repo.DownloadFile.AddOrUpdate(x);
                });
            }
        }