示例#1
0
        private void ExtractMod(DirectoryInfo outDirectory, SimpleMod mod, SqPackStream dataStream)
        {
            PluginLog.Log("        -> Extracting {0} at {1}", mod.FullPath, mod.ModOffset.ToString("X"));

            try
            {
                var data = dataStream.ReadFile <FileResource>(mod.ModOffset);

                var extractedFile = new FileInfo(Path.Combine(outDirectory.FullName, mod.FullPath));
                extractedFile.Directory?.Create();

                File.WriteAllBytes(extractedFile.FullName, data.Data);
            }
            catch (Exception ex)
            {
                PluginLog.LogError(ex, "Could not export mod.");
            }
        }
示例#2
0
        private List <FileInfo> Extract(ModsJson mods, SqPackStream pack, DirectoryInfo outputDirectory)
        {
            Console.WriteLine(" > " + mods.FullPath);
            FileResource dat = pack.ReadFile <FileResource>(mods.ModOffset);

            FileInfo fileInfo = new FileInfo(outputDirectory.FullName + "/" + mods.FullPath);

            if (!fileInfo.Directory.Exists)
            {
                fileInfo.Directory.Create();
            }

            dat.SaveFile(fileInfo.FullName);

            if (fileInfo.Extension == ".meta")
            {
                return(Metadata.Expand(fileInfo));
            }

            return(new List <FileInfo>()
            {
                fileInfo
            });
        }
示例#3
0
        public override List <FileInfo> Extract(FileInfo file, DirectoryInfo outputDirectory)
        {
            List <FileInfo> extractedFiles = new List <FileInfo>();

            string mplPath = outputDirectory + "ttmp.mpl";
            string mpdPath = outputDirectory + "ttmp.mpd";

            using (ZipArchive zipFile = ZipFile.OpenRead(file.FullName))
            {
                // Extract the mpl
                ZipArchiveEntry mpl = zipFile.Entries.First(x => x.FullName.EndsWith(".mpl"));
                Console.WriteLine("Extracting MPL to " + mplPath);
                mpl.ExtractToFile(mplPath);

                // Extract the mpd
                ZipArchiveEntry mpd = zipFile.Entries.First(x => x.FullName.EndsWith(".mpd"));
                Console.WriteLine("Extracting MPD to " + mpdPath);
                mpd.ExtractToFile(mpdPath);
            }

            ModPackJson modPack = JsonConvert.DeserializeObject <ModPackJson>(File.ReadAllText(mplPath));

            Console.WriteLine("Read MPL: " + modPack.Name);

            Console.WriteLine("Extracting Modded resources");
            FileStream fs = new FileStream(mpdPath, FileMode.Open);

            using (SqPackStream pack = new SqPackStream(fs))
            {
                if (modPack.SimpleModsList != null)
                {
                    foreach (ModsJson mods in modPack.SimpleModsList)
                    {
                        extractedFiles.AddRange(this.Extract(mods, pack, outputDirectory));
                    }
                }

                if (modPack.ModPackPages != null)
                {
                    foreach (ModPackPageJson page in modPack.ModPackPages)
                    {
                        foreach (ModGroupJson group in page.ModGroups)
                        {
                            foreach (ModOptionJson option in group.OptionList)
                            {
                                foreach (ModsJson mods in option.ModsJsons)
                                {
                                    string        directoryName = page.PageIndex.ToString() + "_" + group.GroupName + "_" + option.Name;
                                    DirectoryInfo dir           = outputDirectory.CreateSubdirectory(directoryName);
                                    extractedFiles.AddRange(this.Extract(mods, pack, dir));
                                }
                            }
                        }
                    }
                }
            }

            File.Delete(mpdPath);
            Console.WriteLine("Deleted MPD");
            File.Delete(mplPath);
            Console.WriteLine("Deleted MPL");

            return(extractedFiles);
        }
示例#4
0
        private void ExtractSimpleModList(DirectoryInfo outDirectory, IEnumerable <SimpleMod> mods, SqPackStream dataStream)
        {
            // Extract each SimpleMod into the new mod folder
            foreach (var simpleMod in mods)
            {
                if (simpleMod == null)
                {
                    continue;
                }

                ExtractMod(outDirectory, simpleMod, dataStream);
            }
        }
示例#5
0
        private void ExtractSimpleModList(DirectoryInfo outDirectory, IEnumerable <SimpleMod> mods, SqPackStream dataStream)
        {
            State = ImporterState.ExtractingModFiles;

            // haha allocation go brr
            var wtf = mods.ToList();

            TotalProgress = wtf.LongCount();

            // Extract each SimpleMod into the new mod folder
            foreach (var simpleMod in wtf)
            {
                if (simpleMod == null)
                {
                    // do we increment here too???? can this even happen?????
                    continue;
                }

                ExtractMod(outDirectory, simpleMod, dataStream);
                CurrentProgress++;
            }
        }