Пример #1
0
        public static void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            _cache = new Dictionary <int, string>(1000);
            _gameobjectDisplayInfo           = MpqManager.GetDB6("GameobjectDisplayInfo");
            _cachedGameobjectDisplayInfoRows = _gameobjectDisplayInfo.Rows.ToArray();

            _cachedGameobjectDisplayInfoRecords = new GameobjectDisplayInfoEntry.GameobjectDisplayInfoDb2Record[_cachedGameobjectDisplayInfoRows.Length];
            for (int i = 0; i < _cachedGameobjectDisplayInfoRows.Length - 1; i++)
            {
                _cachedGameobjectDisplayInfoRecords[i] = DB6Reader.ByteToType <GameobjectDisplayInfoEntry.GameobjectDisplayInfoDb2Record>(_cachedGameobjectDisplayInfoRows[i]);
            }

            /*_fileData = MpqManager.GetDBC("FileData");
             * _filaDataEntries = _fileData.Records.Select(r => new FileDataEntry(r));*/
            // FileData no longer requires, we can open files directly from their FileDataId, but need a CascLib update first.
            _myConn = new MySqlConnection("server=127.0.0.1; user id=tnb; password=tnb006; database=offydump;");
            _myConn.Open();

            /*List<MapEntry> titi = PhaseHelper.GetAllMaps();
             * foreach (MapEntry e in titi)
             * {
             *  string sqlcode = "INSERT INTO Maps VALUES (" + e.Id + ",'" + e.InternalName.Replace("'", "\\'") + "','" + e.Name.Replace("'", "\\'") + "',";
             *  sqlcode += (int)e.InstanceType + "," + (int)e.MapType + "," + e.PhaseParent + "," + e.Flags + ");";
             *  System.Console.WriteLine(sqlcode);
             *  var cmd = new MySqlCommand(sqlcode, _myConn);
             *  cmd.ExecuteNonQuery();
             * }*/
            _initialized = true;
        }
Пример #2
0
        public static void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            //MpqManager.InitializeDBC();
            _taxiNodes           = MpqManager.GetDB6("TaxiNodes");
            _taxiPath            = MpqManager.GetDB6("TaxiPath");
            _cachedTaxiNodesRows = _taxiNodes.Rows.ToArray();
            _cachedTaxiPathRows  = _taxiNodes.Rows.ToArray();

            _cachedTaxiPathRecords = new TaxiPath.TaxiPathDb2Record[_cachedTaxiPathRows.Length];
            for (int i = 0; i < _cachedTaxiPathRows.Length - 1; i++)
            {
                _cachedTaxiPathRecords[i] = DB6Reader.ByteToType <TaxiPath.TaxiPathDb2Record>(_cachedTaxiPathRows[i]);
            }
            _cachedTaxiNodesRecords = new TaxiNode.TaxiNodesDb2Record[_cachedTaxiNodesRows.Length];
            for (int i = 0; i < _cachedTaxiNodesRows.Length - 1; i++)
            {
                _cachedTaxiNodesRecords[i] = DB6Reader.ByteToType <TaxiNode.TaxiNodesDb2Record>(_cachedTaxiNodesRows[i]);
            }
            _initialized = true;
        }
Пример #3
0
        static void ExtractCameraFiles()
        {
            Console.WriteLine("Extracting Camera files...");
            var stream = cascHandler.ReadFile("DBFilesClient\\CinematicCamera.db2");

            if (stream == null)
            {
                Console.WriteLine("Unable to open file DBFilesClient\\CinematicCamera.db2s in the archive");
                return;
            }

            Dictionary <uint, CinematicCameraRecord> cinematicCameraStorage = DB6Reader.Read <CinematicCameraRecord>(stream, DB6Metas.CinematicCameraMeta);

            if (cinematicCameraStorage == null)
            {
                Console.WriteLine("Invalid CinematicCamera.db2 file format. Camera extract aborted.\n");
                return;
            }

            List <uint> CameraFileNames = new List <uint>();

            // get camera file list from DB2
            foreach (var record in cinematicCameraStorage.Values)
            {
                CameraFileNames.Add(record.ModelFileDataID);
            }

            Console.WriteLine($"Done! ({CameraFileNames.Count} CinematicCameras loaded)\n");

            string path = $"{baseDirectory}/cameras";

            CreateDirectory(path);

            // extract M2s
            uint count = 0;

            foreach (int cameraFileId in CameraFileNames)
            {
                var cameraStream = cascHandler.ReadFile(cameraFileId);
                if (cameraStream != null)
                {
                    string file = path + $"/File{cameraFileId:X8}.xxx";
                    if (!File.Exists(file))
                    {
                        FileWriter.WriteFile(cameraStream, file);
                        ++count;
                    }
                }
                else
                {
                    Console.WriteLine($"Unable to open file {$"File{cameraFileId:X8}.xxx"} in the archive: \n");
                }
            }

            Console.WriteLine($"Extracted {count} Camera files.");
        }
