AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
GridTerrainLoader Class Reference

#include "GridTerrainLoader.h"

Public Member Functions

 GridTerrainLoader (MapGridType &grid, Map *map)
 
void LoadTerrain ()
 

Static Public Member Functions

static bool ExistMap (uint32 mapid, int gx, int gy)
 
static bool ExistVMap (uint32 mapid, int gx, int gy)
 

Private Member Functions

void LoadMap ()
 
void LoadVMap ()
 
void LoadMMap ()
 

Private Attributes

MapGridType_grid
 
Map_map
 

Detailed Description

Constructor & Destructor Documentation

◆ GridTerrainLoader()

GridTerrainLoader::GridTerrainLoader ( MapGridType grid,
Map map 
)
inline
27 : _grid(grid), _map(map) { }
MapGridType & _grid
Definition GridTerrainLoader.h:39
Map * _map
Definition GridTerrainLoader.h:40

Member Function Documentation

◆ ExistMap()

bool GridTerrainLoader::ExistMap ( uint32  mapid,
int  gx,
int  gy 
)
static
96{
97 std::string const mapFileName = Acore::StringFormat("{}maps/{:03}{:02}{:02}.map", sWorld->GetDataPath(), mapid, gx, gy);
98 std::ifstream fileStream(mapFileName, std::ios::binary);
99 if (fileStream.fail())
100 {
101 LOG_DEBUG("maps", "Map file '{}': error opening file", mapFileName);
102 return false;
103 }
104
105 map_fileheader header;
106 if (!fileStream.read(reinterpret_cast<char*>(&header), sizeof(header)))
107 {
108 LOG_DEBUG("maps", "Map file '{}': unable to read header", mapFileName);
109 return false;
110 }
111
112 if (header.mapMagic != MapMagic.asUInt || header.versionMagic != MapVersionMagic)
113 {
114 LOG_ERROR("maps", "Map file '{}' is from an incompatible map version ({:.4u} v{}), {:.4s} v{} is expected. Please pull your source, recompile tools and recreate maps using the updated mapextractor, then replace your old map files with new files.",
115 mapFileName, 4, header.mapMagic, header.versionMagic, 4, MapMagic.asChar, MapVersionMagic);
116 return false;
117 }
118
119 return true;
120}
const uint32 MapVersionMagic
Definition GridTerrainData.h:54
const u_map_magic MapMagic
Definition GridTerrainData.h:53
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
#define LOG_DEBUG(filterType__,...)
Definition Log.h:169
#define sWorld
Definition World.h:363
std::string StringFormat(FormatString< Args... > fmt, Args &&... args)
Default AC string format function.
Definition StringFormat.h:34
Definition GridTerrainData.h:60
uint32 mapMagic
Definition GridTerrainData.h:61
uint32 versionMagic
Definition GridTerrainData.h:62
char asChar[4]
Definition GridTerrainData.h:49
uint32 asUInt
Definition GridTerrainData.h:50

References u_map_magic::asChar, u_map_magic::asUInt, LOG_DEBUG, LOG_ERROR, MapMagic, map_fileheader::mapMagic, MapVersionMagic, Acore::StringFormat(), sWorld, and map_fileheader::versionMagic.

Referenced by MapMgr::ExistMapAndVMap(), and misc_commandscript::HandleGPSCommand().

◆ ExistVMap()

