aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-07-06 16:36:30 +0200
committerShauren <shauren.trinity@gmail.com>2020-07-06 16:36:30 +0200
commit20e2f3632ae9f9df714a5d51421d21159c85fa30 (patch)
tree2dcf94b882b180d01957f8157311b05d2f525c87 /src/server/game/Maps/Map.cpp
parent80fa086f7d3cc917943d39b8be14da5a9a414f2e (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.cpp23
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);