Пример #4
0
        public static void Initialize()
        {
            if (_initialized)
            {
                return;
            }


            _map         = MpqManager.GetDB6("Map");
            _entries     = _map.Rows.Select(DB6Reader.ByteToType <WoWMap.MapDbcRecord>);
            _initialized = true;
        }
Пример #5
0
        static void ExtractVMaps()
        {
            Console.WriteLine("Extracting Vmap files...");

            CreateDirectory(wmoDirectory);
            File.Delete(wmoDirectory + "dir_bin");

            // Extract models, listed in GameObjectDisplayInfo.dbc
            VmapFile.ExtractGameobjectModels();

            Console.WriteLine("Read Map.dbc file... ");
            if (mapStorage == null)
            {
                var stream = cascHandler.ReadFile("DBFilesClient\\Map.db2");
                if (stream == null)
                {
                    Console.WriteLine("Unable to open file DBFilesClient\\Map.db2 in the archive\n");
                    return;
                }
                mapStorage = DB6Reader.Read <MapRecord>(stream, DB6Metas.MapMeta);
            }

            if (mapStorage == null)
            {
                Console.WriteLine("Fatal error: Invalid Map.db2 file format!\n");
                return;
            }

            VmapFile.ParsMapFiles();
            Console.WriteLine("Extracting Done!");

            Console.WriteLine("Converting Vmap files...");
            CreateDirectory("./vmaps");

            TileAssembler ta = new TileAssembler(wmoDirectory, "vmaps");

            if (!ta.convertWorld2())
            {
                return;
            }

            Console.WriteLine("Converting Done!");
        }
Пример #6
0
        public static void ParsMapFiles()
        {
            var stream = Program.cascHandler.ReadFile("DBFilesClient\\Map.db2");

            if (stream == null)
            {
                Console.WriteLine("Unable to open file DBFilesClient\\Map.db2 in the archive\n");
                return;
            }

            var mapStorage = DB6Reader.Read <MapRecord>(stream, DB6Metas.MapMeta);

            if (mapStorage == null)
            {
                Console.WriteLine("Fatal error: Invalid Map.db2 file format!\n");
                return;
            }

            foreach (var record in mapStorage.Values)
            {
                WDTFile WDT = new WDTFile();
                if (WDT.init($"World\\Maps\\{record.Directory}\\{record.Directory}.wdt", record.Id))
                {
                    Console.Write($"Processing Map {record.Id}\n");
                    for (uint x = 0; x < 64; ++x)
                    {
                        for (uint y = 0; y < 64; ++y)
                        {
                            ADTFile ADT = new ADTFile();
                            ADT.init($"World\\Maps\\{record.Directory}\\{record.Directory}_{x}_{y}_obj0.adt", record.Id, x, y);
                        }
                        // draw progress bar
                        Console.Write($"Processing........................{(100 * (x + 1)) / 64}%\r");
                    }
                    Console.Write("\n");
                }
            }
        }
Пример #7
0
        public static void ExtractGameobjectModels()
        {
            Console.WriteLine("Extracting GameObject models...");

            var stream = Program.cascHandler.ReadFile("DBFilesClient\\GameObjectDisplayInfo.db2");

            if (stream == null)
            {
                Console.WriteLine("Unable to open file DBFilesClient\\Map.db2 in the archive\n");
                return;
            }
            var GameObjectDisplayInfoStorage = DB6Reader.Read <GameObjectDisplayInfoRecord>(stream, DB6Metas.GameObjectDisplayInfoMeta);

            if (GameObjectDisplayInfoStorage == null)
            {
                Console.WriteLine("Fatal error: Invalid GameObjectDisplayInfo.db2 file format!\n");
                return;
            }

            string modelListPath = Program.wmoDirectory + "temp_gameobject_models";

            using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(modelListPath, FileMode.Create, FileAccess.Write)))
            {
                foreach (var record in GameObjectDisplayInfoStorage.Values)
                {
                    uint fileId = record.FileDataID;
                    if (fileId == 0)
                    {
                        continue;
                    }

                    bool   result = false;
                    string header;
                    if (!GetHeaderMagic(fileId, out header))
                    {
                        continue;
                    }

                    string fileName = $"File{fileId:X8}.xxx";
                    if (header == "REVM")
                    {
                        result = ExtractSingleWmo(fileId);
                    }
                    else if (header == "MD20" || header == "MD21")
                    {
                        result = ExtractSingleModel(fileId);
                    }
                    //else
                    //ASSERT(false, "%s header: %d - %c%c%c%c", fileId, header, (header >> 24) & 0xFF, (header >> 16) & 0xFF, (header >> 8) & 0xFF, header & 0xFF);

                    if (result)
                    {
                        binaryWriter.Write(record.Id);
                        binaryWriter.Write(fileName.Length);
                        binaryWriter.WriteString(fileName);
                    }
                }
            }

            Console.WriteLine("Done!");
        }
