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); } } } }
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); } } } }
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); }
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); } }); }