Пример #1
0
        static void ExtractDbcFiles(LocaleMask firstInstalledLocale, LocaleMask localeMask)
        {
            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(localeMask & SharedConst.WowLocaleToCascLocaleFlags[(int)locale]))
                {
                    continue;
                }

                string currentPath = $"{path}/{locale}";
                CreateDirectory(currentPath);

                cascHandler.SetLocale(SharedConst.WowLocaleToCascLocaleFlags[(int)locale]);
                foreach (var fileName in FileList.DBFilesClientList)
                {
                    var dbcStream = cascHandler.ReadFile(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.SetLocale(firstInstalledLocale);

            ExtractCameraFiles();
            ExtractGameTablesFiles();
        }
Пример #2
0
 public void SetLocale(LocaleMask localeMask)
 {
     currentLocale = localeMask;
 }
Пример #3
0
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine(@" ____                    __                      ");
            Console.WriteLine(@"/\  _`\                 /\ \                     ");
            Console.WriteLine(@"\ \ \/\_\  __  __  _____\ \ \___      __   _ __  ");
            Console.WriteLine(@" \ \ \/_/_/\ \/\ \/\ '__`\ \  _ `\  /'__`\/\`'__\");
            Console.WriteLine(@"  \ \ \L\ \ \ \_\ \ \ \L\ \ \ \ \ \/\  __/\ \ \/ ");
            Console.WriteLine(@"   \ \____/\/`____ \ \ ,__/\ \_\ \_\ \____\\ \_\ ");
            Console.WriteLine(@"    \/___/  `/___/> \ \ \/  \/_/\/_/\/____/ \/_/ ");
            Console.WriteLine(@"               /\___/\ \_\                       ");
            Console.WriteLine(@"               \/__/  \/_/    Core Data Extractor");
            Console.WriteLine("\r");

            baseDirectory = Environment.CurrentDirectory;

            if (args.Length > 0)
            {
                baseDirectory = Path.GetDirectoryName(args[0]);
            }

            PrintInstructions();

            string answer = Console.ReadLine();

            if (answer == "5")
            {
                Environment.Exit(0);
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Initializing CASC library...");
            cascHandler = new CASCHandler(baseDirectory);
            Console.WriteLine("Done.");

            List <Locale> locales          = new List <Locale>();
            var           buildInfoLocales = Regex.Matches(cascHandler.buildInfo["Tags"], " ([A-Za-z]{4}) speech");

            foreach (Match m in buildInfoLocales)
            {
                var localFlag = (Locale)Enum.Parse(typeof(Locale), m.Value.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]);

                if (!locales.Contains(localFlag))
                {
                    locales.Add(localFlag);
                }
            }

            LocaleMask installedLocalesMask = (LocaleMask)cascHandler.GetInstalledLocalesMask();
            LocaleMask firstInstalledLocale = LocaleMask.None;

            for (Locale i = 0; i < Locale.Total; ++i)
            {
                if (i == Locale.None)
                {
                    continue;
                }

                if (!Convert.ToBoolean(installedLocalesMask & SharedConst.WowLocaleToCascLocaleFlags[(int)i]))
                {
                    continue;
                }

                firstInstalledLocale = SharedConst.WowLocaleToCascLocaleFlags[(int)i];
                break;
            }

            if (firstInstalledLocale < LocaleMask.None)
            {
                Console.WriteLine("No locales detected");
                return;
            }

            uint build = cascHandler.GetBuildNumber();

            if (build == 0)
            {
                Console.WriteLine("No build detected");
                return;
            }

            Console.WriteLine($"Detected client build: {build}");
            Console.WriteLine($"Detected client locale: {firstInstalledLocale}");
            cascHandler.SetLocale(firstInstalledLocale);
            if (!CliDB.LoadFiles(cascHandler))
            {
                return;
            }

            do
            {
                switch (answer)
                {
                case "1":
                    ExtractDbcFiles(firstInstalledLocale, installedLocalesMask);
                    ExtractMaps(build);
                    break;

                case "2":
                    ExtractVMaps();
                    break;

                case "3":
                    ExtractMMaps();
                    break;

                case "4":
                default:
                    ExtractDbcFiles(firstInstalledLocale, installedLocalesMask);
                    ExtractMaps(build);
                    ExtractVMaps();
                    //ExtractMMaps();
                    break;
                }

                PrintInstructions();
            } while ((answer = Console.ReadLine()) != "5");
        }