From 0526b169ffc273e7260c31936373a2b45ce39e5a Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 13 Mar 2018 18:01:38 +0100 Subject: [PATCH] Core/MMaps: fixed loading parent maps --- src/tools/mmaps_generator/MapBuilder.cpp | 3 ++- src/tools/mmaps_generator/PathGenerator.cpp | 26 +++++++++++--------- src/tools/mmaps_generator/TerrainBuilder.cpp | 4 +-- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 80e0dcff5c5..5cc935d6944 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -29,7 +29,7 @@ #include #define MMAP_MAGIC 0x4d4d4150 // 'MMAP' -#define MMAP_VERSION 8 +#define MMAP_VERSION 7 struct MmapTileHeader { @@ -843,6 +843,7 @@ namespace MMAP // DT_TILE_FREE_DATA tells detour to unallocate memory when the tile // is removed via removeTile() dtStatus dtResult = navMesh->addTile(navData, navDataSize, DT_TILE_FREE_DATA, 0, &tileRef); + if (!tileRef || dtResult != DT_SUCCESS) { printf("%s Failed adding tile to navmesh! \n", tileString.c_str()); diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index bd67850c98e..e6e48d9894d 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -28,14 +28,8 @@ using namespace MMAP; -bool checkDirectories(bool debugOutput, std::vector& dbcLocales) +bool checkDirectories(bool debugOutput) { - if (getDirContents(dbcLocales, "dbc") == LISTFILE_DIRECTORY_NOT_FOUND || dbcLocales.empty()) - { - printf("'dbc' directory is empty or does not exist\n"); - return false; - } - std::vector dirFiles; if (getDirContents(dirFiles, "maps") == LISTFILE_DIRECTORY_NOT_FOUND || dirFiles.empty()) @@ -44,6 +38,13 @@ bool checkDirectories(bool debugOutput, std::vector& dbcLocales) return false; } + dirFiles.clear(); + if (getDirContents(dirFiles, "dbc") == LISTFILE_DIRECTORY_NOT_FOUND || dirFiles.empty()) + { + printf("'dbc' directory is empty or does not exist\n"); + return false; + } + dirFiles.clear(); if (getDirContents(dirFiles, "vmaps", "*.vmtree") == LISTFILE_DIRECTORY_NOT_FOUND || dirFiles.empty()) { @@ -293,8 +294,8 @@ int main(int argc, char** argv) return 0; } - std::vector dbcLocales; - if (!checkDirectories(debugOutput, dbcLocales)) + + if (!checkDirectories(debugOutput)) return silent ? -3 : finish("Press ENTER to close...", -3); std::string mapPath = (boost::filesystem::path("dbc") / "Map.dbc").string(); @@ -302,15 +303,16 @@ int main(int argc, char** argv) std::unordered_map> mapData; { DBCFileLoader* loader = new DBCFileLoader(); - if (!loader->Load(mapPath.c_str(), "x")) + char const* mapFmt = "nxxxxxxxxxxxxxxxxxxi"; + if (!loader->Load(mapPath.c_str(), mapFmt)) { delete loader; return silent ? -4 : finish("Failed to load Map.dbc", -4); } - for (uint32 x = 0; x < loader->GetRowSize(); ++x) + for (uint32 x = 0; x < loader->GetNumRows(); ++x) { mapData.emplace(std::piecewise_construct, std::forward_as_tuple(loader->getRecord(x).getUInt(0)), std::forward_as_tuple()); - int16 parentMapId = int16(loader->getRecord(x).getInt(19)); + int16 parentMapId = int16(loader->getRecord(x).getUInt(19)); if (parentMapId != -1) mapData[parentMapId].push_back(loader->getRecord(x).getUInt(0)); } diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 28ef56e8439..b2e47022fe0 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2008-2018 TrinityCore * Copyright (C) 2005-2011 MaNGOS * @@ -786,7 +786,7 @@ namespace MMAP } while (false); - vmapManager->unloadMap(mapID, tileX, tileY); + vmapManager->unloadSingleMap(mapID, tileX, tileY); return retval; }