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
29 : _grid(grid), _map(map) { }
MapGridType & _grid
Definition GridTerrainLoader.h:41
Map * _map
Definition GridTerrainLoader.h:42

Member Function Documentation

◆ ExistMap()

bool GridTerrainLoader::ExistMap ( uint32  mapid,
int  gx,
int  gy 
)
static
95{
96 std::string const mapFileName = Acore::StringFormat("{}maps/{:03}{:02}{:02}.map", sWorld->GetDataPath(), mapid, gx, gy);
97 std::ifstream fileStream(mapFileName, std::ios::binary);
98 if (fileStream.fail())
99 {
100 LOG_DEBUG("maps", "Map file '{}': error opening file", mapFileName);
101 return false;
102 }
103
104 map_fileheader header;
105 if (!fileStream.read(reinterpret_cast<char*>(&header), sizeof(header)))
106 {
107 LOG_DEBUG("maps", "Map file '{}': unable to read header", mapFileName);
108 return false;
109 }
110
111 if (header.mapMagic != MapMagic.asUInt || header.versionMagic != MapVersionMagic)
112 {
113 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.",
114 mapFileName, 4, header.mapMagic, header.versionMagic, 4, MapMagic.asChar, MapVersionMagic);
115 return false;
116 }
117
118 return true;
119}
const uint32 MapVersionMagic
Definition GridTerrainData.h:54
const u_map_magic MapMagic
Definition GridTerrainData.h:53
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
#define sWorld
Definition World.h:316
std::string StringFormat(FormatString< Args... > fmt, Args &&... args)
Default AC string format function.
Definition StringFormat.h:44
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
122{
124 {
125 if (vmgr->isMapLoadingEnabled())
126 {
127 VMAP::LoadResult result = vmgr->existsMap((sWorld->GetDataPath() + "vmaps").c_str(), mapid, gx, gy);
128 std::string name = vmgr->getDirFileName(mapid, gx, gy);
129 switch (result)
130 {
132 break;
134 LOG_DEBUG("maps", "VMap file '{}' does not exist", (sWorld->GetDataPath() + "vmaps/" + name));
135 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/"));
136 return false;
138 LOG_ERROR("maps", "VMap file '{}' couldn't be loaded", (sWorld->GetDataPath() + "vmaps/" + name));
139 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.");
140 return false;
141 }
142 }
143 }
144
145 return true;
146}
Definition IVMapMgr.h:83
static VMapMgr2 * createOrGetVMapMgr()
Definition VMapFactory.cpp:27
LoadResult
Definition IVMapMgr.h:44

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
21{
22 // Instances will point to the parent maps terrain data, no need to load anything.
23 if (_map->GetInstanceId() != 0)
24 {
25 Map* parentMap = const_cast<Map*>(_map->GetParent());
27 return;
28 }
29
30 // map file name
31 std::string const mapFileName = Acore::StringFormat("{}maps/{:03}{:02}{:02}.map", sWorld->GetDataPath(), _map->GetId(), _grid.GetX(), _grid.GetY());
32
33 // loading data
34 LOG_DEBUG("maps", "Loading map {}", mapFileName);
35 std::unique_ptr<GridTerrainData> terrainData = std::make_unique<GridTerrainData>();
36 TerrainMapDataReadResult loadResult = terrainData->Load(mapFileName);
37 if (loadResult == TerrainMapDataReadResult::Success)
38 _grid.SetTerrainData(std::move(terrainData));
39 else
40 {
42 LOG_ERROR("maps", "Map file '{}' is from an incompatible clientversion. Please recreate using the mapextractor.", mapFileName);
43 else
44 LOG_DEBUG("maps", "Error (result: {}) loading map file: {}", uint32(loadResult), mapFileName);
45 }
46
47 sScriptMgr->OnLoadGridMap(_map, _grid.GetTerrainData(), _grid.GetX(), _grid.GetY());
48}
std::uint32_t uint32
Definition Define.h:107
TerrainMapDataReadResult
Definition GridTerrainData.h:210
#define sScriptMgr
Definition ScriptMgr.h:734
uint16 GetY() const
Definition MapGrid.h:43
GridTerrainData * GetTerrainData() const
Definition MapGrid.h:100
void SetTerrainData(std::shared_ptr< GridTerrainData > terrainData)
Definition MapGrid.h:102
uint16 GetX() const
Definition MapGrid.h:42
Definition Map.h:164
Map const * GetParent() const
Definition Map.h:232
std::shared_ptr< GridTerrainData > GetGridTerrainDataSharedPtr(GridCoord const &gridCoord)
Definition Map.cpp:1073
uint32 GetId() const
Definition Map.h:230
uint32 GetInstanceId() const
Definition Map.h:266
Definition GridDefines.h:88

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

Referenced by LoadTerrain().

◆ LoadMMap()

void GridTerrainLoader::LoadMMap ( )
private
73{
74 int const mmapLoadResult = _map->GetMapCollisionData().LoadMMapTile(_grid.GetX(), _grid.GetY());
75 switch (mmapLoadResult)
76 {
78 LOG_DEBUG("maps", "MMAP loaded name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
80 break;
82 LOG_DEBUG("maps", "Could not load MMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
84 break;
86 LOG_DEBUG("maps", "Ignored MMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
88 break;
89 default:
90 break;
91 }
92}
int LoadMMapTile(uint32 tileX, uint32 tileY)
Definition MapCollisionData.cpp:63
MapCollisionData & GetMapCollisionData()
Definition Map.h:525
const char * GetMapName() const
Definition Map.cpp:1599
@ MMAP_LOAD_RESULT_ERROR
Definition MMapMgr.h:43
@ MMAP_LOAD_RESULT_IGNORED
Definition MMapMgr.h:45
@ MMAP_LOAD_RESULT_OK
Definition MMapMgr.h:44

References _grid, _map, Map::GetId(), Map::GetMapCollisionData(), Map::GetMapName(), MapGrid< GRID_OBJECT_TYPES, FAR_VISIBLE_OBJECT_TYPES >::GetX(), MapGrid< GRID_OBJECT_TYPES, FAR_VISIBLE_OBJECT_TYPES >::GetY(), MapCollisionData::LoadMMapTile(), 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
13 if (_map->GetInstanceId() == 0)
14 {
15 LoadVMap();
16 LoadMMap();
17 }
18}
void LoadMMap()
Definition GridTerrainLoader.cpp:72
void LoadMap()
Definition GridTerrainLoader.cpp:20
void LoadVMap()
Definition GridTerrainLoader.cpp:50

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

Referenced by MapGridManager::CreateGrid().

◆ LoadVMap()

void GridTerrainLoader::LoadVMap ( )
private
51{
52 int const vmapLoadResult = _map->GetMapCollisionData().LoadVMapTile(_grid.GetX(), _grid.GetY());
53 switch (vmapLoadResult)
54 {
56 LOG_DEBUG("maps", "VMAP loaded name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
58 break;
60 LOG_DEBUG("maps", "Could not load VMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
62 break;
64 LOG_DEBUG("maps", "Ignored VMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})",
66 break;
67 default:
68 break;
69 }
70}
int LoadVMapTile(uint32 tileX, uint32 tileY)
Definition MapCollisionData.cpp:52
@ VMAP_LOAD_RESULT_ERROR
Definition IVMapMgr.h:38
@ VMAP_LOAD_RESULT_OK
Definition IVMapMgr.h:39
@ VMAP_LOAD_RESULT_IGNORED
Definition IVMapMgr.h:40

References _grid, _map, Map::GetId(), Map::GetMapCollisionData(), Map::GetMapName(), MapGrid< GRID_OBJECT_TYPES, FAR_VISIBLE_OBJECT_TYPES >::GetX(), MapGrid< GRID_OBJECT_TYPES, FAR_VISIBLE_OBJECT_TYPES >::GetY(), MapCollisionData::LoadVMapTile(), LOG_DEBUG, 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: