private void buttonMetaSave_Click(object sender, EventArgs e) { SaveFileDialog SaveMeta = new SaveFileDialog(); SaveMeta.Filter = "Metadata XML|*.xml"; DialogResult SaveResult = SaveMeta.ShowDialog(); if (SaveResult != DialogResult.OK) return; ModEntry modMetaData = new ModEntry(); modMetaData.Name = textModName.Text; modMetaData.Author = textModAuthor.Text; modMetaData.Version = textModVersion.Text; modMetaData.MGSVersion.Version = comboForVersion.Text; modMetaData.Website = textModWebsite.Text; modMetaData.Description = textModDescription.Text; modMetaData.SaveToFile(SaveMeta.FileName); }
private void buttonBuild_Click(object sender, EventArgs e) { SaveFileDialog saveMod = new SaveFileDialog(); saveMod.Filter = "MGSV Mod|*.mgsv"; DialogResult saveResult = saveMod.ShowDialog(); if (saveResult != DialogResult.OK) return; string modPath = saveMod.FileName; ModEntry modMetaData = new ModEntry(); modMetaData.Name = textModName.Text; modMetaData.Author = textModAuthor.Text; modMetaData.Version = textModVersion.Text; modMetaData.MGSVersion = comboForVersion.Text; modMetaData.Website = textModWebsite.Text; modMetaData.Description = textModDescription.Text; modMetaData.SaveToFile(textModPath.Text + "\\metadata.xml"); Build.BuildArchive(textModPath.Text, modMetaData, modPath); MessageBox.Show("Build successful.", "MakeBite", MessageBoxButtons.OK, MessageBoxIcon.Information); }
public static void BuildArchive(string SourceDir, ModEntry metaData, string OutputFile) { if (Directory.Exists("_build")) Directory.Delete("_build", true); // build FPKs metaData.ModFpkEntries = new List<ModFpkEntry>(); foreach (string FpkDir in ListFpkFolders(SourceDir)) { foreach (ModFpkEntry fpkEntry in BuildFpk(FpkDir, SourceDir)) { metaData.ModFpkEntries.Add(fpkEntry); } } // build QAR entries metaData.ModQarEntries = new List<ModQarEntry>(); foreach (string qarFile in ListQarFiles(SourceDir)) { string subDir = qarFile.Substring(0, qarFile.LastIndexOf("\\")); // the subdirectory for XML output subDir = subDir.Substring(SourceDir.Length); string qarFilePath = Tools.ToQarPath(qarFile.Substring(SourceDir.Length)); if (!Directory.Exists("_build" + subDir)) Directory.CreateDirectory("_build" + subDir); // create file structure File.Copy(qarFile, "_build" + qarFile.Substring(SourceDir.Length), true); metaData.ModQarEntries.Add(new ModQarEntry() { FilePath = qarFilePath, Compressed = qarFile.Substring(qarFile.LastIndexOf(".") + 1).Contains("fpk") ? true : false, ContentHash = Tools.HashFile(qarFile) }); } metaData.SBVersion = "400"; // 0.4.0.0 metaData.SaveToFile("_build\\metadata.xml"); // build archive FastZip zipper = new FastZip(); zipper.CreateZip(OutputFile, "_build", true, "(.*?)"); Directory.Delete("_build", true); }
private void DoBuild(string BuildFile) { ModEntry modMetaData = new ModEntry(); modMetaData.Name = textModName.Text; modMetaData.Author = textModAuthor.Text; modMetaData.Version = textModVersion.Text; modMetaData.MGSVersion.Version = comboForVersion.Text; modMetaData.Website = textModWebsite.Text; modMetaData.Description = textModDescription.Text; modMetaData.SaveToFile(textModPath.Text + "\\metadata.xml"); Build.BuildArchive(textModPath.Text, modMetaData, BuildFile); }
private void buttonBuild_Click(object sender, EventArgs e) { SaveFileDialog saveMod = new SaveFileDialog(); saveMod.Filter = "MGSV Mod|*.mgsv"; DialogResult saveResult = saveMod.ShowDialog(); if (saveResult != DialogResult.OK) return; string modPath = textModPath.Text; // delete existing temp directory if (Directory.Exists("_temp")) Directory.Delete("_temp", true); // create new temp fs and QAR file XML Directory.CreateDirectory("_temp\\makebite"); QarFile makeQar = new QarFile(); makeQar.Flags = 3150048; makeQar.Name = "makebite.dat"; makeQar.QarEntries = new List<QarEntry>(); // do files foreach (string modFile in Directory.GetFiles(modPath, "*.*", SearchOption.AllDirectories)) { if (!Hashing.ValidFileExtension(modFile.Substring(modPath.Length))) continue; string subDir = modFile.Substring(0, modFile.LastIndexOf("\\")); // the subdirectory for XML output subDir = subDir.Substring(modPath.Length); if (!Directory.Exists("_temp\\makebite" + subDir)) Directory.CreateDirectory("_temp\\makebite" + subDir); // create file structure File.Copy(modFile, "_temp\\makebite" + modFile.Substring(modPath.Length), true); makeQar.QarEntries.Add(new QarEntry() { FilePath = modFile.Substring(modPath.Length + 1) }); // add to xml } // write xml makeQar.WriteToFile("_temp\\makebite.dat.xml"); // create metadata ModEntry modMetadata = new ModEntry(); modMetadata.Name = textModName.Text; modMetadata.Version = textModVersion.Text; modMetadata.Author = textModAuthor.Text; modMetadata.Website = textModWebsite.Text; modMetadata.Description = textModDescription.Text; modMetadata.ModQarEntries = new List<ModQarEntry>(); modMetadata.ModFpkEntries = new List<ModFpkEntry>(); // create file data foreach (QarEntry newQarEntry in makeQar.QarEntries) { modMetadata.ModQarEntries.Add(new ModQarEntry() { FilePath = Hashing.DenormalizeFilePath(newQarEntry.FilePath), Compressed = newQarEntry.Compressed, Hash = newQarEntry.Hash }); string fileExt = newQarEntry.FilePath.Substring(newQarEntry.FilePath.LastIndexOf(".") + 1).ToLower(); if (fileExt == "fpk" || fileExt == "fpkd") { newQarEntry.Compressed = true; // decompress fpk files and create metadata string fpkDir = "_temp\\makebite\\" + newQarEntry.FilePath.Replace(".", "_"); SnakeBite.GzsTool.GzsTool.Run("_temp\\makebite\\" + newQarEntry.FilePath); foreach (string fpkSubFile in Directory.GetFiles(fpkDir, "*.*", SearchOption.AllDirectories)) { modMetadata.ModFpkEntries.Add(new ModFpkEntry() { FilePath = fpkSubFile.Substring(fpkSubFile.LastIndexOf("\\Assets")).Replace("\\", "/"), FpkFile = "/" + newQarEntry.FilePath.Replace("\\", "/") } ); } Directory.Delete(fpkDir, true); File.Delete("_temp\\makebite\\" + newQarEntry.FilePath + ".xml"); } } modMetadata.SaveToFile("_temp\\makebite\\metadata.xml"); // compress to file FastZip zipper = new FastZip(); zipper.CreateZip(saveMod.FileName, "_temp\\makebite", true, "(.*?)"); Directory.Delete("_temp", true); MessageBox.Show("Done"); }
public static void BuildArchive(string SourceDir, ModEntry metaData, string OutputFile) { string buildDir = Directory.GetCurrentDirectory() + "\\build"; if (Directory.Exists(buildDir)) Directory.Delete(buildDir, true); Directory.CreateDirectory("_build"); // check for FPKs that must be built and build metaData.ModFpkEntries = new List<ModFpkEntry>(); List<string> builtFpks = new List<string>(); foreach (string FpkDir in ListFpkFolders(SourceDir)) { foreach (ModFpkEntry fpkEntry in BuildFpk(FpkDir, SourceDir)) { metaData.ModFpkEntries.Add(fpkEntry); if (!builtFpks.Contains(fpkEntry.FpkFile)) builtFpks.Add(fpkEntry.FpkFile); } } // check for other FPKs and build fpkentry data foreach (string SourceFile in Directory.GetFiles(SourceDir, "*.fpk*", SearchOption.AllDirectories)) { string FileName = Tools.ToQarPath(SourceFile.Substring(SourceDir.Length)); if (!builtFpks.Contains(FileName)) { // unpack FPK and build FPK list foreach (string file in GzsLib.ListArchiveContents<FpkFile>(SourceFile)) { string fpkDir = Tools.ToWinPath(FileName.Replace(".fpk", "_fpk")); string fpkFullDir = Path.Combine(SourceDir, fpkDir); if (!Directory.Exists(fpkFullDir)) { GzsLib.ExtractArchive<FpkFile>(SourceFile, fpkFullDir); } metaData.ModFpkEntries.Add(new ModFpkEntry() { FilePath = file, FpkFile = FileName, ContentHash = Tools.GetMd5Hash(Path.Combine(SourceDir, fpkDir, Tools.ToWinPath(file))) }); } } } // build QAR entries metaData.ModQarEntries = new List<ModQarEntry>(); foreach (string qarFile in ListQarFiles(SourceDir)) { string subDir = qarFile.Substring(0, qarFile.LastIndexOf("\\")).Substring(SourceDir.Length).TrimStart('\\'); // the subdirectory for XML output string qarFilePath = Tools.ToQarPath(qarFile.Substring(SourceDir.Length)); if (!Directory.Exists(Path.Combine("_build", subDir))) Directory.CreateDirectory(Path.Combine("_build", subDir)); // create file structure File.Copy(qarFile, Path.Combine("_build", Tools.ToWinPath(qarFilePath)), true); ulong hash = Tools.NameToHash(qarFilePath); metaData.ModQarEntries.Add(new ModQarEntry() { FilePath = qarFilePath, Compressed = qarFile.Substring(qarFile.LastIndexOf(".") + 1).Contains("fpk") ? true : false, ContentHash = Tools.GetMd5Hash(qarFile), Hash = hash }); } metaData.SBVersion.Version = "0.8.0.0"; metaData.SaveToFile("_build\\metadata.xml"); // build archive FastZip zipper = new FastZip(); zipper.CreateZip(OutputFile, "_build", true, "(.*?)"); Directory.Delete("_build", true); }