From 20e2f3632ae9f9df714a5d51421d21159c85fa30 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 6 Jul 2020 16:36:30 +0200 Subject: Core/Maps: Added optional *.tilelist file to map_extractor output which contains a list of existing tiles to speed up map creation in worldserver --- src/server/game/Maps/Map.cpp | 23 +++++++++++++++++++++++ src/server/game/Maps/Map.h | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'src/server') 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(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); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index d1cf310262d..7fd66491168 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -91,7 +91,7 @@ struct map_fileheader { u_map_magic mapMagic; u_map_magic versionMagic; - u_map_magic buildMagic; + uint32 buildMagic; uint32 areaMapOffset; uint32 areaMapSize; uint32 heightMapOffset; -- cgit v1.2.3