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