Exemple #1
0
        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);
                            }
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
                }
            }
        }
Exemple #5
0
        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());
            }
        }
Exemple #6
0
        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();
            }
        }
Exemple #7
0
        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);
        }