Esempio n. 1
0
        public static void ExtractAndWriteAll()
        {
            foreach (MapId mapId in Enum.GetValues(typeof(MapId)))
            {
                var name = TileIdentifier.GetName(mapId);
                if (string.IsNullOrEmpty(name))
                {
                    Console.WriteLine(@"No ADT for map {0}.", mapId);
                    continue;
                }

                var terrain = new SimpleTerrain(mapId);

                for (var tileX = 0; tileX < 64; tileX++)
                {
                    for (var tileY = 0; tileY < 64; tileY++)
                    {
                        string       filePath;
                        MpqLibrarian mpqFinder;
                        if (!ADTReader.TryGetADTPath(mapId, tileX, tileY, out filePath, out mpqFinder))
                        {
                            continue;
                        }
                        // try to extract from MPQ
                        //var adt = ADTReader.ReadADT(terrain, tileX, tileY);
                        //Console.WriteLine(@"EXPORTING: Tile ({0}, {1}) in Map {2} ...", tileX, tileY, mapId);
                        //Console.WriteLine(@"Extraction will take a while, please have patience...");

                        try
                        {
                            var adt = WDT.LoadTile(mapId, tileX, tileY);
                            if (adt != null)
                            {
                                Console.WriteLine(@"Tile ({0}, {1}) in Map {2} has been imported...", tileX, tileY, mapId);
                                Console.WriteLine(@"Writing to file...");

                                // export to file
                                SimpleTileWriter.WriteADT(adt);

                                // try loading again
                                Console.WriteLine(@"Loading extracted tile and generating Navigation mesh...");
                                terrain.ForceLoadTile(tileX, tileY);

                                if (terrain.IsAvailable(tileX, tileY))
                                {
                                    Console.WriteLine(@"Done. Tile ({0}, {1}) in Map {2} has been loaded successfully.", tileX, tileY, mapId);
                                    continue;
                                }
                            }
                        }
                        catch (ArgumentException)
                        {
                        }

                        Console.WriteLine(@"Loading FAILED: Tile ({0}, {1}) in Map {2} could not be loaded", tileX, tileY, mapId);
                    }
                }
            }
        }
Esempio n. 2
0
        public ZoneTreeNode(MapId map, ZoneId zone, List <Point2D> coords) :
            base(zone.ToString(), coords.TransformArray(coordss => new TileTreeNode(map, coordss)))
        {
            Zone        = zone;
            Coordinates = coords;

            foreach (TileTreeNode child in Nodes)
            {
                if (!File.Exists(SimpleTileWriter.GetFileName(map, child.Coords.X, child.Coords.Y)))
                {
                    child.BackColor = TileTreeNode.NotLoadedColor;
                }
            }
        }
Esempio n. 3
0
        public static void ExtractAllADTs()
        {
            foreach (MapId mapId in Enum.GetValues(typeof(MapId)))
            {
                var name = TileIdentifier.GetName(mapId);
                if (string.IsNullOrEmpty(name))
                {
                    Console.WriteLine(@"No ADT for map {0}.", mapId);
                    continue;
                }

                var wdt = new WDT(mapId);

                for (var tileX = 0; tileX < 64; tileX++)
                {
                    for (var tileY = 0; tileY < 64; tileY++)
                    {
                        string       filePath;
                        MpqLibrarian mpqFinder;
                        if (!ADTReader.TryGetADTPath(mapId, tileX, tileY, out filePath, out mpqFinder))
                        {
                            continue;
                        }

                        try
                        {
                            wdt.TileProfile[tileX, tileY] = true;
                            var adt = ADTReader.ReadADT(wdt, tileX, tileY);
                            if (adt != null)
                            {
                                adt.GenerateMapWithNoSimplification();
                                Console.WriteLine(@"Tile ({0}, {1}) in Map {2} has been imported...", tileX, tileY, mapId);
                                Console.WriteLine(@"Writing to file...");

                                // export to file
                                SimpleTileWriter.WriteADT(adt);
                                continue;
                            }
                        }
                        catch (ArgumentException)
                        {
                        }

                        Console.WriteLine(@"Extracting FAILED: Tile ({0}, {1}) in Map {2} could not be loaded", tileX, tileY, mapId);
                    }
                }
            }
        }