Пример #8
0
        public override IEnumerable <string> GetFileNames()
        {
            Index++;

            DB6Reader mid = new DB6Reader(Path.Combine(BruteforceConfig.DB2Folder, "ManifestInterfaceData.db2"));

            foreach (var row in mid)
            {
                yield return(string.Format("{0}{1}", row.Value.GetField <string>(0), row.Value.GetField <string>(1)));
            }

            Index++;

            DB6Reader ls = new DB6Reader(Path.Combine(BruteforceConfig.DB2Folder, "LightSkybox.db2"));

            foreach (var row in ls)
            {
                if (row.Value.GetField <string>(0) != string.Empty)
                {
                    yield return(string.Format("{0}", row.Value.GetField <string>(0)));
                }
            }

            Index++;

            DB6Reader maps = new DB6Reader(Path.Combine(BruteforceConfig.DB2Folder, "Map.db2"));

            foreach (var map in maps)
            {
                string folder = map.Value.GetField <string>(0);

                yield return(string.Format("World\\Maps\\{0}\\{0}.tex", folder));

                yield return(string.Format("World\\Maps\\{0}\\{0}.wdl", folder));

                yield return(string.Format("World\\Maps\\{0}\\{0}.wdt", folder));

                yield return(string.Format("World\\Maps\\{0}\\{0}_occ.wdt", folder));

                yield return(string.Format("World\\Maps\\{0}\\{0}_lgt.wdt", folder));

                for (int i = 0; i < 64; ++i)
                {
                    for (int j = 0; j < 64; ++j)
                    {
                        yield return(string.Format("World\\Maps\\{0}\\{0}_{1}_{2}.adt", folder, i, j));

                        yield return(string.Format("World\\Maps\\{0}\\{0}_{1}_{2}_lod.adt", folder, i, j));

                        yield return(string.Format("World\\Maps\\{0}\\{0}_{1}_{2}_obj0.adt", folder, i, j));

                        yield return(string.Format("World\\Maps\\{0}\\{0}_{1}_{2}_obj1.adt", folder, i, j));

                        yield return(string.Format("World\\Maps\\{0}\\{0}_{1}_{2}_tex0.adt", folder, i, j));

                        yield return(string.Format("World\\Maps\\{0}\\{0}_{1}_{2}_tex1.adt", folder, i, j));

                        yield return(string.Format("World\\maptextures\\{0}\\{0}_{1:D2}_{2:D2}.blp", folder, i, j));

                        yield return(string.Format("World\\maptextures\\{0}\\{0}_{1:D2}_{2:D2}_n.blp", folder, i, j));

                        yield return(string.Format("World\\Minimaps\\{0}\\map{1:D2}_{2:D2}.blp", folder, i, j));

                        yield return(string.Format("World\\Minimaps\\{0}\\noLiquid_map{1:D2}_{2:D2}.blp", folder, i, j));
                    }
                }
            }

            Index++;

            //Interface\WorldMap\%s\%s%d.blp WorldMapArea[3], WorldMapArea[3], 1-12
            //Interface\WorldMap\%s\%s%d_%d.blp WorldMapArea[3], WorldMapArea[3], floor, 1-12

            DB6Reader wmas = new DB6Reader(Path.Combine(BruteforceConfig.DB2Folder, "WorldMapArea.db2"));
            DB6Reader wmos = new DB6Reader(Path.Combine(BruteforceConfig.DB2Folder, "WorldMapOverlay.db2"));

            foreach (var wma in wmas)
            {
                var name = wma.Value.GetField <string>(0);

                if ((wma.Value.GetField <int>(10) & 0x200) != 0)
                {
                    name = wmas.GetRow(wma.Value.GetField <int>(9)).GetField <string>(0);
                }

                yield return(string.Format(@"Interface\WorldMap\{0}\{0}.zmp", name));

                for (int i = 1; i <= 12; ++i)
                {
                    yield return(string.Format(@"Interface\WorldMap\{0}\{0}{1}.blp", name, i));

                    for (int j = 0; j < 30; ++j)
                    {
                        yield return(string.Format(@"Interface\WorldMap\{0}\{0}{1}_{2}.blp", name, j, i));
                    }
                }

                var id = wma.Key;

                foreach (var wmo in wmos)
                {
                    if (wmo.Value.GetField <int>(3) == id)
                    {
                        for (int i = 1; i <= 20; ++i)
                        {
                            yield return(string.Format(@"Interface\WorldMap\{0}\{1}{2}.blp", name, wmo.Value.GetField <string>(0), i));
                        }
                    }
                }
            }

            Index++;

            DB6Reader at = new DB6Reader(Path.Combine(BruteforceConfig.DB2Folder, "AreaTable.db2"));

            foreach (var a in at)
            {
                var name = a.Value.GetField <string>(1);

                for (int i = 1; i <= 12; ++i)
                {
                    yield return(string.Format(@"Interface\WorldMap\{0}\{0}{1}.blp", name, i));

                    for (int j = 0; j < 30; ++j)
                    {
                        yield return(string.Format(@"Interface\WorldMap\{0}\{0}{1}_{2}.blp", name, j, i));
                    }
                }
            }

            //Interface\WorldMap\MicroDungeon\%s\%s\%s%d.blp WorldMapArea[3], ?, ?, 1-12
            //Interface\WorldMap\MicroDungeon\%s\%s\%s%d_%d.blp WorldMapArea[3], ?, ?, floor, 1-12

            foreach (var wma in wmas)
            {
                var name = wma.Value.GetField <string>(0);

                var areaid = wma.Value.GetField <int>(6);

                //if ((wma.Value.GetField<int>(10) & 0x200) != 0)
                //    areaid = wma.Value.GetField<int>(6);

                foreach (var a in at)
                {
                    if (a.Value.GetField <int>(5) == areaid)
                    {
                        for (int i = 1; i <= 12; ++i)
                        {
                            var md = a.Value.GetField <string>(1);

                            yield return(string.Format(@"Interface\WorldMap\MicroDungeon\{0}\{1}\{1}{2}.blp", name, md, i));

                            for (int j = 0; j < 39; ++j)
                            {
                                yield return(string.Format(@"Interface\WorldMap\MicroDungeon\{0}\{1}\{1}{2}_{3}.blp", name, md, j, i));
                            }
                        }
                    }
                }
            }
        }
