diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-07-06 16:36:30 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-07-06 16:36:30 +0200 |
commit | 20e2f3632ae9f9df714a5d51421d21159c85fa30 (patch) | |
tree | 2dcf94b882b180d01957f8157311b05d2f525c87 /src/server/game/Maps/Map.cpp | |
parent | 80fa086f7d3cc917943d39b8be14da5a9a414f2e (diff) |
Core/Maps: Added optional *.tilelist file to map_extractor output which contains a list of existing tiles to speed up map creation in worldserver
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index a76fa61851d..7546b298ff6 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -92,6 +92,29 @@ Map::~Map() void Map::DiscoverGridMapFiles() { + std::string tileListName = Trinity::StringFormat("%smaps/%04u.tilelist", sWorld->GetDataPath().c_str(), GetId()); + // tile list is optional + if (FILE* tileList = fopen(tileListName.c_str(), "rb")) + { + u_map_magic mapMagic; + u_map_magic versionMagic; + uint32 build; + char tilesData[MAX_NUMBER_OF_GRIDS * MAX_NUMBER_OF_GRIDS]; + if (fread(&mapMagic.asUInt, sizeof(u_map_magic), 1, tileList) == 1 + && mapMagic.asUInt == MapMagic.asUInt + && fread(&versionMagic.asUInt, sizeof(u_map_magic), 1, tileList) == 1 + && versionMagic.asUInt == MapVersionMagic.asUInt + && fread(&build, sizeof(build), 1, tileList) == 1 + && fread(&tilesData[0], MAX_NUMBER_OF_GRIDS * MAX_NUMBER_OF_GRIDS, 1, tileList) == 1) + { + i_gridFileExists = std::bitset<MAX_NUMBER_OF_GRIDS * MAX_NUMBER_OF_GRIDS>(tilesData, Trinity::Containers::Size(tilesData)); + fclose(tileList); + return; + } + + fclose(tileList); + } + for (uint32 gx = 0; gx < MAX_NUMBER_OF_GRIDS; ++gx) for (uint32 gy = 0; gy < MAX_NUMBER_OF_GRIDS; ++gy) i_gridFileExists[gx * MAX_NUMBER_OF_GRIDS + gy] = ExistMap(GetId(), gx, gy, false); |