예제 #1
0
        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");
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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.");
        }