static void ExtractGameTablesFiles() { Console.WriteLine("Extracting game tables...\n"); string path = $"{BaseDirectory}/gt"; CreateDirectory(path); uint count = 0; foreach (var fileName in FileList.GameTables) { var dbcFile = CascHandler.OpenFile(fileName); if (dbcFile == null) { Console.WriteLine($"Unable to open file {fileName} in the archive\n"); continue; } string file = $"{path}/{fileName.Replace("GameTables\\", "")}"; if (!File.Exists(file)) { FileWriter.WriteFile(dbcFile, file); ++count; } } Console.WriteLine($"Extracted {count} files\n\n"); }
static void ExtractDbcFiles() { string path = $"{BaseDirectory}/dbc"; CreateDirectory(path); Console.WriteLine("Extracting db2 files..."); uint count = 0; for (Locale locale = 0; locale < Locale.Total; ++locale) { if (locale == Locale.None) { continue; } if (!Convert.ToBoolean(installedLocalesMask & SharedConst.WowLocaleToCascLocaleFlags[(int)locale])) { continue; } string currentPath = $"{path}/{locale}"; CreateDirectory(currentPath); CascHandler.Root.SetFlags(SharedConst.WowLocaleToCascLocaleFlags[(int)locale]); foreach (var(fileDataId, fileName) in FileList.DBFilesClientList) { var dbcStream = CascHandler.OpenFile(fileDataId); if (dbcStream == null) { Console.WriteLine($"Unable to open file {fileName} in the archive for locale {locale}"); continue; } // Unused DB2 file, 0 records var reader = new BinaryReader(dbcStream); reader.ReadUInt32(); var recordCount = reader.ReadUInt32(); if (recordCount == 0) { continue; } reader.BaseStream.Position = 0; dbcStream.Position = 0; FileWriter.WriteFile(dbcStream, currentPath + $"/{ fileName.Replace(@"\\", "").Replace(@"DBFilesClient\", "")}"); count++; } } Console.WriteLine($"Extracted {count} db2 files."); CascHandler.Root.SetFlags(firstInstalledLocale); }
static void ExtractDbcFiles() { string path = $"{BaseDirectory}/dbc"; CreateDirectory(path); Console.WriteLine("Extracting db2 files..."); uint count = 0; for (Locale locale = 0; locale < Locale.Total; ++locale) { if (locale == Locale.None) { continue; } if (!Convert.ToBoolean(installedLocalesMask & SharedConst.WowLocaleToCascLocaleFlags[(int)locale])) { continue; } string currentPath = $"{path}/{locale}"; CreateDirectory(currentPath); CascHandler.Root.SetFlags(SharedConst.WowLocaleToCascLocaleFlags[(int)locale], ContentFlags.None); foreach (var fileName in FileList.DBFilesClientList) { var dbcStream = CascHandler.OpenFile(fileName); if (dbcStream == null) { Console.WriteLine($"Unable to open file {fileName} in the archive for locale {locale}\n"); continue; } FileWriter.WriteFile(dbcStream, currentPath + $"/{ fileName.Replace(@"\\", "").Replace(@"DBFilesClient\", "")}"); count++; } } Console.WriteLine($"Extracted {count} db2 files."); CascHandler.Root.SetFlags(firstInstalledLocale, ContentFlags.None); }
static void ExtractCameraFiles() { Dictionary <uint, CinematicCameraRecord> storage = DBReader.Read <CinematicCameraRecord>("DBFilesClient\\CinematicCamera.db2"); if (storage == null) { Console.WriteLine("Invalid CinematicCamera.db2 file format. Camera extract aborted.\n"); return; } Console.WriteLine($"Extracting ({storage.Values.Count} CinematicCameras!)\n"); string path = $"{BaseDirectory}/cameras"; CreateDirectory(path); // extract M2s uint count = 0; foreach (var cameraRecord in storage.Values) { var cameraStream = CascHandler.OpenFile((int)cameraRecord.ModelFileDataID); if (cameraStream != null) { string file = path + $"/FILE{cameraRecord.ModelFileDataID:X8}.xxx"; if (!File.Exists(file)) { FileWriter.WriteFile(cameraStream, file); ++count; } } else { Console.WriteLine($"Unable to open file {$"File{cameraRecord.ModelFileDataID:X8}.xxx"} in the archive: \n"); } } Console.WriteLine($"Extracted {count} Camera files."); }