bool GridTerrainLoader::ExistVMap ( uint32  mapid,
int  gx,
int  gy 
)
static
123{
125 {
126 if (vmgr->isMapLoadingEnabled())
127 {
128 VMAP::LoadResult result = vmgr->existsMap((sWorld->GetDataPath() + "vmaps").c_str(), mapid, gx, gy);
129 std::string name = vmgr->getDirFileName(mapid, gx, gy);
130 switch (result)
131 {
133 break;
135 LOG_DEBUG("maps", "VMap file '{}' does not exist", (sWorld->GetDataPath() + "vmaps/" + name));
136 LOG_DEBUG("maps", "Please place VMAP files (*.vmtree and *.vmtile) in the vmap directory ({}), or correct the DataDir setting in your worldserver.conf file.", (sWorld->GetDataPath() + "vmaps/"));
137 return false;
139 LOG_ERROR("maps", "VMap file '{}' couldn't be loaded", (sWorld->GetDataPath() + "vmaps/" + name));
140 LOG_ERROR("maps", "This is because the version of the VMap file and the version of this module are different, please re-extract the maps with the tools compiled with this module.");
141 return false;
142 }
143 }
144 }
145
146 return true;
147}
Definition IVMapMgr.h:78
static VMapMgr2 * createOrGetVMapMgr()
Definition VMapFactory.cpp:27
LoadResult
Definition IVMapMgr.h:42

References VMAP::VMapFactory::createOrGetVMapMgr(), VMAP::FileNotFound, LOG_DEBUG, LOG_ERROR, VMAP::Success, sWorld, and VMAP::VersionMismatch.

Referenced by MapMgr::ExistMapAndVMap(), and misc_commandscript::HandleGPSCommand().

◆ LoadMap()

void GridTerrainLoader::LoadMap ( )
private
20{
21 // Instances will point to the parent maps terrain data
22 if (_map->GetInstanceId() != 0)
23 {
24 // load grid map for base map
25 Map* parentMap = const_cast<Map*>(_map->GetParent());
26
27 // GetGridTerrainData will create the parent map grid
29 return;
30 }
31
32 // map file name
33 std::string const mapFileName = Acore::StringFormat("{}maps/{:03}{:02}{:02}.map", sWorld->GetDataPath(), _map->GetId(), _grid.GetX(), _grid.GetY());
34
35 // loading data
36 LOG_DEBUG("maps", "Loading map {}", mapFileName);
37 std::unique_ptr<GridTerrainData> terrainData = std::make_unique<GridTerrainData>();
38 TerrainMapDataReadResult loadResult = terrainData->Load(mapFileName);
39 if (loadResult == TerrainMapDataReadResult::Success)
40 _grid.SetTerrainData(std::move(terrainData));
41 else
42 {
44 LOG_ERROR("maps", "Map file '{}' is from an incompatible clientversion. Please recreate using the mapextractor.", mapFileName);
45 else
46 LOG_DEBUG("maps", "Error (result: {}) loading map file: {}", uint32(loadResult), mapFileName);
47 }
48
49 sScriptMgr->OnLoadGridMap(_map, _grid.GetTerrainData(), _grid.GetX(), _grid.GetY());
50}
std::uint32_t uint32
Definition Define.h:107
TerrainMapDataReadResult
Definition GridTerrainData.h:210
#define sScriptMgr
Definition ScriptMgr.h:727
uint16 GetX() const
Definition MapGrid.h:42
uint16 GetY() const
Definition MapGrid.h:43
void SetTerrainData(std::shared_ptr< GridTerrainData > terrainData)
Definition MapGrid.h:102
GridTerrainData * GetTerrainData() const
Definition MapGrid.h:100
Definition Map.h:156
Map const * GetParent() const
Definition Map.h:231
std::shared_ptr< GridTerrainData > GetGridTerrainDataSharedPtr(GridCoord const &gridCoord)
Definition Map.cpp:1123
uint32 GetId() const
Definition Map.h:229
uint32 GetInstanceId() const
Definition Map.h:266
Definition GridDefines.h:84

