private void AddUncategorizedFilesWithExtension(PAKFileSystem fieldPak, string ext) { foreach (var file in UncategorizedFiles.Where(x => x.Key.EndsWith(ext))) { fieldPak.AddFile(file.Key, file.Value, false, ConflictPolicy.Replace); } }
public void Save(string directoryPath, int major, int minor) { Directory.CreateDirectory(directoryPath); using (var fieldPak = new PAKFileSystem(FormatVersion.Version1)) { TryAddFile(fieldPak, DefaultCamera, $"data/f{major:D3}_{minor:D3}.CMR", o => o.Save()); // FBN for (var i = 0; i < Layers.Count; i++) { TryAddFile(fieldPak, Layers[i].ObjectPlacement, $"data/f{major:D3}_{minor:D3}_{i:D2}.FBN", o => o.Save()); } // FPA //TryAddFile( fieldPak, Fpa, $"data/f{major:D3}_{minor:D3}.FPA", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldPak, "FPA"); // MDT //TryAddFile( fieldPak, Mdt, $"data/f{major:D3}_{minor:D3}.MDT", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldPak, "MDT"); // PCD //for ( int i = 1; i < 9; i++ ) // TryAddFile( fieldPak, Pcds[ i ], $"data/f{major:D3}_{minor:D3}_{i:D3}.PCD", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldPak, "PCD"); for (int i = 0; i < Layers.Count; i++) { TryAddFile(fieldPak, Layers[i].HitTable, $"hit/f{major:D3}_{minor:D3}_{i:D2}.HTB", o => o.Save()); } for (int i = 0; i < Layers.Count; i++) { TryAddFile(fieldPak, Layers[i].HitScript, $"hit/fhit_{major:D3}_{minor:D3}_{i:D2}.bf", o => o.ToStream()); } TryAddFile(fieldPak, InitScript, $"init/fini_{major:D3}_{minor:D3}.bf", o => o.ToStream()); // CLT AddUncategorizedFilesWithExtension(fieldPak, "CLT"); // SHT //TryAddFile( fieldPak, Sht, $"sht/f{major:D3}_{minor:D3}.SHT", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldPak, "SHT"); // TBL //TryAddFile( fieldPak, Tbl, $"fext{major:D3}_{minor:D3}.tbl", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldPak, "tbl"); // AWB AddUncategorizedFilesWithExtension(fieldPak, "AWB"); // Remaining uncategorized files foreach (var file in UncategorizedFiles.Where(x => !fieldPak.Exists(x.Key))) { fieldPak.AddFile(file.Key, file.Value, false, ConflictPolicy.Replace); } fieldPak.Save(Path.Combine(directoryPath, $"f{major:D3}_{minor:D3}.pac")); } using (var fieldNpcPak = new PAKFileSystem(FormatVersion.Version1)) { // fnpc BF for (var i = 0; i < Layers.Count; i++) { TryAddFile(fieldNpcPak, Layers[i].NpcScript, $"npc/fnpc{major:D3}_{minor:D3}_{i:D2}.bf", o => o.ToStream()); } // FNT //for ( var i = 0; i < Layers.Count; i++ ) // TryAddFile( fieldNpcPak, Layers[i].Fnt, $"npc/fnt{major:D3}_{minor:D3}_{i:D2}.FNT", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldNpcPak, "FNT"); // FPC //for ( var i = 0; i < Layers.Count; i++ ) // TryAddFile( fieldNpcPak, Layers[i].Fpc, $"npc/fpc{major:D3}_{minor:D3}_{i:D2}.FPC", o => o.Save() ); AddUncategorizedFilesWithExtension(fieldNpcPak, "FPC"); foreach (var file in UncategorizedNpcFiles.Where(x => !fieldNpcPak.Exists(x.Key))) { fieldNpcPak.AddFile(file.Key, file.Value, false, ConflictPolicy.Replace); } fieldNpcPak.Save(Path.Combine(directoryPath, $"fnpc{major:D3}_{minor:D3}.pac")); } }