public static void Unpack(this BND3 bnd, string sourceName, string targetDir) { Directory.CreateDirectory(targetDir); XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; XmlWriter xw = XmlWriter.Create($"{targetDir}\\_yabber-bnd3.xml", xws); xw.WriteStartElement("bnd3"); xw.WriteElementString("filename", sourceName); xw.WriteElementString("compression", bnd.Compression.ToString()); xw.WriteElementString("timestamp", bnd.Timestamp); xw.WriteElementString("format", $"0x{(byte)bnd.Format:X2}"); xw.WriteElementString("bigendian", bnd.BigEndian.ToString()); xw.WriteElementString("unk1", bnd.Unk1.ToString()); xw.WriteElementString("unk2", $"0x{bnd.Unk2:X8}"); xw.WriteStartElement("files"); foreach (BND3.File file in bnd.Files) { string path, root; if (Binder.HasName(bnd.Format)) { path = YBUtil.UnrootBNDPath(file.Name, out root); } else { root = null; path = file.ID.ToString(); } xw.WriteStartElement("file"); xw.WriteElementString("id", file.ID.ToString()); if (Binder.HasName(bnd.Format)) { xw.WriteElementString("root", root); xw.WriteElementString("path", path); } xw.WriteElementString("flags", $"0x{(byte)file.Flags:X2}"); xw.WriteEndElement(); path = $"{targetDir}\\{path}"; Directory.CreateDirectory(Path.GetDirectoryName(path)); File.WriteAllBytes(path, file.Bytes); } xw.WriteEndElement(); xw.WriteEndElement(); xw.Close(); }
public static void Unpack(this BXF4 bxf, string bhdName, string bdtName, string targetDir) { Directory.CreateDirectory(targetDir); XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; XmlWriter xw = XmlWriter.Create($"{targetDir}\\_yabber-bxf4.xml", xws); xw.WriteStartElement("bxf4"); xw.WriteStartElement("bhd"); xw.WriteElementString("filename", bhdName); xw.WriteElementString("timestamp", bxf.BHD.Timestamp); xw.WriteElementString("format", $"0x{(byte)bxf.BHD.Format:X2}"); xw.WriteElementString("unicode", bxf.BHD.Unicode.ToString()); xw.WriteElementString("bigendian", bxf.BHD.BigEndian.ToString()); xw.WriteElementString("flag1", bxf.BHD.Flag1.ToString()); xw.WriteElementString("flag2", bxf.BHD.Flag2.ToString()); xw.WriteElementString("extended", $"0x{bxf.BHD.Extended:X2}"); xw.WriteEndElement(); xw.WriteStartElement("bdt"); xw.WriteElementString("filename", bdtName); xw.WriteElementString("timestamp", bxf.BDT.Timestamp); xw.WriteElementString("bigendian", bxf.BDT.BigEndian.ToString()); xw.WriteElementString("flag1", bxf.BDT.Flag1.ToString()); xw.WriteElementString("flag2", bxf.BDT.Flag2.ToString()); xw.WriteElementString("unk1", $"0x{bxf.BDT.Unk1:X16}"); xw.WriteEndElement(); xw.WriteStartElement("files"); foreach (BXF4.File file in bxf.Files) { string path = YBUtil.UnrootBNDPath(file.Name, out string root); xw.WriteStartElement("file"); xw.WriteElementString("id", file.ID.ToString()); xw.WriteElementString("root", root); xw.WriteElementString("path", path); xw.WriteElementString("flags", $"0x{(byte)file.Flags:X2}"); xw.WriteEndElement(); path = $"{targetDir}\\{path}"; Directory.CreateDirectory(Path.GetDirectoryName(path)); File.WriteAllBytes(path, file.Bytes); } xw.WriteEndElement(); xw.WriteEndElement(); xw.Close(); }
public static void Unpack(this BXF3 bxf, string bhdName, string bdtName, string targetDir) { Directory.CreateDirectory(targetDir); XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; XmlWriter xw = XmlWriter.Create($"{targetDir}\\_yabber-bxf3.xml", xws); xw.WriteStartElement("bxf3"); xw.WriteStartElement("bhd"); xw.WriteElementString("filename", bhdName); xw.WriteElementString("timestamp", bxf.BHDTimestamp); xw.WriteEndElement(); xw.WriteStartElement("bdt"); xw.WriteElementString("filename", bdtName); xw.WriteElementString("timestamp", bxf.BDTTimestamp); xw.WriteEndElement(); xw.WriteStartElement("files"); foreach (BXF3.File file in bxf.Files) { string path = YBUtil.UnrootBNDPath(file.Name, out string root); xw.WriteStartElement("file"); xw.WriteElementString("id", file.ID.ToString()); xw.WriteElementString("root", root); xw.WriteElementString("path", path); xw.WriteEndElement(); path = $"{targetDir}\\{path}"; Directory.CreateDirectory(Path.GetDirectoryName(path)); File.WriteAllBytes(path, file.Bytes); } xw.WriteEndElement(); xw.WriteEndElement(); xw.Close(); }
public static void WriteBinderFiles(IBinder bnd, XmlWriter xw, string targetDir) { xw.WriteStartElement("files"); var pathCounts = new Dictionary <string, int>(); for (int i = 0; i < bnd.Files.Count; i++) { BinderFile file = bnd.Files[i]; string root = ""; string path; if (Binder.HasNames(bnd.Format)) { path = YBUtil.UnrootBNDPath(file.Name, out root); } else if (Binder.HasIDs(bnd.Format)) { path = file.ID.ToString(); } else { path = i.ToString(); } xw.WriteStartElement("file"); xw.WriteElementString("flags", file.Flags.ToString()); if (Binder.HasIDs(bnd.Format)) { xw.WriteElementString("id", file.ID.ToString()); } if (root != "") { xw.WriteElementString("root", root); } xw.WriteElementString("path", path); string suffix = ""; if (pathCounts.ContainsKey(path)) { pathCounts[path]++; suffix = $" ({pathCounts[path]})"; xw.WriteElementString("suffix", suffix); } else { pathCounts[path] = 1; } if (file.CompressionType != DCX.Type.Zlib) { xw.WriteElementString("compression_type", file.CompressionType.ToString()); } xw.WriteEndElement(); string outPath = $@"{targetDir}\{Path.GetDirectoryName(path)}\{Path.GetFileNameWithoutExtension(path)}{suffix}{Path.GetExtension(path)}"; Directory.CreateDirectory(Path.GetDirectoryName(outPath)); File.WriteAllBytes(outPath, file.Bytes); } xw.WriteEndElement(); }