public override void SaveFiles(Database database, string directory, IList <LoadedDatabaseFile> files) { foreach (var file in files) { var vaultsToSave = file.Vaults.Select(database.FindVault).ToList(); IVaultPack vaultPack = new StandardVaultPack(); //var standardVaultPack = new StandardVaultPack(); Directory.CreateDirectory(Path.Combine(directory, file.Group)); var outPath = Path.Combine(directory, file.Group, file.Name + ".bin"); Debug.WriteLine("Saving file '{0}' to '{1}' ({2} vaults)", file.Name, outPath, vaultsToSave.Count); using var bw = new BinaryWriter(File.Open(outPath, FileMode.Create, FileAccess.ReadWrite)); vaultPack.Save(bw, vaultsToSave, new PackSavingOptions()); bw.Close(); if (file.Name == "gameplay") { using (FileStream outStream = new FileStream(Path.ChangeExtension(outPath, "lzc"), FileMode.Create, FileAccess.Write)) using (FileStream inStream = new FileStream(outPath, FileMode.Open, FileAccess.Read)) using (BinaryWriter outWriter = new BinaryWriter(outStream)) { outWriter.Write(0x57574152); // RAWW outWriter.Write((byte)0x01); outWriter.Write((byte)0x10); outWriter.Write((ushort)0); outWriter.Write((int)inStream.Length); outWriter.Write((int)(inStream.Length + 16)); inStream.CopyTo(outStream); } } } }
public override IList <LoadedDatabaseFile> LoadFiles(Database database, string directory) { List <LoadedDatabaseFile> files = new List <LoadedDatabaseFile>(); foreach (var file in GetFilesToLoad(directory)) { //var standardVaultPack = new StandardVaultPack(); using var br = new BinaryReader(File.OpenRead(file)); IVaultPack vaultPack = new StandardVaultPack(); string group = "main"; if (file.Contains("gc.vaults")) { vaultPack = new GameplayVault(null); group = "gameplay"; } var vaults = vaultPack.Load(br, database, new PackLoadingOptions()); var loadedDatabaseFile = new LoadedDatabaseFile { Name = Path.GetFileNameWithoutExtension(file), Group = group, Vaults = vaults.Select(v => v.Name).ToList(), LoadedVaults = new List <Vault>(vaults) }; files.Add(loadedDatabaseFile); } return(files); }
public override IList <LoadedDatabaseFile> Load(Database database, string directory) { IEnumerable <string> paths = GetFilesToLoad(); StandardVaultPack svp = new StandardVaultPack(); List <LoadedDatabaseFile> files = new List <LoadedDatabaseFile>(); foreach (var path in paths) { string[] parts = path.Split(':'); string fullPath = Path.Combine(directory, "GLOBAL", parts[0]); using BinaryReader br = new BinaryReader(File.OpenRead(fullPath)); IList <Vault> vaults = svp.Load(br, database, new PackLoadingOptions()); Debug.WriteLine("loaded {0} vaults from {1}", vaults.Count, fullPath); DatabaseLoadedFile dlf = new DatabaseLoadedFile(); dlf.Vaults.AddRange(vaults); database.Files.Add(dlf); LoadedDatabaseFile file = new LoadedDatabaseFile(fullPath, vaults, parts[1]); files.Add(file); } return(files); }
public override void Save(IList <LoadedDatabaseFile> files) { StandardVaultPack svp = new StandardVaultPack(); foreach (var file in files) { using MemoryStream ms = new MemoryStream(); using BinaryWriter bw = new BinaryWriter(ms); svp.Save(bw, file.Vaults); using FileStream fs = new FileStream(file.FullPath, FileMode.Create, FileAccess.Write, FileShare.None); ms.Position = 0; ms.CopyTo(fs); if (file.Tag == "compress") { // generate compressed file var lzcPath = Path.ChangeExtension(file.FullPath, "lzc"); if (!File.Exists(lzcPath + ".bak")) { File.Copy(lzcPath, lzcPath + ".bak"); } using FileStream cfs = new FileStream(lzcPath, FileMode.Create, FileAccess.Write, FileShare.None); ms.Position = 0; byte[] header = new byte[16]; header[0] = 0x52; header[1] = 0x41; header[2] = 0x57; header[3] = 0x57; header[4] = 0x01; header[5] = 0x10; int len = (int)ms.Length; header[8] = (byte)(len & 0xff); header[9] = (byte)((len >> 8) & 0xff); header[10] = (byte)((len >> 16) & 0xff); header[11] = (byte)((len >> 24) & 0xff); len += 16; header[12] = (byte)(len & 0xff); header[13] = (byte)((len >> 8) & 0xff); header[14] = (byte)((len >> 16) & 0xff); header[15] = (byte)((len >> 24) & 0xff); cfs.Write(header); ms.CopyTo(cfs); } } }
private void LoadMainFiles() { foreach (var file in Directory.GetFiles( Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"data"), "*.bin", SearchOption.TopDirectoryOnly)) { StandardVaultPack svp = new StandardVaultPack(); _logger.LogInformation("Loading {path}", file); using BinaryReader br = new BinaryReader(File.OpenRead(file)); svp.Load(br, _database, new PackLoadingOptions()); } }
public override void SaveFiles(Database database, string directory, IList <LoadedDatabaseFile> files) { foreach (var file in files) { var vaultsToSave = file.Vaults.Select(database.FindVault).ToList(); IVaultPack vaultPack = new StandardVaultPack(); if (file.Group == "gameplay") { vaultPack = new GameplayVault(file.Name); } //var standardVaultPack = new StandardVaultPack(); Directory.CreateDirectory(Path.Combine(directory, file.Group)); var outPath = Path.Combine(directory, file.Group, file.Name + ".bin"); Debug.WriteLine("Saving file '{0}' to '{1}' ({2} vaults)", file.Name, outPath, vaultsToSave.Count); using var bw = new BinaryWriter(File.Open(outPath, FileMode.Create, FileAccess.ReadWrite)); vaultPack.Save(bw, vaultsToSave, new PackSavingOptions()); bw.Close(); } }
public override IList <LoadedDatabaseFile> LoadFiles(Database database, string directory) { List <LoadedDatabaseFile> files = new List <LoadedDatabaseFile>(); foreach (var file in GetFilesToLoad(directory)) { var path = Path.Combine(directory, file); var standardVaultPack = new StandardVaultPack(); using var br = new BinaryReader(File.OpenRead(path)); var vaults = standardVaultPack.Load(br, database, new PackLoadingOptions()); var loadedDatabaseFile = new LoadedDatabaseFile { Name = Path.GetFileNameWithoutExtension(file), Group = "main", Vaults = vaults.Select(v => v.Name).ToList(), LoadedVaults = new List <Vault>(vaults) }; files.Add(loadedDatabaseFile); } return(files); }