Esempio n. 4
0
        public TerrainTile GetOrCreateTile(MapId map, int x, int y)
        {
            Console.Write("Trying to load simple tile... ");
            var tile = LoadTile(map, x, y);

            if (tile == null)
            {
                // load it the slow way
                var start = DateTime.Now;
                Console.WriteLine();
                Console.Write("Tile could not be found - Decompressing...");

                if (!BackupTileSource.TileProfile[x, y])
                {
                    throw new ArgumentException(String.Format("Could not read tile (Map: {0} at ({1}, {2})", map, x, y));
                }

                tile = BackupTileSource.GetTile(x, y);
                if (tile == null)
                {
                    throw new ArgumentException(String.Format("Could not read tile (Map: {0} at ({1}, {2})", map, x, y));
                }

                Console.WriteLine("Done - Loading time: {0:0.000}s", (DateTime.Now - start).TotalSeconds);

                // write it back
                Console.Write("Saving decompressed tile... ");
                SimpleTileWriter.WriteADT((ADT)tile);

                tile = LoadTile(x, y);

                Console.WriteLine("Done");
            }
            else
            {
                Console.WriteLine("Done.");
            }

            tile.EnsureNavMeshLoaded();

            tile.TileId = new TileIdentifier(map, x, y);

            TileProfile[x, y] = true;
            Tiles[x, y]       = tile;

            return(tile);
        }
Esempio n. 5
0
        public override void FillTileProfile()
        {
            var dir = new DirectoryInfo(SimpleTileWriter.GetMapDirectory(MapId));

            if (!dir.Exists)
            {
                return;
            }

            foreach (var file in dir.EnumerateFiles())
            {
                int tileX, tileY;
                if (SimpleTileWriter.GetTileCoordsFromFileName(file.Name, out tileX, out tileY))
                {
                    TileProfile[tileX, tileY] = true;
                }
            }
        }
Esempio n. 6
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                MapId mapId;
                int   tileX, tileY;

                if (trigger.Text.HasNext)
                {
                    mapId = trigger.Text.NextEnum(MapId.End);
                    tileX = trigger.Text.NextInt(-1);
                    tileY = trigger.Text.NextInt(-1);
                }
                else if (trigger.Args.Character == null)
                {
                    trigger.Reply("You did not specify map id and tile location.");
                    return;
                }
                else
                {
                    mapId = trigger.Args.Character.MapId;
                    PositionUtil.GetTileXYForPos(trigger.Args.Character.Position, out tileX, out tileY);
                }

                var terrain = TerrainMgr.GetTerrain(mapId);

                if (terrain == null)
                {
                    trigger.Reply("Invalid MapId.");
                    return;
                }

                if (!PositionUtil.VerifyTileCoords(tileX, tileY))
                {
                    trigger.Reply("Invalid tile coordinates.");
                    return;
                }

                trigger.Reply("Loading tile...");
                RealmServer.RealmServer.IOQueue.AddMessage(() =>
                {
                    terrain.ForceLoadTile(tileX, tileY);

                    if (terrain.IsAvailable(tileX, tileY))
                    {
                        trigger.Reply("Done. Tile ({0}, {1}) in Map {2} has been loaded.", tileX, tileY, mapId);
                    }
                    else
                    {
                        // try to extract from MPQ
                        //var adt = ADTReader.ReadADT(terrain, tileX, tileY);
                        trigger.Reply("WARNING: Tile ({0}, {1}) in Map {2} has not been exported yet...", tileX, tileY, mapId);
                        trigger.Reply("Extraction will take a while and block the IO queue, please have patience...");

                        var adt = WDT.LoadTile(mapId, tileX, tileY);
                        if (adt != null)
                        {
                            trigger.Reply("Tile ({0}, {1}) in Map {2} has been imported...", tileX, tileY, mapId);
                            trigger.Reply("Writing to file...");

                            // export to file
                            SimpleTileWriter.WriteADT(adt);

                            // try loading again
                            trigger.Reply("Loading extracted tile and generating Navigation mesh...");
                            terrain.ForceLoadTile(tileX, tileY);

                            if (terrain.IsAvailable(tileX, tileY))
                            {
                                trigger.Reply("Done. Tile ({0}, {1}) in Map {2} has been loaded successfully.", tileX, tileY, mapId);
                                return;
                            }
                        }

                        trigger.Reply("Loading FAILED: Tile ({0}, {1}) in Map {2} could not be loaded", tileX, tileY, mapId);
                    }
                });
            }