public static void CheckScripts(Int64 build, String manifestFile) { var scripts = HoloXPLOR_App.Scripts; HoloXPLOR_App._scriptsPath = HostingEnvironment.MapPath(String.Format("~/App_Data/Scripts-{0}", build)); if (!Directory.Exists(HoloXPLOR_App._scriptsPath)) { Directory.CreateDirectory(HoloXPLOR_App._scriptsPath); } if (!File.Exists(Path.Combine(HoloXPLOR_App._scriptsPath, "game.xml"))) { using (WebClient client = new WebClient()) { // client.DownloadFile(manifestFile, Path.Combine(scriptsPath, String.Format("{0}.json", build))); var manifest = client.DownloadString(manifestFile).FromJSON <Manifest>(); #region Download DataXML.pak using (Stream pakStream = client.OpenRead(String.Format("{0}/{1}/{2}", manifest.WebseedUrls[HoloXPLOR_App._random.Next(manifest.WebseedUrls.Length)], manifest.KeyPrefix, "Data/DataXML.pak"))) { using (var zipStream = new ZipInputStream(pakStream)) { ZipEntry zipEntry = zipStream.GetNextEntry(); while (zipEntry != null) { String entryFileName = zipEntry.Name; if (entryFileName.StartsWith("Scripts")) { String fullZipToPath = Path.Combine(HoloXPLOR_App._scriptsPath, entryFileName).Replace(@"\Scripts\", @"\"); String directoryName = Path.GetDirectoryName(fullZipToPath); if (directoryName.Length > 0) { Directory.CreateDirectory(directoryName); } using (var ms = new MemoryStream()) { zipStream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); var xml = CryXmlSerializer.ReadStream(ms); xml.Save(fullZipToPath); } } zipEntry = zipStream.GetNextEntry(); } } } #endregion #region Download GameData.pak using (Stream pakStream = client.OpenRead(String.Format("{0}/{1}/{2}", manifest.WebseedUrls[HoloXPLOR_App._random.Next(manifest.WebseedUrls.Length)], manifest.KeyPrefix, "Data/GameData.pak"))) { using (var zipStream = new ZipInputStream(pakStream)) { ZipEntry zipEntry = zipStream.GetNextEntry(); while (zipEntry != null) { String entryFileName = zipEntry.Name; if (entryFileName.EndsWith(".dcb")) { String fullZipToPath = Path.Combine(HoloXPLOR_App._scriptsPath, "game.xml"); using (var ms = new MemoryStream()) { zipStream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); using (var br = new BinaryReader(ms)) { var df = new DataForge.DataForge(br); // df.GenerateXML(); df.Save(fullZipToPath); } } } zipEntry = zipStream.GetNextEntry(); } } } #endregion } scripts = new Scripts(HoloXPLOR_App._scriptsPath); } scripts = scripts ?? new Scripts(HoloXPLOR_App._scriptsPath); if (scripts.Ammo.Count > 0 & scripts.Items.Count > 0 && scripts.Loadout.Count > 0 && scripts.Localization.Count > 0 && scripts.Vehicles.Count > 0) { String latestBuildFile = HostingEnvironment.MapPath("~/App_Data/latestBuild.txt"); File.WriteAllText(latestBuildFile, HoloXPLOR_App._scriptsPath); HoloXPLOR_App.Scripts = scripts; } }
public static void Process(params String[] args) { if (args.Length < 1 || args.Length > 2) { Console.WriteLine("Usage: HoloXPLOR.DataForge.exe [infile]"); Console.WriteLine(); Console.WriteLine("Converts any Star Citizen binary file into an actual XML file."); Console.WriteLine("CryXml files (.xml) are saved as .raw in the original location."); Console.WriteLine("DataForge files (.dcb) are saved as .xml in the original location."); Console.WriteLine(); Console.WriteLine("Can also convert all compatible files in a directory, and it's"); Console.WriteLine("sub-directories. In that case, all CryXml files are saved in-place,"); Console.WriteLine("and any DataForge files are saved to both .xml and extracted to"); Console.WriteLine("the original component locations."); return; } try { if (File.Exists(args[0])) { if (Path.GetExtension(args[0]) == ".dcb") { using (BinaryReader br = new BinaryReader(File.OpenRead(args[0]))) { var legacy = new FileInfo(args[0]).Length < 0x0e2e00; var df = new DataForge(br, legacy); df.GenerateSerializationClasses(); df.Save(Path.ChangeExtension(args[0], "xml")); } } else { var xml = CryXmlSerializer.ReadFile(args[0]); if (xml != null) { if (_overwrite) { xml.Save(args[0]); } else { xml.Save(Path.ChangeExtension(args[0], "raw")); } } else { Console.WriteLine("{0} already in XML format", args[0]); } } } } catch (Exception ex) { Console.WriteLine("Error converting {0}: {1}", args[0], ex.Message); } }