Exemplo 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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void CreateAndWriteAllMeshes()
        {
            GC.AddMemoryPressure(1 * 1024 * 1024 * 1024);
            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
                        {
                            var adt = WDT.LoadTile(mapId, tileX, tileY);
                            if (adt != null)
                            {
                                // try loading
                                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);
                                    terrain.Tiles[tileX, tileY] = null;
                                    continue;
                                }
                            }
                        }
                        catch (ArgumentException)
                        {
                        }

                        Console.WriteLine(@"Extracting FAILED: Tile ({0}, {1}) in Map {2} could not be loaded", tileX, tileY, mapId);
                    }
                }
            }
            GC.RemoveMemoryPressure(1 * 1024 * 1024 * 1024);
        }
Exemplo n.º 3
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);
                    }
                });
            }