Пример #9
0
        static void ExtractMaps(uint build)
        {
            Console.WriteLine("Extracting maps...\n");
            Console.WriteLine("Loading db2 files...\n");

            var stream = cascHandler.ReadFile("DBFilesClient\\Map.db2");

            if (stream == null)
            {
                Console.WriteLine("Unable to open file DBFilesClient\\Map.db2 in the archive\n");
                return;
            }
            mapStorage = DB6Reader.Read <MapRecord>(stream, DB6Metas.MapMeta);
            if (mapStorage == null)
            {
                Console.WriteLine("Fatal error: Invalid Map.db2 file format!\n");
                return;
            }

            stream = cascHandler.ReadFile("DBFilesClient\\LiquidType.db2");
            if (stream == null)
            {
                Console.WriteLine("Unable to open file DBFilesClient\\LiquidType.db2 in the archive\n");
                return;
            }

            liquidTypeStorage = DB6Reader.Read <LiquidTypeRecord>(stream, DB6Metas.LiquidTypeMeta);
            if (liquidTypeStorage == null)
            {
                Console.WriteLine("Fatal error: Invalid LiquidType.db2 file format!\n");
                return;
            }

            string path = $"{baseDirectory}/maps";

            CreateDirectory(path);

            Console.WriteLine("Convert map files\n");
            int count = 1;

            foreach (var map in mapStorage.Values)
            {
                Console.Write($"Extract {map.MapName} ({count}/{mapStorage.Count})                  \n");
                // Loadup map grid data
                string      storagePath = $"World\\Maps\\{map.Directory}\\{map.Directory}.wdt";
                ChunkedFile wdt         = new ChunkedFile();
                if (wdt.loadFile(cascHandler, storagePath))
                {
                    wdt_MAIN main = wdt.GetChunk("MAIN").As <wdt_MAIN>();
                    for (int y = 0; y < 64; ++y)
                    {
                        for (int x = 0; x < 64; ++x)
                        {
                            if (Convert.ToBoolean(main.adt_list[y][x].flag & 0x1))
                            {
                                storagePath = $"World\\Maps\\{map.Directory}\\{map.Directory}_{x}_{y}.adt";
                                string outputFileName = $"{path}/{map.Id:D4}_{y:D2}_{x:D2}.map";
                                MapFile.ConvertADT(cascHandler, storagePath, outputFileName, y, x, build);
                            }
                        }
                        // draw progress bar
                        Console.Write($"Processing........................{(100 * (y + 1)) / 64}%\r");
                    }
                    count++;
                }
            }
            Console.WriteLine("\n");
        }