References _grid, _map, Map::GetGridTerrainDataSharedPtr(), Map::GetId(), Map::GetInstanceId(), Map::GetParent(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetTerrainData(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetX(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetY(), InvalidMagic, LOG_DEBUG, LOG_ERROR, MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::SetTerrainData(), sScriptMgr, Acore::StringFormat(), Success, and sWorld.

Referenced by LoadTerrain().

◆ LoadMMap()

void GridTerrainLoader::LoadMMap ( )
private
73{
75 return;
76
78 switch (mmapLoadResult)
79 {
81 LOG_DEBUG("maps", "MMAP loaded name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
83 break;
85 LOG_DEBUG("maps", "Could not load MMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
87 break;
89 LOG_DEBUG("maps", "Ignored MMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
91 break;
92 }
93}
static bool IsPathfindingEnabled(Map const *map)
Definition DisableMgr.cpp:437
static MMapMgr * createOrGetMMapMgr()
Definition MMapFactory.cpp:27
bool loadMap(uint32 mapId, int32 x, int32 y)
Definition MMapMgr.cpp:128
const char * GetMapName() const
Definition Map.cpp:1680
@ MMAP_LOAD_RESULT_ERROR
Definition IMMAPMgr.h:26
@ MMAP_LOAD_RESULT_IGNORED
Definition IMMAPMgr.h:28
@ MMAP_LOAD_RESULT_OK
Definition IMMAPMgr.h:27

References _grid, _map, MMAP::MMapFactory::createOrGetMMapMgr(), Map::GetId(), Map::GetMapName(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetX(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetY(), DisableMgr::IsPathfindingEnabled(), MMAP::MMapMgr::loadMap(), LOG_DEBUG, MMAP::MMAP_LOAD_RESULT_ERROR, MMAP::MMAP_LOAD_RESULT_IGNORED, and MMAP::MMAP_LOAD_RESULT_OK.

Referenced by LoadTerrain().

◆ LoadTerrain()

void GridTerrainLoader::LoadTerrain ( )
10{
11 LoadMap();
12 if (_map->GetInstanceId() == 0)
13 {
14 LoadVMap();
15 LoadMMap();
16 }
17}
void LoadMMap()
Definition GridTerrainLoader.cpp:72
void LoadMap()
Definition GridTerrainLoader.cpp:19
void LoadVMap()
Definition GridTerrainLoader.cpp:52

References _map, Map::GetInstanceId(), LoadMap(), LoadMMap(), and LoadVMap().

Referenced by MapGridManager::CreateGrid().

◆ LoadVMap()

void GridTerrainLoader::LoadVMap ( )
private
53{
54 int vmapLoadResult = VMAP::VMapFactory::createOrGetVMapMgr()->loadMap((sWorld->GetDataPath() + "vmaps").c_str(), _map->GetId(), _grid.GetX(), _grid.GetY());
55 switch (vmapLoadResult)
56 {
58 LOG_DEBUG("maps", "VMAP loaded name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
60 break;
62 LOG_DEBUG("maps", "Could not load VMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
64 break;
66 LOG_DEBUG("maps", "Ignored VMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
68 break;
69 }
70}
int loadMap(const char *pBasePath, unsigned int mapId, int x, int y) override
Definition VMapMgr2.cpp:98
@ VMAP_LOAD_RESULT_ERROR
Definition IVMapMgr.h:36
@ VMAP_LOAD_RESULT_OK
Definition IVMapMgr.h:37
@ VMAP_LOAD_RESULT_IGNORED
Definition IVMapMgr.h:38

References _grid, _map, VMAP::VMapFactory::createOrGetVMapMgr(), Map::GetId(), Map::GetMapName(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetX(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetY(), VMAP::VMapMgr2::loadMap(), LOG_DEBUG, sWorld, VMAP::VMAP_LOAD_RESULT_ERROR, VMAP::VMAP_LOAD_RESULT_IGNORED, and VMAP::VMAP_LOAD_RESULT_OK.

Referenced by LoadTerrain().

Member Data Documentation

◆ _grid

MapGridType& GridTerrainLoader::_grid
private

Referenced by LoadMap(), LoadMMap(), and LoadVMap().

◆ _map

Map* GridTerrainLoader::_map
private

The documentation for this class was generated from the following files: