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

#include "Map.h"

Inheritance diagram for Map:
GridRefMgr< NGridType > RefMgr< TO, FROM > LinkedListHead BattlegroundMap InstanceMap MapInstanced

Public Types

enum  EnterState {
  CAN_ENTER = 0 ,
  CANNOT_ENTER_ALREADY_IN_MAP = 1 ,
  CANNOT_ENTER_NO_ENTRY ,
  CANNOT_ENTER_UNINSTANCED_DUNGEON ,
  CANNOT_ENTER_DIFFICULTY_UNAVAILABLE ,
  CANNOT_ENTER_NOT_IN_RAID ,
  CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE ,
  CANNOT_ENTER_INSTANCE_BIND_MISMATCH ,
  CANNOT_ENTER_TOO_MANY_INSTANCES ,
  CANNOT_ENTER_MAX_PLAYERS ,
  CANNOT_ENTER_ZONE_IN_COMBAT ,
  CANNOT_ENTER_UNSPECIFIED_REASON
}
 
typedef MapRefMgr PlayerList
 
typedef std::unordered_multimap< ObjectGuid::LowType, Creature * > CreatureBySpawnIdContainer
 
typedef std::unordered_multimap< ObjectGuid::LowType, GameObject * > GameObjectBySpawnIdContainer
 
- Public Types inherited from GridRefMgr< NGridType >
typedef LinkedListHead::Iterator< GridReference< NGridType > > iterator
 
- Public Types inherited from RefMgr< TO, FROM >
typedef LinkedListHead::Iterator< Reference< TO, FROM > > iterator
 
- Public Types inherited from LinkedListHead
typedef Iterator< LinkedListElementiterator
 

Public Member Functions

 Map (uint32 id, uint32 InstanceId, uint8 SpawnMode, Map *_parent=nullptr)
 
 ~Map () override
 
MapEntry const * GetEntry () const
 
bool CanUnload (uint32 diff)
 
virtual bool AddPlayerToMap (Player *)
 
virtual void RemovePlayerFromMap (Player *, bool)
 
virtual void AfterPlayerUnlinkFromMap ()
 
template<class T >
bool AddToMap (T *, bool checkTransport=false)
 
template<class T >
void RemoveFromMap (T *, bool)
 
void VisitNearbyCellsOf (WorldObject *obj, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &gridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &worldVisitor, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &largeGridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &largeWorldVisitor)
 
void VisitNearbyCellsOfPlayer (Player *player, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &gridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &worldVisitor, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &largeGridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &largeWorldVisitor)
 
virtual void Update (const uint32, const uint32, bool thread=true)
 
float GetVisibilityRange () const
 
void SetVisibilityRange (float range)
 
virtual void InitVisibilityDistance ()
 
void PlayerRelocation (Player *, float x, float y, float z, float o)
 
void CreatureRelocation (Creature *creature, float x, float y, float z, float o)
 
void GameObjectRelocation (GameObject *go, float x, float y, float z, float o)
 
void DynamicObjectRelocation (DynamicObject *go, float x, float y, float z, float o)
 
template<class T , class CONTAINER >
void Visit (const Cell &cell, TypeContainerVisitor< T, CONTAINER > &visitor)
 
bool IsRemovalGrid (float x, float y) const
 
bool IsGridLoaded (float x, float y) const
 
void LoadGrid (float x, float y)
 
void LoadAllCells ()
 
bool UnloadGrid (NGridType &ngrid)
 
virtual void UnloadAll ()
 
uint32 GetId () const
 
Map const * GetParent () const
 
std::shared_mutex & GetMMapLock () const
 
void HandleDelayedVisibility ()
 
float GetHeight (float x, float y, float z, bool checkVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
 
float GetGridHeight (float x, float y) const
 
float GetMinHeight (float x, float y) const
 
TransportGetTransportForPos (uint32 phase, float x, float y, float z, WorldObject *worldobject=nullptr)
 
void GetFullTerrainStatusForPosition (uint32 phaseMask, float x, float y, float z, float collisionHeight, PositionFullTerrainStatus &data, uint8 reqLiquidType=MAP_ALL_LIQUIDS)
 
LiquidData const GetLiquidData (uint32 phaseMask, float x, float y, float z, float collisionHeight, uint8 ReqLiquidType)
 
bool GetAreaInfo (uint32 phaseMask, float x, float y, float z, uint32 &mogpflags, int32 &adtId, int32 &rootId, int32 &groupId) const
 
uint32 GetAreaId (uint32 phaseMask, float x, float y, float z) const
 
uint32 GetZoneId (uint32 phaseMask, float x, float y, float z) const
 
void GetZoneAndAreaId (uint32 phaseMask, uint32 &zoneid, uint32 &areaid, float x, float y, float z) const
 
float GetWaterLevel (float x, float y) const
 
bool IsInWater (uint32 phaseMask, float x, float y, float z, float collisionHeight) const
 
bool IsUnderWater (uint32 phaseMask, float x, float y, float z, float collisionHeight) const
 
bool HasEnoughWater (WorldObject const *searcher, float x, float y, float z) const
 
bool HasEnoughWater (WorldObject const *searcher, LiquidData const &liquidData) const
 
void MoveAllCreaturesInMoveList ()
 
void MoveAllGameObjectsInMoveList ()
 
void MoveAllDynamicObjectsInMoveList ()
 
void RemoveAllObjectsInRemoveList ()
 
virtual void RemoveAllPlayers ()
 
uint32 GetInstanceId () const
 
uint8 GetSpawnMode () const
 
virtual EnterState CannotEnter (Player *, bool)
 
const char * GetMapName () const
 
Difficulty GetDifficulty () const
 
bool IsRegularDifficulty () const
 
MapDifficulty const * GetMapDifficulty () const
 
bool Instanceable () const
 
bool IsDungeon () const
 
bool IsNonRaidDungeon () const
 
bool IsRaid () const
 
bool IsRaidOrHeroicDungeon () const
 
bool IsHeroic () const
 
bool Is25ManRaid () const
 
bool IsBattleground () const
 
bool IsBattleArena () const
 
bool IsBattlegroundOrArena () const
 
bool GetEntrancePos (int32 &mapid, float &x, float &y)
 
void AddObjectToRemoveList (WorldObject *obj)
 
void AddObjectToSwitchList (WorldObject *obj, bool on)
 
virtual void DelayedUpdate (const uint32 diff)
 
void resetMarkedCells ()
 
bool isCellMarked (uint32 pCellId)
 
void markCell (uint32 pCellId)
 
void resetMarkedCellsLarge ()
 
bool isCellMarkedLarge (uint32 pCellId)
 
void markCellLarge (uint32 pCellId)
 
bool HavePlayers () const
 
uint32 GetPlayersCountExceptGMs () const
 
void AddWorldObject (WorldObject *obj)
 
void RemoveWorldObject (WorldObject *obj)
 
void SendToPlayers (WorldPacket const *data) const
 
PlayerList const & GetPlayers () const
 
void ScriptsStart (std::map< uint32, std::multimap< uint32, ScriptInfo > > const &scripts, uint32 id, Object *source, Object *target)
 Put scripts in the execution queue.
 
void ScriptCommandStart (ScriptInfo const &script, uint32 delay, Object *source, Object *target)
 
template<class T >
void AddToActive (T *obj)
 
template<class T >
void RemoveFromActive (T *obj)
 
template<class T >
void SwitchGridContainers (T *obj, bool on)
 
void UpdateIteratorBack (Player *player)
 
TempSummonSummonCreature (uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, uint32 duration=0, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, bool visibleBySummonerOnly=false)
 
GameObjectSummonGameObject (uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true)
 
GameObjectSummonGameObject (uint32 entry, Position const &pos, float rotation0=0.0f, float rotation1=0.0f, float rotation2=0.0f, float rotation3=0.0f, uint32 respawnTime=100, bool checkTransport=true)
 
void SummonCreatureGroup (uint8 group, std::list< TempSummon * > *list=nullptr)
 
CorpseGetCorpse (ObjectGuid const guid)
 
CreatureGetCreature (ObjectGuid const guid)
 
GameObjectGetGameObject (ObjectGuid const guid)
 
TransportGetTransport (ObjectGuid const guid)
 
DynamicObjectGetDynamicObject (ObjectGuid const guid)
 
PetGetPet (ObjectGuid const guid)
 
MapStoredObjectTypesContainerGetObjectsStore ()
 
CreatureBySpawnIdContainerGetCreatureBySpawnIdStore ()
 
GameObjectBySpawnIdContainerGetGameObjectBySpawnIdStore ()
 
std::unordered_set< Corpse * > const * GetCorpsesInCell (uint32 cellId) const
 
CorpseGetCorpseByPlayer (ObjectGuid const &ownerGuid) const
 
MapInstancedToMapInstanced ()
 
MapInstanced const * ToMapInstanced () const
 
InstanceMapToInstanceMap ()
 
InstanceMap const * ToInstanceMap () const
 
BattlegroundMapToBattlegroundMap ()
 
BattlegroundMap const * ToBattlegroundMap () const
 
float GetWaterOrGroundLevel (uint32 phasemask, float x, float y, float z, float *ground=nullptr, bool swim=false, float collisionHeight=DEFAULT_COLLISION_HEIGHT) const
 
float GetHeight (uint32 phasemask, float x, float y, float z, bool vmap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
 
bool isInLineOfSight (float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask, LineOfSightChecks checks, VMAP::ModelIgnoreFlags ignoreFlags) const
 
bool CanReachPositionAndGetValidCoords (WorldObject const *source, PathGenerator *path, float &destX, float &destY, float &destZ, bool failOnCollision=true, bool failOnSlopes=true) const
 Check if a given source can reach a specific point following a path and normalize the coords. Use this method for long paths, otherwise use the overloaded method with the start coords when you need to do a quick check on small segments.
 
bool CanReachPositionAndGetValidCoords (WorldObject const *source, float &destX, float &destY, float &destZ, bool failOnCollision=true, bool failOnSlopes=true) const
 validate the new destination and set reachable coords Check if a given unit can reach a specific point on a segment and set the correct dest coords NOTE: use this method with small segments.
 
bool CanReachPositionAndGetValidCoords (WorldObject const *source, float startX, float startY, float startZ, float &destX, float &destY, float &destZ, bool failOnCollision=true, bool failOnSlopes=true) const
 
bool CheckCollisionAndGetValidCoords (WorldObject const *source, float startX, float startY, float startZ, float &destX, float &destY, float &destZ, bool failOnCollision=true) const
 validate the new destination and set coords Check if a given unit can face collisions in a specific segment
 
void Balance ()
 
void RemoveGameObjectModel (const GameObjectModel &model)
 
void InsertGameObjectModel (const GameObjectModel &model)
 
bool ContainsGameObjectModel (const GameObjectModel &model) const
 
DynamicMapTree const & GetDynamicMapTree () const
 
bool GetObjectHitPos (uint32 phasemask, float x1, float y1, float z1, float x2, float y2, float z2, float &rx, float &ry, float &rz, float modifyDist)
 
float GetGameObjectFloor (uint32 phasemask, float x, float y, float z, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
 
time_t GetLinkedRespawnTime (ObjectGuid guid) const
 
time_t GetCreatureRespawnTime (ObjectGuid::LowType dbGuid) const
 
time_t GetGORespawnTime (ObjectGuid::LowType dbGuid) const
 
void SaveCreatureRespawnTime (ObjectGuid::LowType dbGuid, time_t &respawnTime)
 
void RemoveCreatureRespawnTime (ObjectGuid::LowType dbGuid)
 
void SaveGORespawnTime (ObjectGuid::LowType dbGuid, time_t &respawnTime)
 
void RemoveGORespawnTime (ObjectGuid::LowType dbGuid)
 
void LoadRespawnTimes ()
 
void DeleteRespawnTimes ()
 
time_t GetInstanceResetPeriod () const
 
void LoadCorpseData ()
 
void DeleteCorpseData ()
 
void AddCorpse (Corpse *corpse)
 
void RemoveCorpse (Corpse *corpse)
 
CorpseConvertCorpseToBones (ObjectGuid const ownerGuid, bool insignia=false)
 
void RemoveOldCorpses ()
 
void SendInitTransports (Player *player)
 
void SendRemoveTransports (Player *player)
 
void SendZoneDynamicInfo (Player *player)
 
void SendInitSelf (Player *player)
 
void PlayDirectSoundToMap (uint32 soundId, uint32 zoneId=0)
 
void SetZoneMusic (uint32 zoneId, uint32 musicId)
 
void SetZoneWeather (uint32 zoneId, WeatherState weatherId, float weatherGrade)
 
void SetZoneOverrideLight (uint32 zoneId, uint32 lightId, Milliseconds fadeInTime)
 
void UpdateEncounterState (EncounterCreditType type, uint32 creditEntry, Unit *source)
 
void LogEncounterFinished (EncounterCreditType type, uint32 creditEntry)
 
void DoForAllPlayers (std::function< void(Player *)> exec)
 
GridMapGetGrid (float x, float y)
 
void EnsureGridCreated (const GridCoord &)
 
bool AllTransportsEmpty () const
 
void AllTransportsRemovePassengers ()
 
TransportsContainer const & GetAllTransports () const
 
template<HighGuid high>
ObjectGuid::LowType GenerateLowGuid ()
 
void AddUpdateObject (Object *obj)
 
void RemoveUpdateObject (Object *obj)
 
size_t GetActiveNonPlayersCount () const
 
virtual std::string GetDebugInfo () const
 
template<>
void AddToGrid (Creature *obj, Cell const &cell)
 
template<>
void AddToGrid (GameObject *obj, Cell const &cell)
 
template<>
void AddToGrid (DynamicObject *obj, Cell const &cell)
 
template<>
void AddToGrid (Corpse *obj, Cell const &cell)
 
template<>
void SwitchGridContainers (Creature *obj, bool on)
 
template<>
void SwitchGridContainers (GameObject *obj, bool on)
 
template<>
void DeleteFromWorld (Player *player)
 
template<>
void InitializeObject (Creature *)
 
template<>
void InitializeObject (GameObject *)
 
template<>
bool AddToMap (MotionTransport *obj, bool)
 
template<>
void RemoveFromMap (MotionTransport *obj, bool remove)
 
template<>
void AddToActive (Creature *c)
 
template<>
void AddToActive (DynamicObject *d)
 
template<>
void AddToActive (GameObject *d)
 
template<>
void RemoveFromActive (Creature *c)
 
template<>
void RemoveFromActive (DynamicObject *obj)
 
template<>
void RemoveFromActive (GameObject *obj)
 
- Public Member Functions inherited from GridRefMgr< NGridType >
GridReference< NGridType > * getFirst ()
 
GridReference< NGridType > * getLast ()
 
iterator begin ()
 
iterator end ()
 
iterator rbegin ()
 
iterator rend ()
 
- Public Member Functions inherited from RefMgr< TO, FROM >
 RefMgr ()=default
 
virtual ~RefMgr ()
 
Reference< TO, FROM > * getFirst ()
 
Reference< TO, FROM > const * getFirst () const
 
Reference< TO, FROM > * getLast ()
 
Reference< TO, FROM > const * getLast () const
 
iterator begin ()
 
iterator end ()
 
iterator rbegin ()
 
iterator rend ()
 
void clearReferences ()
 
- Public Member Functions inherited from LinkedListHead
 LinkedListHead ()
 
bool IsEmpty () const
 
LinkedListElementgetFirst ()
 
LinkedListElement const * getFirst () const
 
LinkedListElementgetLast ()
 
LinkedListElement const * getLast () const
 
void insertFirst (LinkedListElement *pElem)
 
void insertLast (LinkedListElement *pElem)
 
uint32 getSize () const
 
void incSize ()
 
void decSize ()
 

Static Public Member Functions

static bool ExistMap (uint32 mapid, int gx, int gy)
 
static bool ExistVMap (uint32 mapid, int gx, int gy)
 
static void DeleteRespawnTimesInDB (uint16 mapId, uint32 instanceId)
 

Public Attributes

std::unordered_set< Unit * > i_objectsForDelayedVisibility
 
CreatureGroupHolderType CreatureGroupHolder
 
DataMap CustomData
 

Protected Types

typedef std::set< WorldObject * > ActiveNonPlayers
 

Protected Attributes

std::mutex Lock
 
std::mutex GridLock
 
std::shared_mutex MMapLock
 
MapEntry const * i_mapEntry
 
uint8 i_spawnMode
 
uint32 i_InstanceId
 
uint32 m_unloadTimer
 
float m_VisibleDistance
 
DynamicMapTree _dynamicTree
 
time_t _instanceResetPeriod
 
MapRefMgr m_mapRefMgr
 
MapRefMgr::iterator m_mapRefIter
 
ActiveNonPlayers m_activeNonPlayers
 
ActiveNonPlayers::iterator m_activeNonPlayersIter
 
TransportsContainer _transports
 
TransportsContainer::iterator _transportsUpdateIter
 

Private Types

typedef std::multimap< time_t, ScriptActionScriptScheduleMap
 

Private Member Functions

void LoadMapAndVMap (int gx, int gy)
 
void LoadVMap (int gx, int gy)
 
void LoadMap (int gx, int gy, bool reload=false)
 
void LoadMMap (int gx, int gy)
 
template<class T >
void InitializeObject (T *obj)
 
void AddCreatureToMoveList (Creature *c)
 
void RemoveCreatureFromMoveList (Creature *c)
 
void AddGameObjectToMoveList (GameObject *go)
 
void RemoveGameObjectFromMoveList (GameObject *go)
 
void AddDynamicObjectToMoveList (DynamicObject *go)
 
void RemoveDynamicObjectFromMoveList (DynamicObject *go)
 
bool IsGridLoaded (const GridCoord &) const
 
void EnsureGridCreated_i (const GridCoord &)
 
void buildNGridLinkage (NGridType *pNGridType)
 
NGridTypegetNGrid (uint32 x, uint32 y) const
 
bool EnsureGridLoaded (Cell const &)
 
bool isGridObjectDataLoaded (uint32 x, uint32 y) const
 
void setGridObjectDataLoaded (bool pLoaded, uint32 x, uint32 y)
 
void setNGrid (NGridType *grid, uint32 x, uint32 y)
 
void ScriptsProcess ()
 Process queued scripts.
 
void UpdateActiveCells (const float &x, const float &y, const uint32 t_diff)
 
void SendObjectUpdates ()
 
Player_GetScriptPlayerSourceOrTarget (Object *source, Object *target, const ScriptInfo *scriptInfo) const
 
Creature_GetScriptCreatureSourceOrTarget (Object *source, Object *target, const ScriptInfo *scriptInfo, bool bReverse=false) const
 
Unit_GetScriptUnit (Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
 
Player_GetScriptPlayer (Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
 
Creature_GetScriptCreature (Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
 
WorldObject_GetScriptWorldObject (Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
 
void _ScriptProcessDoor (Object *source, Object *target, const ScriptInfo *scriptInfo) const
 
GameObject_FindGameObject (WorldObject *pWorldObject, ObjectGuid::LowType guid) const
 
template<class T >
void AddToGrid (T *object, Cell const &cell)
 
template<class T >
void DeleteFromWorld (T *)
 
void AddToActiveHelper (WorldObject *obj)
 
void RemoveFromActiveHelper (WorldObject *obj)
 
template<HighGuid high>
ObjectGuidGeneratorBaseGetGuidSequenceGenerator ()
 

Private Attributes

std::vector< Creature * > _creaturesToMove
 
std::vector< GameObject * > _gameObjectsToMove
 
std::vector< DynamicObject * > _dynamicObjectsToMove
 
Mapm_parentMap
 
NGridTypei_grids [MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS]
 
GridMapGridMaps [MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS]
 
std::bitset< TOTAL_NUMBER_OF_CELLS_PER_MAP *TOTAL_NUMBER_OF_CELLS_PER_MAPmarked_cells
 
std::bitset< TOTAL_NUMBER_OF_CELLS_PER_MAP *TOTAL_NUMBER_OF_CELLS_PER_MAPmarked_cells_large
 
bool i_scriptLock
 
std::unordered_set< WorldObject * > i_objectsToRemove
 
std::map< WorldObject *, bool > i_objectsToSwitch
 
std::unordered_set< WorldObject * > i_worldObjects
 
ScriptScheduleMap m_scriptSchedule
 
std::unordered_map< ObjectGuid::LowType, time_t > _creatureRespawnTimes
 
std::unordered_map< ObjectGuid::LowType, time_t > _goRespawnTimes
 
ZoneDynamicInfoMap _zoneDynamicInfo
 
uint32 _defaultLight
 
std::map< HighGuid, std::unique_ptr< ObjectGuidGeneratorBase > > _guidGenerators
 
MapStoredObjectTypesContainer _objectsStore
 
CreatureBySpawnIdContainer _creatureBySpawnIdStore
 
GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore
 
std::unordered_map< uint32, std::unordered_set< Corpse * > > _corpsesByCell
 
std::unordered_map< ObjectGuid, Corpse * > _corpsesByPlayer
 
std::unordered_set< Corpse * > _corpseBones
 
std::unordered_set< Object * > _updateObjects
 

Friends

class MapReference
 

Detailed Description

Member Typedef Documentation

◆ ActiveNonPlayers

typedef std::set<WorldObject*> Map::ActiveNonPlayers
protected

◆ CreatureBySpawnIdContainer

typedef std::unordered_multimap<ObjectGuid::LowType, Creature*> Map::CreatureBySpawnIdContainer

◆ GameObjectBySpawnIdContainer

◆ PlayerList

◆ ScriptScheduleMap

typedef std::multimap<time_t, ScriptAction> Map::ScriptScheduleMap
private

Member Enumeration Documentation

◆ EnterState

Enumerator
CAN_ENTER 
CANNOT_ENTER_ALREADY_IN_MAP 
CANNOT_ENTER_NO_ENTRY 
CANNOT_ENTER_UNINSTANCED_DUNGEON 
CANNOT_ENTER_DIFFICULTY_UNAVAILABLE 
CANNOT_ENTER_NOT_IN_RAID 
CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE 
CANNOT_ENTER_INSTANCE_BIND_MISMATCH 
CANNOT_ENTER_TOO_MANY_INSTANCES 
CANNOT_ENTER_MAX_PLAYERS 
CANNOT_ENTER_ZONE_IN_COMBAT 
CANNOT_ENTER_UNSPECIFIED_REASON 
422 {
423 CAN_ENTER = 0,
424 CANNOT_ENTER_ALREADY_IN_MAP = 1, // Player is already in the map
425 CANNOT_ENTER_NO_ENTRY, // No map entry was found for the target map ID
426 CANNOT_ENTER_UNINSTANCED_DUNGEON, // No instance template was found for dungeon map
427 CANNOT_ENTER_DIFFICULTY_UNAVAILABLE, // Requested instance difficulty is not available for target map
428 CANNOT_ENTER_NOT_IN_RAID, // Target instance is a raid instance and the player is not in a raid group
429 CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE, // Player is dead and their corpse is not in target instance
430 CANNOT_ENTER_INSTANCE_BIND_MISMATCH, // Player's permanent instance save is not compatible with their group's current instance bind
431 CANNOT_ENTER_TOO_MANY_INSTANCES, // Player has entered too many instances recently
432 CANNOT_ENTER_MAX_PLAYERS, // Target map already has the maximum number of players allowed
433 CANNOT_ENTER_ZONE_IN_COMBAT, // A boss encounter is currently in progress on the target map
435 };
@ CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE
Definition: Map.h:429
@ CANNOT_ENTER_TOO_MANY_INSTANCES
Definition: Map.h:431
@ CANNOT_ENTER_MAX_PLAYERS
Definition: Map.h:432
@ CANNOT_ENTER_ZONE_IN_COMBAT
Definition: Map.h:433
@ CAN_ENTER
Definition: Map.h:423
@ CANNOT_ENTER_ALREADY_IN_MAP
Definition: Map.h:424
@ CANNOT_ENTER_UNSPECIFIED_REASON
Definition: Map.h:434
@ CANNOT_ENTER_NO_ENTRY
Definition: Map.h:425
@ CANNOT_ENTER_DIFFICULTY_UNAVAILABLE
Definition: Map.h:427
@ CANNOT_ENTER_INSTANCE_BIND_MISMATCH
Definition: Map.h:430
@ CANNOT_ENTER_UNINSTANCED_DUNGEON
Definition: Map.h:426
@ CANNOT_ENTER_NOT_IN_RAID
Definition: Map.h:428

Constructor & Destructor Documentation

◆ Map()

Map::Map ( uint32  id,
uint32  InstanceId,
uint8  SpawnMode,
Map _parent = nullptr 
)
237 :
238 i_mapEntry(sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId),
242{
243 m_parentMap = (_parent ? _parent : this);
244 for (unsigned int idx = 0; idx < MAX_NUMBER_OF_GRIDS; ++idx)
245 {
246 for (unsigned int j = 0; j < MAX_NUMBER_OF_GRIDS; ++j)
247 {
248 //z code
249 GridMaps[idx][j] = nullptr;
250 setNGrid(nullptr, idx, j);
251 }
252 }
253
254 //lets initialize visibility distance for map
256
257 sScriptMgr->OnCreateMap(this);
258}
#define MAX_NUMBER_OF_GRIDS
Definition: MapDefines.h:12
uint32 GetDefaultMapLight(uint32 mapId)
Definition: DBCStores.cpp:876
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
#define DEFAULT_VISIBILITY_DISTANCE
Definition: ObjectDefines.h:40
#define sScriptMgr
Definition: ScriptMgr.h:2762
MapEntry const * i_mapEntry
Definition: Map.h:702
uint8 i_spawnMode
Definition: Map.h:703
TransportsContainer::iterator _transportsUpdateIter
Definition: Map.h:719
uint32 m_unloadTimer
Definition: Map.h:705
uint32 _defaultLight
Definition: Map.h:780
Map * m_parentMap
Definition: Map.h:733
bool i_scriptLock
Definition: Map.h:740
time_t _instanceResetPeriod
Definition: Map.h:708
ActiveNonPlayers m_activeNonPlayers
Definition: Map.h:714
float m_VisibleDistance
Definition: Map.h:706
virtual void InitVisibilityDistance()
Definition: Map.cpp:260
TransportsContainer _transports
Definition: Map.h:718
uint32 i_InstanceId
Definition: Map.h:704
ActiveNonPlayers::iterator m_activeNonPlayersIter
Definition: Map.h:715
GridMap * GridMaps[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS]
Definition: Map.h:736
void setNGrid(NGridType *grid, uint32 x, uint32 y)
Definition: Map.cpp:2597

References GridMaps, InitVisibilityDistance(), m_parentMap, MAX_NUMBER_OF_GRIDS, setNGrid(), and sScriptMgr.

◆ ~Map()

Map::~Map ( )
override
65{
66 // UnloadAll must be called before deleting the map
67
68 sScriptMgr->OnDestroyMap(this);
69
70 while (!i_worldObjects.empty())
71 {
72 WorldObject* obj = *i_worldObjects.begin();
73 ASSERT(obj->IsWorldObject());
74 LOG_DEBUG("maps", "Map::~Map: WorldObject TypeId is not a corpse! ({})", static_cast<uint8>(obj->GetTypeId()));
75 //ASSERT(obj->GetTypeId() == TYPEID_CORPSE);
76 obj->RemoveFromWorld();
77 obj->ResetMap();
78 }
79
80 if (!m_scriptSchedule.empty())
81 sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size());
82
83 //MMAP::MMapFactory::createOrGetMMapMgr()->unloadMap(GetId());
85}
#define ASSERT
Definition: Errors.h:68
std::uint8_t uint8
Definition: Define.h:110
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:171
static MMapMgr * createOrGetMMapMgr()
Definition: MMapFactory.cpp:29
bool unloadMapInstance(uint32 mapId, uint32 instanceId)
Definition: MMapMgr.cpp:279
TypeID GetTypeId() const
Definition: Object.h:121
Definition: Object.h:393
virtual void ResetMap()
Definition: Object.cpp:2122
bool IsWorldObject() const
Definition: Object.cpp:1074
void RemoveFromWorld() override
Definition: Object.cpp:1182
ScriptScheduleMap m_scriptSchedule
Definition: Map.h:746
uint32 GetId() const
Definition: Map.h:378
std::unordered_set< WorldObject * > i_worldObjects
Definition: Map.h:743

References ASSERT, MMAP::MMapFactory::createOrGetMMapMgr(), GetId(), Object::GetTypeId(), i_InstanceId, i_worldObjects, WorldObject::IsWorldObject(), LOG_DEBUG, m_scriptSchedule, WorldObject::RemoveFromWorld(), WorldObject::ResetMap(), sScriptMgr, and MMAP::MMapMgr::unloadMapInstance().

Member Function Documentation

◆ _FindGameObject()

GameObject * Map::_FindGameObject ( WorldObject pWorldObject,
ObjectGuid::LowType  guid 
) const
inlineprivate
271{
272 auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid);
273 if (bounds.first == bounds.second)
274 return nullptr;
275
276 return bounds.first->second;
277}

References GetGameObjectBySpawnIdStore(), and WorldObject::GetMap().

Referenced by _ScriptProcessDoor(), and ScriptsProcess().

◆ _GetScriptCreature()

Creature * Map::_GetScriptCreature ( Object obj,
bool  isSource,
const ScriptInfo scriptInfo 
) const
inlineprivate
190{
191 Creature* creature = nullptr;
192 if (!obj)
193 LOG_ERROR("maps.script", "{} {} object is nullptr.", scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
194 else
195 {
196 creature = obj->ToCreature();
197 if (!creature)
198 LOG_ERROR("maps.script", "{} {} object is not a creature ({}).", scriptInfo->GetDebugInfo(),
199 isSource ? "source" : "target", obj->GetGUID().ToString());
200 }
201 return creature;
202}
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
Definition: Creature.h:46
Creature * ToCreature()
Definition: Object.h:197
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
std::string ToString() const
Definition: ObjectGuid.cpp:47
std::string GetDebugInfo() const
Definition: ObjectMgr.cpp:201

References ScriptInfo::GetDebugInfo(), Object::GetGUID(), LOG_ERROR, Object::ToCreature(), and ObjectGuid::ToString().

Referenced by ScriptsProcess().

◆ _GetScriptCreatureSourceOrTarget()

Creature * Map::_GetScriptCreatureSourceOrTarget ( Object source,
Object target,
const ScriptInfo scriptInfo,
bool  bReverse = false 
) const
inlineprivate
124{
125 Creature* creature = nullptr;
126 if (!source && !target)
127 LOG_ERROR("maps.script", "{} source and target objects are nullptr.", scriptInfo->GetDebugInfo());
128 else
129 {
130 if (bReverse)
131 {
132 // Check target first, then source.
133 if (target)
134 creature = target->ToCreature();
135 if (!creature && source)
136 creature = source->ToCreature();
137 }
138 else
139 {
140 // Check source first, then target.
141 if (source)
142 creature = source->ToCreature();
143 if (!creature && target)
144 creature = target->ToCreature();
145 }
146
147 if (!creature)
148 LOG_ERROR("maps.script", "{} neither source nor target are creatures (source: TypeId: {}, Entry: {}, GUID: {}; target: TypeId: {}, Entry: {}, GUID: {}), skipping.",
149 scriptInfo->GetDebugInfo(),
150 source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString() : "",
151 target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString() : "");
152 }
153 return creature;
154}
uint32 GetEntry() const
Definition: Object.h:109

References ScriptInfo::GetDebugInfo(), Object::GetEntry(), Object::GetGUID(), Object::GetTypeId(), LOG_ERROR, Object::ToCreature(), and ObjectGuid::ToString().

Referenced by ScriptsProcess().

◆ _GetScriptPlayer()

Player * Map::_GetScriptPlayer ( Object obj,
bool  isSource,
const ScriptInfo scriptInfo 
) const
inlineprivate
175{
176 Player* player = nullptr;
177 if (!obj)
178 LOG_ERROR("maps.script", "{} {} object is nullptr.", scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
179 else
180 {
181 player = obj->ToPlayer();
182 if (!player)
183 LOG_ERROR("maps.script", "{} {} object is not a player ({}).",
184 scriptInfo->GetDebugInfo(), isSource ? "source" : "target", obj->GetGUID().ToString());
185 }
186 return player;
187}
Player * ToPlayer()
Definition: Object.h:195
Definition: Player.h:1056

References ScriptInfo::GetDebugInfo(), Object::GetGUID(), LOG_ERROR, Object::ToPlayer(), and ObjectGuid::ToString().

Referenced by ScriptsProcess().

◆ _GetScriptPlayerSourceOrTarget()

Player * Map::_GetScriptPlayerSourceOrTarget ( Object source,
Object target,
const ScriptInfo scriptInfo 
) const
inlineprivate
102{
103 Player* player = nullptr;
104 if (!source && !target)
105 LOG_ERROR("maps.script", "{} source and target objects are nullptr.", scriptInfo->GetDebugInfo());
106 else
107 {
108 // Check target first, then source.
109 if (target)
110 player = target->ToPlayer();
111 if (!player && source)
112 player = source->ToPlayer();
113
114 if (!player)
115 LOG_ERROR("maps.script", "{} neither source nor target object is player (source: TypeId: {}, Entry: {}, GUID: {}; target: TypeId: {}, Entry: {}, GUID: {}), skipping.",
116 scriptInfo->GetDebugInfo(),
117 source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString() : "",
118 target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString() : "");
119 }
120 return player;
121}

References ScriptInfo::GetDebugInfo(), Object::GetEntry(), Object::GetGUID(), Object::GetTypeId(), LOG_ERROR, Object::ToPlayer(), and ObjectGuid::ToString().

Referenced by ScriptsProcess().

◆ _GetScriptUnit()

Unit * Map::_GetScriptUnit ( Object obj,
bool  isSource,
const ScriptInfo scriptInfo 
) const
inlineprivate
157{
158 Unit* unit = nullptr;
159 if (!obj)
160 LOG_ERROR("maps.script", "{} {} object is nullptr.", scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
161 else if (!obj->isType(TYPEMASK_UNIT))
162 LOG_ERROR("maps.script", "{} {} object is not unit (TypeId: {}, Entry: {}, GUID: {}), skipping.",
163 scriptInfo->GetDebugInfo(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().ToString());
164 else
165 {
166 unit = obj->ToUnit();
167 if (!unit)
168 LOG_ERROR("maps.script", "{} {} object could not be casted to unit.",
169 scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
170 }
171 return unit;
172}
@ TYPEMASK_UNIT
Definition: ObjectGuid.h:51
bool isType(uint16 mask) const
Definition: Object.h:122
Unit * ToUnit()
Definition: Object.h:200
Definition: Unit.h:1302

References ScriptInfo::GetDebugInfo(), Object::GetEntry(), Object::GetGUID(), Object::GetTypeId(), Object::isType(), LOG_ERROR, ObjectGuid::ToString(), Object::ToUnit(), and TYPEMASK_UNIT.

Referenced by ScriptsProcess().

◆ _GetScriptWorldObject()

WorldObject * Map::_GetScriptWorldObject ( Object obj,
bool  isSource,
const ScriptInfo scriptInfo 
) const
inlineprivate
205{
206 WorldObject* pWorldObject = nullptr;
207 if (!obj)
208 LOG_ERROR("maps.script", "{} {} object is nullptr.",
209 scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
210 else
211 {
212 pWorldObject = dynamic_cast<WorldObject*>(obj);
213 if (!pWorldObject)
214 LOG_ERROR("maps.script", "{} {} object is not a world object ({}).",
215 scriptInfo->GetDebugInfo(), isSource ? "source" : "target", obj->GetGUID().ToString());
216 }
217 return pWorldObject;
218}

References ScriptInfo::GetDebugInfo(), Object::GetGUID(), LOG_ERROR, and ObjectGuid::ToString().

Referenced by ScriptsProcess().

◆ _ScriptProcessDoor()

void Map::_ScriptProcessDoor ( Object source,
Object target,
const ScriptInfo scriptInfo 
) const
inlineprivate
221{
222 bool bOpen = false;
223 ObjectGuid::LowType guid = scriptInfo->ToggleDoor.GOGuid;
224 int32 nTimeToToggle = std::max(15, int32(scriptInfo->ToggleDoor.ResetDelay));
225 switch (scriptInfo->command)
226 {
228 bOpen = true;
229 break;
231 break;
232 default:
233 LOG_ERROR("maps.script", "{} unknown command for _ScriptProcessDoor.", scriptInfo->GetDebugInfo());
234 return;
235 }
236 if (!guid)
237 LOG_ERROR("maps.script", "{} door guid is not specified.", scriptInfo->GetDebugInfo());
238 else if (!source)
239 LOG_ERROR("maps.script", "{} source object is nullptr.", scriptInfo->GetDebugInfo());
240 else if (!source->isType(TYPEMASK_UNIT))
241 LOG_ERROR("maps.script", "{} source object is not unit ({}), skipping.", scriptInfo->GetDebugInfo(), source->GetGUID().ToString());
242 else
243 {
244 WorldObject* wSource = dynamic_cast <WorldObject*> (source);
245 if (!wSource)
246 LOG_ERROR("maps.script", "{} source object could not be casted to world object ({}), skipping.", scriptInfo->GetDebugInfo(), source->GetGUID().ToString());
247 else
248 {
249 GameObject* pDoor = _FindGameObject(wSource, guid);
250 if (!pDoor)
251 LOG_ERROR("maps.script", "{} gameobject was not found (guid: {}).", scriptInfo->GetDebugInfo(), guid);
252 else if (pDoor->GetGoType() != GAMEOBJECT_TYPE_DOOR)
253 LOG_ERROR("maps.script", "{} gameobject is not a door ({}).",
254 scriptInfo->GetDebugInfo(), pDoor->GetGUID().ToString());
255 else if (bOpen == (pDoor->GetGoState() == GO_STATE_READY))
256 {
257 pDoor->UseDoorOrButton(nTimeToToggle);
258
259 if (target && target->isType(TYPEMASK_GAMEOBJECT))
260 {
261 GameObject* goTarget = target->ToGameObject();
262 if (goTarget && goTarget->GetGoType() == GAMEOBJECT_TYPE_BUTTON)
263 goTarget->UseDoorOrButton(nTimeToToggle);
264 }
265 }
266 }
267 }
268}
std::int32_t int32
Definition: Define.h:104
@ GO_STATE_READY
Definition: GameObjectData.h:691
@ TYPEMASK_GAMEOBJECT
Definition: ObjectGuid.h:53
@ SCRIPT_COMMAND_CLOSE_DOOR
Definition: ObjectMgr.h:107
@ SCRIPT_COMMAND_OPEN_DOOR
Definition: ObjectMgr.h:106
@ GAMEOBJECT_TYPE_BUTTON
Definition: SharedDefines.h:1533
@ GAMEOBJECT_TYPE_DOOR
Definition: SharedDefines.h:1532
Definition: GameObject.h:122
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
Definition: GameObject.cpp:1427
GOState GetGoState() const
Definition: GameObject.h:207
GameobjectTypes GetGoType() const
Definition: GameObject.h:205
GameObject * ToGameObject()
Definition: Object.h:202
uint32 LowType
Definition: ObjectGuid.h:124
ScriptCommands command
Definition: ObjectMgr.h:196
uint32 ResetDelay
Definition: ObjectMgr.h:289
struct ScriptInfo::@260::@273 ToggleDoor
uint32 GOGuid
Definition: ObjectMgr.h:269
GameObject * _FindGameObject(WorldObject *pWorldObject, ObjectGuid::LowType guid) const
Definition: MapScripts.cpp:270

References _FindGameObject(), ScriptInfo::command, GAMEOBJECT_TYPE_BUTTON, GAMEOBJECT_TYPE_DOOR, ScriptInfo::GetDebugInfo(), GameObject::GetGoState(), GameObject::GetGoType(), Object::GetGUID(), GO_STATE_READY, ScriptInfo::GOGuid, Object::isType(), LOG_ERROR, ScriptInfo::ResetDelay, SCRIPT_COMMAND_CLOSE_DOOR, SCRIPT_COMMAND_OPEN_DOOR, Object::ToGameObject(), ScriptInfo::ToggleDoor, ObjectGuid::ToString(), TYPEMASK_GAMEOBJECT, TYPEMASK_UNIT, and GameObject::UseDoorOrButton().

Referenced by ScriptsProcess().

◆ AddCorpse()

void Map::AddCorpse ( Corpse corpse)
3588{
3589 corpse->SetMap(this);
3590
3591 _corpsesByCell[corpse->GetCellCoord().GetId()].insert(corpse);
3592 if (corpse->GetType() != CORPSE_BONES)
3593 _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse;
3594 else
3595 _corpseBones.insert(corpse);
3596}
@ CORPSE_BONES
Definition: Corpse.h:28
ObjectGuid GetOwnerGUID() const
Definition: Corpse.h:68
CellCoord const & GetCellCoord() const
Definition: Corpse.h:74
CorpseType GetType() const
Definition: Corpse.h:72
virtual void SetMap(Map *map)
Definition: Object.cpp:2096
uint32 GetId() const
Definition: GridDefines.h:148
std::unordered_map< ObjectGuid, Corpse * > _corpsesByPlayer
Definition: Map.h:797
std::unordered_map< uint32, std::unordered_set< Corpse * > > _corpsesByCell
Definition: Map.h:796
std::unordered_set< Corpse * > _corpseBones
Definition: Map.h:798

References _corpseBones, _corpsesByCell, _corpsesByPlayer, CORPSE_BONES, Corpse::GetCellCoord(), CoordPair< LIMIT >::GetId(), Corpse::GetOwnerGUID(), Corpse::GetType(), and WorldObject::SetMap().

Referenced by ConvertCorpseToBones(), Player::CreateCorpse(), and LoadCorpseData().

◆ AddCreatureToMoveList()

void Map::AddCreatureToMoveList ( Creature c)
private
1089{
1091 _creaturesToMove.push_back(c);
1093}
@ MAP_OBJECT_CELL_MOVE_ACTIVE
Definition: Object.h:371
@ MAP_OBJECT_CELL_MOVE_NONE
Definition: Object.h:370
MapObjectCellMoveState _moveState
Definition: Object.h:389
std::vector< Creature * > _creaturesToMove
Definition: Map.h:671

References _creaturesToMove, MovableMapObject::_moveState, MAP_OBJECT_CELL_MOVE_ACTIVE, and MAP_OBJECT_CELL_MOVE_NONE.

Referenced by CreatureRelocation().

◆ AddDynamicObjectToMoveList()

void Map::AddDynamicObjectToMoveList ( DynamicObject go)
private
1115{
1116 if (dynObj->_moveState == MAP_OBJECT_CELL_MOVE_NONE)
1117 _dynamicObjectsToMove.push_back(dynObj);
1118 dynObj->_moveState = MAP_OBJECT_CELL_MOVE_ACTIVE;
1119}
std::vector< DynamicObject * > _dynamicObjectsToMove
Definition: Map.h:673

References _dynamicObjectsToMove, MovableMapObject::_moveState, MAP_OBJECT_CELL_MOVE_ACTIVE, and MAP_OBJECT_CELL_MOVE_NONE.

Referenced by DynamicObjectRelocation().

◆ AddGameObjectToMoveList()

void Map::AddGameObjectToMoveList ( GameObject go)
private
1102{
1104 _gameObjectsToMove.push_back(go);
1106}
std::vector< GameObject * > _gameObjectsToMove
Definition: Map.h:672

References _gameObjectsToMove, MovableMapObject::_moveState, MAP_OBJECT_CELL_MOVE_ACTIVE, and MAP_OBJECT_CELL_MOVE_NONE.

Referenced by GameObjectRelocation().

◆ AddObjectToRemoveList()

void Map::AddObjectToRemoveList ( WorldObject obj)
2647{
2648 ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId());
2649
2650 obj->CleanupsBeforeDelete(false); // remove or simplify at least cross referenced links
2651
2652 i_objectsToRemove.insert(obj);
2653 //LOG_DEBUG("maps", "Object ({}) added to removing list.", obj->GetGUID().ToString());
2654}
uint32 GetInstanceId() const
Definition: Object.h:431
virtual void CleanupsBeforeDelete(bool finalCleanup=true)
Definition: Object.cpp:1133
uint32 GetMapId() const
Definition: Position.h:276
std::unordered_set< WorldObject * > i_objectsToRemove
Definition: Map.h:741
uint32 GetInstanceId() const
Definition: Map.h:418

References ASSERT, WorldObject::CleanupsBeforeDelete(), GetId(), WorldObject::GetInstanceId(), GetInstanceId(), WorldLocation::GetMapId(), and i_objectsToRemove.

Referenced by WorldObject::AddObjectToRemoveList(), and wp_commandscript::HandleWpModifyCommand().

◆ AddObjectToSwitchList()

void Map::AddObjectToSwitchList ( WorldObject obj,
bool  on 
)
2657{
2658 ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId());
2659 // i_objectsToSwitch is iterated only in Map::RemoveAllObjectsInRemoveList() and it uses
2660 // the contained objects only if GetTypeId() == TYPEID_UNIT , so we can return in all other cases
2661 if (obj->GetTypeId() != TYPEID_UNIT && obj->GetTypeId() != TYPEID_GAMEOBJECT)
2662 return;
2663
2664 std::map<WorldObject*, bool>::iterator itr = i_objectsToSwitch.find(obj);
2665 if (itr == i_objectsToSwitch.end())
2666 i_objectsToSwitch.insert(itr, std::make_pair(obj, on));
2667 else if (itr->second != on)
2668 i_objectsToSwitch.erase(itr);
2669 else
2670 ABORT();
2671}
#define ABORT
Definition: Errors.h:76
@ TYPEID_GAMEOBJECT
Definition: ObjectGuid.h:39
@ TYPEID_UNIT
Definition: ObjectGuid.h:37
std::map< WorldObject *, bool > i_objectsToSwitch
Definition: Map.h:742

References ABORT, ASSERT, GetId(), WorldObject::GetInstanceId(), GetInstanceId(), WorldLocation::GetMapId(), Object::GetTypeId(), i_objectsToSwitch, TYPEID_GAMEOBJECT, and TYPEID_UNIT.

Referenced by WorldObject::SetWorldObject().

◆ AddPlayerToMap()

bool Map::AddPlayerToMap ( Player player)
virtual

Reimplemented in InstanceMap, and BattlegroundMap.

507{
508 CellCoord cellCoord = Acore::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
509 if (!cellCoord.IsCoordValid())
510 {
511 LOG_ERROR("maps", "Map::Add: Player ({}) has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
512 player->GetGUID().ToString(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
513 return false;
514 }
515
516 Cell cell(cellCoord);
517 EnsureGridLoaded(cell);
518 AddToGrid(player, cell);
519
520 // Check if we are adding to correct map
521 ASSERT (player->GetMap() == this);
522 player->SetMap(this);
523 player->AddToWorld();
524
525 SendInitTransports(player);
526 SendInitSelf(player);
527 SendZoneDynamicInfo(player);
528
529 player->m_clientGUIDs.clear();
530 player->UpdateObjectVisibility(false);
531
532 if (player->IsAlive())
533 ConvertCorpseToBones(player->GetGUID());
534
535 sScriptMgr->OnPlayerEnterMap(this, player);
536 return true;
537}
CellCoord ComputeCellCoord(float x, float y)
Definition: GridDefines.h:191
Map * GetMap() const
Definition: Object.h:517
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
GuidUnorderedSet m_clientGUIDs
Definition: Player.h:2341
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition: PlayerUpdates.cpp:1569
void AddToWorld() override
Definition: Player.cpp:1682
void SetMap(Map *map) override
Definition: Player.cpp:14573
bool IsAlive() const
Definition: Unit.h:1820
Definition: Cell.h:46
bool IsCoordValid() const
Definition: GridDefines.h:136
uint32 x_coord
Definition: GridDefines.h:153
uint32 y_coord
Definition: GridDefines.h:154
void SendZoneDynamicInfo(Player *player)
Definition: Map.cpp:3697
void SendInitSelf(Player *player)
Definition: Map.cpp:2524
void AddToGrid(T *object, Cell const &cell)
Definition: Map.cpp:278
void SendInitTransports(Player *player)
Definition: Map.cpp:2559
bool EnsureGridLoaded(Cell const &)
Definition: Map.cpp:469
Corpse * ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia=false)
Definition: Map.cpp:3618

References AddToGrid(), Player::AddToWorld(), ASSERT, Acore::ComputeCellCoord(), ConvertCorpseToBones(), EnsureGridLoaded(), Object::GetGUID(), WorldObject::GetMap(), Position::GetPositionX(), Position::GetPositionY(), Unit::IsAlive(), CoordPair< LIMIT >::IsCoordValid(), LOG_ERROR, Player::m_clientGUIDs, SendInitSelf(), SendInitTransports(), SendZoneDynamicInfo(), Player::SetMap(), sScriptMgr, ObjectGuid::ToString(), Player::UpdateObjectVisibility(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by InstanceMap::AddPlayerToMap(), BattlegroundMap::AddPlayerToMap(), and WorldSession::HandlePlayerLoginFromDB().

◆ AddToActive() [1/4]

template<>
void Map::AddToActive ( Creature c)
2763{
2765}
void AddToActiveHelper(WorldObject *obj)
Definition: Map.h:755

References AddToActiveHelper().

◆ AddToActive() [2/4]

template<>
void Map::AddToActive ( DynamicObject d)
2769{
2771}

References AddToActiveHelper().

◆ AddToActive() [3/4]

template<>
void Map::AddToActive ( GameObject d)
2775{
2777}

References AddToActiveHelper().

◆ AddToActive() [4/4]

template<class T >
void Map::AddToActive ( T *  obj)
2757{
2758 AddToActiveHelper(obj);
2759}

References AddToActiveHelper().

Referenced by AddObjectHelper(), AddToMap(), and WorldObject::setActive().

◆ AddToActiveHelper()

void Map::AddToActiveHelper ( WorldObject obj)
inlineprivate
756 {
757 m_activeNonPlayers.insert(obj);
758 }

References m_activeNonPlayers.

Referenced by AddToActive().

◆ AddToGrid() [1/5]

template<>
void Map::AddToGrid ( Corpse obj,
Cell const &  cell 
)
322{
323 NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
324 // Corpses are a special object type - they can be added to grid via a call to AddToMap
325 // or loaded through ObjectGridLoader.
326 // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell
327 // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded
328 // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader)
329 // to avoid failing an assertion in GridObject::AddToGrid
330 if (grid->isGridObjectDataLoaded())
331 {
332 if (obj->IsWorldObject())
333 grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
334 else
335 grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
336 }
337}
void AddWorldObject(SPECIFIC_OBJECT *obj)
Definition: Grid.h:57
void AddGridObject(SPECIFIC_OBJECT *obj)
Definition: Grid.h:101
Definition: NGrid.h:37
bool isGridObjectDataLoaded() const
Definition: NGrid.h:65
GridType & GetGridType(const uint32 x, const uint32 y)
Definition: NGrid.h:45
NGridType * getNGrid(uint32 x, uint32 y) const
Definition: Map.h:680

References Grid< ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), Grid< ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddWorldObject(), Cell::CellX(), Cell::CellY(), NGrid< N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetGridType(), getNGrid(), Cell::GridX(), Cell::GridY(), NGrid< N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::isGridObjectDataLoaded(), and WorldObject::IsWorldObject().

◆ AddToGrid() [2/5]

template<>
void Map::AddToGrid ( Creature obj,
Cell const &  cell 
)

◆ AddToGrid() [3/5]

◆ AddToGrid() [4/5]

template<>
void Map::AddToGrid ( GameObject obj,
Cell const &  cell 
)

◆ AddToGrid() [5/5]

template<class T >
void Map::AddToGrid ( T *  object,
Cell const &  cell 
)
private
279{
280 NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
281 if (obj->IsWorldObject())
282 grid->GetGridType(cell.CellX(), cell.CellY()).template AddWorldObject<T>(obj);
283 else
284 grid->GetGridType(cell.CellX(), cell.CellY()).template AddGridObject<T>(obj);
285}

References Cell::CellX(), Cell::CellY(), NGrid< N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetGridType(), getNGrid(), Cell::GridX(), and Cell::GridY().

Referenced by AddPlayerToMap(), AddToMap(), MoveAllCreaturesInMoveList(), MoveAllDynamicObjectsInMoveList(), MoveAllGameObjectsInMoveList(), and PlayerRelocation().

◆ AddToMap() [1/2]

template<>
bool Map::AddToMap ( MotionTransport obj,
bool   
)
615{
616 //TODO: Needs clean up. An object should not be added to map twice.
617 if (obj->IsInWorld())
618 return true;
619
621 if (!cellCoord.IsCoordValid())
622 {
623 LOG_ERROR("maps", "Map::Add: Object {} has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
624 obj->GetGUID().ToString(), obj->GetPositionX(), obj->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
625 return false; //Should delete object
626 }
627
628 Cell cell(cellCoord);
629 if (obj->isActiveObject())
630 EnsureGridLoaded(cell);
631
632 obj->AddToWorld();
633
634 if (obj->isActiveObject())
635 AddToActive(obj);
636
637 _transports.insert(obj);
638
639 // Broadcast creation to players
640 if (!GetPlayers().IsEmpty())
641 {
642 for (Map::PlayerList::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
643 {
644 if (itr->GetSource()->GetTransport() != obj)
645 {
646 UpdateData data;
647 obj->BuildCreateUpdateBlockForPlayer(&data, itr->GetSource());
648 WorldPacket packet;
649 data.BuildPacket(&packet);
650 itr->GetSource()->SendDirectMessage(&packet);
651 }
652 }
653 }
654
655 return true;
656}
bool IsEmpty() const
Definition: LinkedList.h:97
Definition: LinkedList.h:139
void AddToWorld() override
Definition: GameObject.cpp:141
bool IsInWorld() const
Definition: Object.h:101
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
Definition: Object.cpp:189
bool isActiveObject() const
Definition: Object.h:560
Definition: UpdateData.h:52
bool BuildPacket(WorldPacket *packet)
Definition: UpdateData.cpp:105
iterator begin()
Definition: GridRefMgr.h:35
void AddToActive(T *obj)
Definition: Map.cpp:2756
PlayerList const & GetPlayers() const
Definition: Map.h:484
iterator end()
Definition: MapRefMgr.h:37
Definition: WorldPacket.h:27

References _transports, AddToActive(), GameObject::AddToWorld(), GridRefMgr< NGridType >::begin(), Object::BuildCreateUpdateBlockForPlayer(), UpdateData::BuildPacket(), Acore::ComputeCellCoord(), MapRefMgr::end(), EnsureGridLoaded(), Object::GetGUID(), GetPlayers(), Position::GetPositionX(), Position::GetPositionY(), WorldObject::isActiveObject(), CoordPair< LIMIT >::IsCoordValid(), LinkedListHead::IsEmpty(), Object::IsInWorld(), LOG_ERROR, ObjectGuid::ToString(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

◆ AddToMap() [2/2]

template<class T >
bool Map::AddToMap ( T *  obj,
bool  checkTransport = false 
)
558{
559 //TODO: Needs clean up. An object should not be added to map twice.
560 if (obj->IsInWorld())
561 {
562 ASSERT(obj->IsInGrid());
563 obj->UpdateObjectVisibility(true);
564 return true;
565 }
566
567 CellCoord cellCoord = Acore::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
568 //It will create many problems (including crashes) if an object is not added to grid after creation
569 //The correct way to fix it is to make AddToMap return false and delete the object if it is not added to grid
570 //But now AddToMap is used in too many places, I will just see how many ASSERT failures it will cause
571 ASSERT(cellCoord.IsCoordValid());
572 if (!cellCoord.IsCoordValid())
573 {
574 LOG_ERROR("maps", "Map::AddToMap: Object {} has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
575 obj->GetGUID().ToString(), obj->GetPositionX(), obj->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
576 return false; //Should delete object
577 }
578
579 Cell cell(cellCoord);
580 if (obj->isActiveObject())
581 EnsureGridLoaded(cell);
582 else
583 EnsureGridCreated(GridCoord(cell.GridX(), cell.GridY()));
584
585 AddToGrid(obj, cell);
586
587 //Must already be set before AddToMap. Usually during obj->Create.
588 //obj->SetMap(this);
589 obj->AddToWorld();
590
591 if (checkTransport)
592 if (!(obj->GetTypeId() == TYPEID_GAMEOBJECT && obj->ToGameObject()->IsTransport())) // dont add transport to transport ;d
593 if (Transport* transport = GetTransportForPos(obj->GetPhaseMask(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj))
594 transport->AddPassenger(obj, true);
595
596 InitializeObject(obj);
597
598 if (obj->isActiveObject())
599 AddToActive(obj);
600
601 //something, such as vehicle, needs to be update immediately
602 //also, trigger needs to cast spell, if not update, cannot see visual
603 obj->UpdateObjectVisibility(true);
604
605 // Xinef: little hack for vehicles, accessories have to be added after visibility update so they wont fall off the vehicle, moved from Creature::AIM_Initialize
606 // Initialize vehicle, this is done only for summoned npcs, DB creatures are handled by grid loaders
607 if (obj->GetTypeId() == TYPEID_UNIT)
608 if (Vehicle* vehicle = obj->ToCreature()->GetVehicleKit())
609 vehicle->Reset();
610 return true;
611}
CoordPair< MAX_NUMBER_OF_GRIDS > GridCoord
Definition: GridDefines.h:169
Definition: Transport.h:29
Definition: Vehicle.h:30
void InitializeObject(T *obj)
Definition: Map.cpp:540
Transport * GetTransportForPos(uint32 phase, float x, float y, float z, WorldObject *worldobject=nullptr)
Definition: Map.cpp:2016
void EnsureGridCreated(const GridCoord &)
Definition: Map.cpp:434

References AddToActive(), AddToGrid(), ASSERT, Acore::ComputeCellCoord(), EnsureGridCreated(), EnsureGridLoaded(), GetTransportForPos(), Cell::GridX(), Cell::GridY(), InitializeObject(), CoordPair< LIMIT >::IsCoordValid(), LOG_ERROR, TYPEID_GAMEOBJECT, TYPEID_UNIT, CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by Battleground::AddCreature(), Battleground::AddObject(), Player::BuildPlayerRepop(), ConvertCorpseToBones(), GameObject::Create(), MotionTransport::CreateGOPassenger(), MotionTransport::CreateNPCPassenger(), Player::CreatePet(), TransportMgr::CreateTransport(), MotionTransport::DelayedTeleportTransport(), Spell::EffectCreateTamedPet(), Spell::EffectDuel(), Spell::EffectSummonObject(), Spell::EffectSummonObjectWild(), Spell::EffectTameCreature(), Spell::EffectTransmitted(), GameEventMgr::GameEventSpawn(), debug_commandscript::HandleDebugSpawnVehicleCommand(), OutdoorPvPSI::HandleDropFlag(), Pet::LoadPetFromDB(), GameObject::Refresh(), ScriptsProcess(), PoolGroup< T >::Spawn1Object(), Battlefield::SpawnCreature(), Battlefield::SpawnGameObject(), SummonCreature(), SummonGameObject(), WorldObject::SummonGameObject(), Player::SummonPet(), and GameObject::Update().

◆ AddUpdateObject()

void Map::AddUpdateObject ( Object obj)
inline
639 {
640 _updateObjects.insert(obj);
641 }
std::unordered_set< Object * > _updateObjects
Definition: Map.h:800

References _updateObjects.

Referenced by WorldObject::AddToObjectUpdate().

◆ AddWorldObject()

void Map::AddWorldObject ( WorldObject obj)
inline
478{ i_worldObjects.insert(obj); }

References i_worldObjects.

Referenced by WorldObject::SetMap(), and SwitchGridContainers().

◆ AfterPlayerUnlinkFromMap()

void Map::AfterPlayerUnlinkFromMap ( )
virtual

◆ AllTransportsEmpty()

bool Map::AllTransportsEmpty ( ) const
3556{
3557 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
3558 if (!(*itr)->GetPassengers().empty())
3559 return false;
3560
3561 return true;
3562}

References _transports.

Referenced by MapInstanced::CreateInstanceForPlayer(), and UnloadAll().

◆ AllTransportsRemovePassengers()

void Map::AllTransportsRemovePassengers ( )
3565{
3566 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
3567 while (!(*itr)->GetPassengers().empty())
3568 (*itr)->RemovePassenger(*((*itr)->GetPassengers().begin()), true);
3569}

References _transports.

Referenced by MapInstanced::CreateInstanceForPlayer(), and UnloadAll().

◆ Balance()

void Map::Balance ( )
inline
void balance()
Definition: DynamicTree.cpp:132
DynamicMapTree _dynamicTree
Definition: Map.h:707

References _dynamicTree, and DynamicMapTree::balance().

Referenced by EnsureGridLoaded().

◆ buildNGridLinkage()

void Map::buildNGridLinkage ( NGridType pNGridType)
inlineprivate
678{ pNGridType->link(this); }
void link(GridRefMgr< NGrid< N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES > > *pTo)
Definition: NGrid.h:61

References NGrid< N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::link().

Referenced by EnsureGridCreated_i().

◆ CannotEnter()

virtual EnterState Map::CannotEnter ( Player ,
bool   
)
inlinevirtual

◆ CanReachPositionAndGetValidCoords() [1/3]

bool Map::CanReachPositionAndGetValidCoords ( WorldObject const *  source,
float &  destX,
float &  destY,
float &  destZ,
bool  failOnCollision = true,
bool  failOnSlopes = true 
) const

validate the new destination and set reachable coords Check if a given unit can reach a specific point on a segment and set the correct dest coords NOTE: use this method with small segments.

Parameters
failOnCollisionif true, the methods will return false when a collision occurs
failOnSlopesif true, the methods will return false when a non walkable slope is found
Returns
true if the destination is valid, false otherwise
3861{
3862 return CanReachPositionAndGetValidCoords(source, source->GetPositionX(), source->GetPositionY(), source->GetPositionZ(), destX, destY, destZ, failOnCollision, failOnSlopes);
3863}
bool CanReachPositionAndGetValidCoords(WorldObject const *source, PathGenerator *path, float &destX, float &destY, float &destZ, bool failOnCollision=true, bool failOnSlopes=true) const
Check if a given source can reach a specific point following a path and normalize the coords....
Definition: Map.cpp:3820

References CanReachPositionAndGetValidCoords(), Position::GetPositionX(), Position::GetPositionY(), and Position::GetPositionZ().

◆ CanReachPositionAndGetValidCoords() [2/3]

bool Map::CanReachPositionAndGetValidCoords ( WorldObject const *  source,
float  startX,
float  startY,
float  startZ,
float &  destX,
float &  destY,
float &  destZ,
bool  failOnCollision = true,
bool  failOnSlopes = true 
) const
3866{
3867 if (!CheckCollisionAndGetValidCoords(source, startX, startY, startZ, destX, destY, destZ, failOnCollision))
3868 {
3869 return false;
3870 }
3871
3872 Unit const* unit = source->ToUnit();
3873 // if it's not an unit (Object) then we do not have to continue
3874 // with walkable checks
3875 if (!unit)
3876 {
3877 return true;
3878 }
3879
3880 /*
3881 * Walkable checks
3882 */
3883 bool isWaterNext = HasEnoughWater(unit, destX, destY, destZ);
3884 Creature const* creature = unit->ToCreature();
3885 bool cannotEnterWater = isWaterNext && (creature && !creature->CanEnterWater());
3886 bool cannotWalkOrFly = !isWaterNext && !source->ToPlayer() && !unit->CanFly() && (creature && !creature->CanWalk());
3887 if (cannotEnterWater || cannotWalkOrFly ||
3888 (failOnSlopes && !PathGenerator::IsWalkableClimb(startX, startY, startZ, destX, destY, destZ, source->GetCollisionHeight())))
3889 {
3890 return false;
3891 }
3892
3893 return true;
3894}
bool CanWalk() const
Definition: Creature.h:80
bool CanEnterWater() const override
Definition: Creature.cpp:3158
virtual bool CanFly() const =0
bool HasEnoughWater(WorldObject const *searcher, float x, float y, float z) const
Definition: Map.cpp:2507
bool CheckCollisionAndGetValidCoords(WorldObject const *source, float startX, float startY, float startZ, float &destX, float &destY, float &destZ, bool failOnCollision=true) const
validate the new destination and set coords Check if a given unit can face collisions in a specific s...
Definition: Map.cpp:3903
bool IsWalkableClimb(float const *v1, float const *v2) const
Definition: PathGenerator.cpp:951

References Creature::CanEnterWater(), Unit::CanFly(), Creature::CanWalk(), CheckCollisionAndGetValidCoords(), WorldObject::GetCollisionHeight(), HasEnoughWater(), PathGenerator::IsWalkableClimb(), Object::ToCreature(), Object::ToPlayer(), and Object::ToUnit().

◆ CanReachPositionAndGetValidCoords() [3/3]

bool Map::CanReachPositionAndGetValidCoords ( WorldObject const *  source,
PathGenerator path,
float &  destX,
float &  destY,
float &  destZ,
bool  failOnCollision = true,
bool  failOnSlopes = true 
) const

Check if a given source can reach a specific point following a path and normalize the coords. Use this method for long paths, otherwise use the overloaded method with the start coords when you need to do a quick check on small segments.

3821{
3822 G3D::Vector3 prevPath = path->GetStartPosition();
3823 for (auto& vector : path->GetPath())
3824 {
3825 float x = vector.x;
3826 float y = vector.y;
3827 float z = vector.z;
3828
3829 if (!CanReachPositionAndGetValidCoords(source, prevPath.x, prevPath.y, prevPath.z, x, y, z, failOnCollision, failOnSlopes))
3830 {
3831 destX = x;
3832 destY = y;
3833 destZ = z;
3834 return false;
3835 }
3836
3837 prevPath = vector;
3838 }
3839
3840 destX = prevPath.x;
3841 destY = prevPath.y;
3842 destZ = prevPath.z;
3843
3844 return true;
3845}
Movement::PointsArray const & GetPath() const
Definition: PathGenerator.h:91
G3D::Vector3 const & GetStartPosition() const
Definition: PathGenerator.h:87

References CanReachPositionAndGetValidCoords(), PathGenerator::GetPath(), and PathGenerator::GetStartPosition().

Referenced by CanReachPositionAndGetValidCoords(), MotionMaster::MoveBackwards(), and MotionMaster::MoveForwards().

◆ CanUnload()

bool Map::CanUnload ( uint32  diff)
inline
322 {
323 if (!m_unloadTimer)
324 return false;
325
326 if (m_unloadTimer <= diff)
327 return true;
328
329 m_unloadTimer -= diff;
330 return false;
331 }

References m_unloadTimer.

◆ CheckCollisionAndGetValidCoords()

bool Map::CheckCollisionAndGetValidCoords ( WorldObject const *  source,
float  startX,
float  startY,
float  startZ,
float &  destX,
float &  destY,
float &  destZ,
bool  failOnCollision = true 
) const

validate the new destination and set coords Check if a given unit can face collisions in a specific segment

Returns
true if the destination is valid, false otherwise
3904{
3905 // Prevent invalid coordinates here, position is unchanged
3906 if (!Acore::IsValidMapCoord(startX, startY, startZ) || !Acore::IsValidMapCoord(destX, destY, destZ))
3907 {
3908 LOG_FATAL("maps", "Map::CheckCollisionAndGetValidCoords invalid coordinates startX: {}, startY: {}, startZ: {}, destX: {}, destY: {}, destZ: {}", startX, startY, startZ, destX, destY, destZ);
3909 return false;
3910 }
3911
3912 bool isWaterNext = IsInWater(source->GetPhaseMask(), destX, destY, destZ, source->GetCollisionHeight());
3913
3914 PathGenerator path(source);
3915
3916 // Use a detour raycast to get our first collision point
3917 path.SetUseRaycast(true);
3918 bool result = path.CalculatePath(startX, startY, startZ, destX, destY, destZ, false);
3919
3920 Unit const* unit = source->ToUnit();
3921 bool notOnGround = path.GetPathType() & PATHFIND_NOT_USING_PATH
3922 || isWaterNext || (unit && unit->IsFlying());
3923
3924 // Check for valid path types before we proceed
3925 if (!result || (!notOnGround && path.GetPathType() & ~(PATHFIND_NORMAL | PATHFIND_SHORTCUT | PATHFIND_INCOMPLETE | PATHFIND_FARFROMPOLY_END)))
3926 {
3927 return false;
3928 }
3929
3930 G3D::Vector3 endPos = path.GetPath().back();
3931 destX = endPos.x;
3932 destY = endPos.y;
3933 destZ = endPos.z;
3934
3935 // collision check
3936 bool collided = false;
3937
3938 // check static LOS
3939 float halfHeight = source->GetCollisionHeight() * 0.5f;
3940
3941 // Unit is not on the ground, check for potential collision via vmaps
3942 if (notOnGround)
3943 {
3944 bool col = VMAP::VMapFactory::createOrGetVMapMgr()->GetObjectHitPos(source->GetMapId(),
3945 startX, startY, startZ + halfHeight,
3946 destX, destY, destZ + halfHeight,
3947 destX, destY, destZ, -CONTACT_DISTANCE);
3948
3949 destZ -= halfHeight;
3950
3951 // Collided with static LOS object, move back to collision point
3952 if (col)
3953 {
3954 collided = true;
3955 }
3956 }
3957
3958 // check dynamic collision
3959 bool col = source->GetMap()->GetObjectHitPos(source->GetPhaseMask(),
3960 startX, startY, startZ + halfHeight,
3961 destX, destY, destZ + halfHeight,
3962 destX, destY, destZ, -CONTACT_DISTANCE);
3963
3964 destZ -= halfHeight;
3965
3966 // Collided with a gameobject, move back to collision point
3967 if (col)
3968 {
3969 collided = true;
3970 }
3971
3972 float groundZ = VMAP_INVALID_HEIGHT_VALUE;
3973 source->UpdateAllowedPositionZ(destX, destY, destZ, &groundZ);
3974
3975 // position has no ground under it (or is too far away)
3976 if (groundZ <= INVALID_HEIGHT && unit && !unit->CanFly())
3977 {
3978 // fall back to gridHeight if any
3979 float gridHeight = GetGridHeight(destX, destY);
3980 if (gridHeight > INVALID_HEIGHT)
3981 {
3982 destZ = gridHeight + unit->GetHoverHeight();
3983 }
3984 else
3985 {
3986 return false;
3987 }
3988 }
3989
3990 return !failOnCollision || !collided;
3991}
#define VMAP_INVALID_HEIGHT_VALUE
Definition: IVMapMgr.h:49
#define LOG_FATAL(filterType__,...)
Definition: Log.h:155
#define CONTACT_DISTANCE
Definition: ObjectDefines.h:23
#define INVALID_HEIGHT
Definition: Map.h:164
@ PATHFIND_FARFROMPOLY_END
Definition: PathGenerator.h:55
@ PATHFIND_NOT_USING_PATH
Definition: PathGenerator.h:52
@ PATHFIND_NORMAL
Definition: PathGenerator.h:48
@ PATHFIND_SHORTCUT
Definition: PathGenerator.h:49
@ PATHFIND_INCOMPLETE
Definition: PathGenerator.h:50
bool IsValidMapCoord(float c)
Definition: GridDefines.h:216
static VMapMgr2 * createOrGetVMapMgr()
Definition: VMapFactory.cpp:27
bool GetObjectHitPos(unsigned int mapId, float x1, float y1, float z1, float x2, float y2, float z2, float &rx, float &ry, float &rz, float modifyDist) override
Definition: VMapMgr2.cpp:201
float GetHoverHeight() const
Definition: Unit.h:2399
bool IsFlying() const
Definition: Unit.h:2397
bool IsInWater(uint32 phaseMask, float x, float y, float z, float collisionHeight) const
Definition: Map.cpp:2495
float GetGridHeight(float x, float y) const
Definition: Map.cpp:2080
Definition: PathGenerator.h:60

References PathGenerator::CalculatePath(), CanFly, CONTACT_DISTANCE, VMAP::VMapFactory::createOrGetVMapMgr(), WorldObject::GetCollisionHeight(), GetGridHeight(), Unit::GetHoverHeight(), WorldObject::GetMap(), WorldLocation::GetMapId(), GetObjectHitPos(), VMAP::VMapMgr2::GetObjectHitPos(), PathGenerator::GetPath(), PathGenerator::GetPathType(), WorldObject::GetPhaseMask(), INVALID_HEIGHT, Unit::IsFlying(), IsInWater(), Acore::IsValidMapCoord(), LOG_FATAL, PATHFIND_FARFROMPOLY_END, PATHFIND_INCOMPLETE, PATHFIND_NORMAL, PATHFIND_NOT_USING_PATH, PATHFIND_SHORTCUT, PathGenerator::SetUseRaycast(), Object::ToUnit(), WorldObject::UpdateAllowedPositionZ(), and VMAP_INVALID_HEIGHT_VALUE.

Referenced by CanReachPositionAndGetValidCoords().

◆ ContainsGameObjectModel()

bool Map::ContainsGameObjectModel ( const GameObjectModel model) const
inline
560{ return _dynamicTree.contains(model);}
bool contains(const GameObjectModel &) const
Definition: DynamicTree.cpp:127

References _dynamicTree, and DynamicMapTree::contains().

◆ ConvertCorpseToBones()

Corpse * Map::ConvertCorpseToBones ( ObjectGuid const  ownerGuid,
bool  insignia = false 
)
3619{
3620 Corpse* corpse = GetCorpseByPlayer(ownerGuid);
3621 if (!corpse)
3622 return nullptr;
3623
3624 RemoveCorpse(corpse);
3625
3626 // remove corpse from DB
3627 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
3628 corpse->DeleteFromDB(trans);
3629 CharacterDatabase.CommitTransaction(trans);
3630
3631 Corpse* bones = NULL;
3632
3633 // create the bones only if the map and the grid is loaded at the corpse's location
3634 // ignore bones creating option in case insignia
3635 if ((insignia ||
3637 !IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY()))
3638 {
3639 // Create bones, don't change Corpse
3640 bones = new Corpse();
3641 bones->Create(corpse->GetGUID().GetCounter());
3642
3643 for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type
3644 bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
3645
3646 bones->SetCellCoord(corpse->GetCellCoord());
3647 bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
3648 bones->SetPhaseMask(corpse->GetPhaseMask(), false);
3649
3651 bones->SetGuidValue(CORPSE_FIELD_OWNER, corpse->GetOwnerGUID());
3652
3653 for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
3654 if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i))
3655 bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0);
3656
3657 AddCorpse(bones);
3658
3659 bones->UpdatePositionData();
3660
3661 // add bones in grid store if grid loaded where corpse placed
3662 AddToMap(bones);
3663 }
3664
3665 // all references to the corpse should be removed at this point
3666 delete corpse;
3667
3668 return bones;
3669}
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition: DatabaseEnvFwd.h:74
@ CORPSE_FLAG_BONES
Definition: Corpse.h:40
@ CORPSE_FLAG_UNK2
Definition: Corpse.h:42
@ CORPSE_FIELD_FLAGS
Definition: UpdateFields.h:427
@ CORPSE_END
Definition: UpdateFields.h:430
@ CORPSE_FIELD_ITEM
Definition: UpdateFields.h:423
@ CORPSE_FIELD_OWNER
Definition: UpdateFields.h:420
@ OBJECT_FIELD_TYPE
Definition: UpdateFields.h:26
@ EQUIPMENT_SLOT_END
Definition: Player.h:695
@ CONFIG_DEATH_BONES_BG_OR_ARENA
Definition: IWorld.h:111
@ CONFIG_DEATH_BONES_WORLD
Definition: IWorld.h:110
#define sWorld
Definition: World.h:447
Definition: Corpse.h:49
bool Create(ObjectGuid::LowType guidlow)
Definition: Corpse.cpp:62
void SetCellCoord(CellCoord const &cellCoord)
Definition: Corpse.h:75
void DeleteFromDB(CharacterDatabaseTransaction trans)
Definition: Corpse.cpp:120
uint32 GetUInt32Value(uint16 index) const
Definition: Object.cpp:305
void SetGuidValue(uint16 index, ObjectGuid value)
Definition: Object.cpp:723
void SetUInt32Value(uint16 index, uint32 value)
Definition: Object.cpp:650
virtual void SetPhaseMask(uint32 newPhaseMask, bool update)
Definition: Object.cpp:2861
uint32 GetPhaseMask() const
Definition: Object.h:434
void UpdatePositionData()
Definition: Object.cpp:1154
LowType GetCounter() const
Definition: ObjectGuid.h:147
float GetPositionZ() const
Definition: Position.h:119
float GetOrientation() const
Definition: Position.h:120
void Relocate(float x, float y)
Definition: Position.h:73
bool IsBattlegroundOrArena() const
Definition: Map.h:455
void AddCorpse(Corpse *corpse)
Definition: Map.cpp:3587
bool IsRemovalGrid(float x, float y) const
Definition: Map.h:362
Corpse * GetCorpseByPlayer(ObjectGuid const &ownerGuid) const
Definition: Map.h:532
bool AddToMap(T *, bool checkTransport=false)
Definition: Map.cpp:557
void RemoveCorpse(Corpse *corpse)
Definition: Map.cpp:3598

References AddCorpse(), AddToMap(), CharacterDatabase, CONFIG_DEATH_BONES_BG_OR_ARENA, CONFIG_DEATH_BONES_WORLD, CORPSE_END, CORPSE_FIELD_FLAGS, CORPSE_FIELD_ITEM, CORPSE_FIELD_OWNER, CORPSE_FLAG_BONES, CORPSE_FLAG_UNK2, Corpse::Create(), Corpse::DeleteFromDB(), EQUIPMENT_SLOT_END, Corpse::GetCellCoord(), GetCorpseByPlayer(), ObjectGuid::GetCounter(), Object::GetGUID(), Position::GetOrientation(), Corpse::GetOwnerGUID(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Object::GetUInt32Value(), IsBattlegroundOrArena(), IsRemovalGrid(), OBJECT_FIELD_TYPE, Position::Relocate(), RemoveCorpse(), Corpse::SetCellCoord(), Object::SetGuidValue(), WorldObject::SetPhaseMask(), Object::SetUInt32Value(), sWorld, and WorldObject::UpdatePositionData().

Referenced by AddPlayerToMap(), Player::RemovedInsignia(), and RemoveOldCorpses().

◆ CreatureRelocation()

void Map::CreatureRelocation ( Creature creature,
float  x,
float  y,
float  z,
float  o 
)
1026{
1027 Cell old_cell = creature->GetCurrentCell();
1028 Cell new_cell(x, y);
1029
1030 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
1031 {
1032 if (old_cell.DiffGrid(new_cell))
1033 EnsureGridLoaded(new_cell);
1034
1035 AddCreatureToMoveList(creature);
1036 }
1037 else
1039
1040 creature->Relocate(x, y, z, o);
1041 if (creature->IsVehicle())
1042 creature->GetVehicleKit()->RelocatePassengers();
1043 creature->UpdatePositionData();
1044 creature->UpdateObjectVisibility(false);
1045}
Cell const & GetCurrentCell() const
Definition: Object.h:385
bool IsVehicle() const
Definition: Unit.h:1428
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition: Unit.cpp:19378
Vehicle * GetVehicleKit() const
Definition: Unit.h:2365
void RelocatePassengers()
Definition: Vehicle.cpp:501
bool DiffGrid(const Cell &cell) const
Definition: Cell.h:64
bool DiffCell(const Cell &cell) const
Definition: Cell.h:58
void AddCreatureToMoveList(Creature *c)
Definition: Map.cpp:1088
void RemoveCreatureFromMoveList(Creature *c)
Definition: Map.cpp:1095

References AddCreatureToMoveList(), Cell::DiffCell(), Cell::DiffGrid(), EnsureGridLoaded(), MovableMapObject::GetCurrentCell(), Unit::GetVehicleKit(), Unit::IsVehicle(), Position::Relocate(), Vehicle::RelocatePassengers(), RemoveCreatureFromMoveList(), Unit::UpdateObjectVisibility(), and WorldObject::UpdatePositionData().

Referenced by Creature::SetPosition(), StaticTransport::UpdatePassengerPositions(), MotionTransport::UpdatePassengerPositions(), and Unit::UpdatePosition().

◆ DelayedUpdate()

void Map::DelayedUpdate ( const uint32  diff)
virtual

Reimplemented in MapInstanced.

2631{
2633 {
2636
2637 if (!transport->IsInWorld())
2638 continue;
2639
2640 transport->DelayedUpdate(t_diff);
2641 }
2642
2644}
Definition: Transport.h:48
void DelayedUpdate(uint32 diff)
Definition: Transport.cpp:241
void RemoveAllObjectsInRemoveList()
Definition: Map.cpp:2673

References _transports, _transportsUpdateIter, MotionTransport::DelayedUpdate(), Object::IsInWorld(), and RemoveAllObjectsInRemoveList().

Referenced by MapInstanced::DelayedUpdate().

◆ DeleteCorpseData()

void Map::DeleteCorpseData ( )
4031{
4032 // DELETE FROM corpse WHERE mapId = ? AND instanceId = ?
4034 stmt->SetData(0, GetId());
4035 stmt->SetData(1, GetInstanceId());
4036 CharacterDatabase.Execute(stmt);
4037}
@ CHAR_DEL_CORPSES_FROM_MAP
Definition: CharacterDatabase.h:247
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78

References CHAR_DEL_CORPSES_FROM_MAP, CharacterDatabase, GetId(), GetInstanceId(), and PreparedStatementBase::SetData().

Referenced by InstanceMap::UnloadAll().

◆ DeleteFromWorld() [1/2]

template<>
void Map::DeleteFromWorld ( Player player)
427{
429
430 RemoveUpdateObject(player); //TODO: I do not know why we need this, it should be removed in ~Object anyway
431 delete player;
432}
void RemoveObject(T *object)
Definition: ObjectAccessor.h:99
void RemoveUpdateObject(Object *obj)
Definition: Map.h:643

References ObjectAccessor::RemoveObject(), and RemoveUpdateObject().

◆ DeleteFromWorld() [2/2]

template<class T >
void Map::DeleteFromWorld ( T *  obj)
private
420{
421 // Note: In case resurrectable corpse and pet its removed from global lists in own destructor
422 delete obj;
423}

Referenced by RemoveFromMap(), and RemovePlayerFromMap().

◆ DeleteRespawnTimes()

void Map::DeleteRespawnTimes ( )
3441{
3442 _creatureRespawnTimes.clear();
3443 _goRespawnTimes.clear();
3444
3446}
static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId)
Definition: Map.cpp:3448
std::unordered_map< ObjectGuid::LowType, time_t > _creatureRespawnTimes
Definition: Map.h:776
std::unordered_map< ObjectGuid::LowType, time_t > _goRespawnTimes
Definition: Map.h:777

References _creatureRespawnTimes, _goRespawnTimes, DeleteRespawnTimesInDB(), GetId(), and GetInstanceId().

Referenced by InstanceMap::UnloadAll().

◆ DeleteRespawnTimesInDB()

void Map::DeleteRespawnTimesInDB ( uint16  mapId,
uint32  instanceId 
)
static
3449{
3451 stmt->SetData(0, mapId);
3452 stmt->SetData(1, instanceId);
3453 CharacterDatabase.Execute(stmt);
3454
3455 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE);
3456 stmt->SetData(0, mapId);
3457 stmt->SetData(1, instanceId);
3458 CharacterDatabase.Execute(stmt);
3459}
@ CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE
Definition: CharacterDatabase.h:253
@ CHAR_DEL_GO_RESPAWN_BY_INSTANCE
Definition: CharacterDatabase.h:258

References CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE, CHAR_DEL_GO_RESPAWN_BY_INSTANCE, CharacterDatabase, and PreparedStatementBase::SetData().

Referenced by InstanceSaveMgr::_ResetSave(), InstanceSaveMgr::DeleteInstanceSaveIfNeeded(), and DeleteRespawnTimes().

◆ DoForAllPlayers()

◆ DynamicObjectRelocation()

void Map::DynamicObjectRelocation ( DynamicObject go,
float  x,
float  y,
float  z,
float  o 
)
1069{
1070 Cell old_cell = dynObj->GetCurrentCell();
1071 Cell new_cell(x, y);
1072
1073 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
1074 {
1075 if (old_cell.DiffGrid(new_cell))
1076 EnsureGridLoaded(new_cell);
1077
1079 }
1080 else
1082
1083 dynObj->Relocate(x, y, z, o);
1084 dynObj->SetPositionDataUpdate();
1085 dynObj->UpdateObjectVisibility(false);
1086}
void RemoveDynamicObjectFromMoveList(DynamicObject *go)
Definition: Map.cpp:1121
void AddDynamicObjectToMoveList(DynamicObject *go)
Definition: Map.cpp:1114

References AddDynamicObjectToMoveList(), Cell::DiffCell(), Cell::DiffGrid(), EnsureGridLoaded(), MovableMapObject::GetCurrentCell(), Position::Relocate(), RemoveDynamicObjectFromMoveList(), WorldObject::SetPositionDataUpdate(), and WorldObject::UpdateObjectVisibility().

Referenced by StaticTransport::UpdatePassengerPositions(), and MotionTransport::UpdatePassengerPositions().

◆ EnsureGridCreated()

void Map::EnsureGridCreated ( const GridCoord p)
435{
436 if (getNGrid(p.x_coord, p.y_coord)) // pussywizard
437 return;
438 std::lock_guard<std::mutex> guard(GridLock);
440}
std::mutex GridLock
Definition: Map.h:699
void EnsureGridCreated_i(const GridCoord &)
Definition: Map.cpp:444

References EnsureGridCreated_i(), getNGrid(), GridLock, CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by AddToMap(), EnsureGridLoaded(), GetGrid(), and LoadMap().

◆ EnsureGridCreated_i()

void Map::EnsureGridCreated_i ( const GridCoord p)
private
445{
446 if (!getNGrid(p.x_coord, p.y_coord))
447 {
448 // pussywizard: moved setNGrid to the end of the function
450
451 // build a linkage between this map and NGridType
452 buildNGridLinkage(ngt); // pussywizard: getNGrid(x, y) changed to: ngt
453
454 //z coord
455 int gx = (MAX_NUMBER_OF_GRIDS - 1) - p.x_coord;
456 int gy = (MAX_NUMBER_OF_GRIDS - 1) - p.y_coord;
457
458 if (!GridMaps[gx][gy])
459 {
460 LoadMapAndVMap(gx, gy);
461 }
462
463 // pussywizard: moved here
464 setNGrid(ngt, p.x_coord, p.y_coord);
465 }
466}
NGrid< MAX_NUMBER_OF_CELLS, Player, AllWorldObjectTypes, AllGridObjectTypes > NGridType
Definition: GridDefines.h:78
void LoadMapAndVMap(int gx, int gy)
Definition: Map.cpp:227
void buildNGridLinkage(NGridType *pNGridType)
Definition: Map.h:678

References buildNGridLinkage(), getNGrid(), GridMaps, LoadMapAndVMap(), MAX_NUMBER_OF_GRIDS, setNGrid(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by EnsureGridCreated().

◆ EnsureGridLoaded()

bool Map::EnsureGridLoaded ( Cell const &  cell)
private
470{
471 EnsureGridCreated(GridCoord(cell.GridX(), cell.GridY()));
472 NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
473
474 ASSERT(grid);
475 if (!isGridObjectDataLoaded(cell.GridX(), cell.GridY()))
476 {
477 //if (!isGridObjectDataLoaded(cell.GridX(), cell.GridY()))
478 //{
479 LOG_DEBUG("maps", "Loading grid[{}, {}] for map {} instance {}", cell.GridX(), cell.GridY(), GetId(), i_InstanceId);
480
481 setGridObjectDataLoaded(true, cell.GridX(), cell.GridY());
482
483 ObjectGridLoader loader(*grid, this, cell);
484 loader.LoadN();
485
486 Balance();
487 return true;
488 //}
489 }
490
491 return false;
492}
Definition: ObjectGridLoader.h:30
void Balance()
Definition: Map.h:557
void setGridObjectDataLoaded(bool pLoaded, uint32 x, uint32 y)
Definition: Map.h:688
bool isGridObjectDataLoaded(uint32 x, uint32 y) const
Definition: Map.h:687

References ASSERT, Balance(), EnsureGridCreated(), GetId(), getNGrid(), Cell::GridX(), Cell::GridY(), i_InstanceId, isGridObjectDataLoaded(), ObjectGridLoader::LoadN(), LOG_DEBUG, and setGridObjectDataLoaded().

Referenced by AddPlayerToMap(), AddToMap(), CreatureRelocation(), DynamicObjectRelocation(), GameObjectRelocation(), LoadGrid(), MoveAllCreaturesInMoveList(), MoveAllDynamicObjectsInMoveList(), MoveAllGameObjectsInMoveList(), PlayerRelocation(), SummonCreature(), and Visit().

◆ ExistMap()

bool Map::ExistMap ( uint32  mapid,
int  gx,
int  gy 
)
static
88{
89 int len = sWorld->GetDataPath().length() + strlen("maps/%03u%02u%02u.map") + 1;
90 char* tmp = new char[len];
91 snprintf(tmp, len, (char*)(sWorld->GetDataPath() + "maps/%03u%02u%02u.map").c_str(), mapid, gx, gy);
92
93 bool ret = false;
94 FILE* pf = fopen(tmp, "rb");
95
96 if (!pf)
97 LOG_ERROR("maps", "Map file '{}': does not exist!", tmp);
98 else
99 {
100 map_fileheader header;
101 if (fread(&header, sizeof(header), 1, pf) == 1)
102 {
103 if (header.mapMagic != MapMagic.asUInt || header.versionMagic != MapVersionMagic)
104 {
105 LOG_ERROR("maps", "Map file '{}' is from an incompatible map version (%.*u v{}), %.*s 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.",
106 tmp, 4, header.mapMagic, header.versionMagic, 4, MapMagic.asChar, MapVersionMagic);
107 }
108
109 else
110 ret = true;
111 }
112 fclose(pf);
113 }
114 delete [] tmp;
115 return ret;
116}
uint32 MapVersionMagic
Definition: Map.cpp:53
u_map_magic MapMagic
Definition: Map.cpp:52
char asChar[4]
Definition: Map.cpp:48
uint32 asUInt
Definition: Map.cpp:49
Definition: Map.h:89
uint32 mapMagic
Definition: Map.h:90
uint32 versionMagic
Definition: Map.h:91

References u_map_magic::asChar, u_map_magic::asUInt, LOG_ERROR, MapMagic, map_fileheader::mapMagic, MapVersionMagic, sWorld, and map_fileheader::versionMagic.

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

◆ ExistVMap()

bool Map::ExistVMap ( uint32  mapid,
int  gx,
int  gy 
)
static
119{
121 {
122 if (vmgr->isMapLoadingEnabled())
123 {
124 VMAP::LoadResult result = vmgr->existsMap((sWorld->GetDataPath() + "vmaps").c_str(), mapid, gx, gy);
125 std::string name = vmgr->getDirFileName(mapid, gx, gy);
126 switch (result)
127 {
129 break;
131 LOG_ERROR("maps", "VMap file '{}' does not exist", (sWorld->GetDataPath() + "vmaps/" + name));
132 LOG_ERROR("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/"));
133 return false;
135 LOG_ERROR("maps", "VMap file '{}' couldn't be loaded", (sWorld->GetDataPath() + "vmaps/" + name));
136 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.");
137 return false;
138 }
139 }
140 }
141
142 return true;
143}
LoadResult
Definition: IVMapMgr.h:42
Definition: IVMapMgr.h:78

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

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

◆ GameObjectRelocation()

void Map::GameObjectRelocation ( GameObject go,
float  x,
float  y,
float  z,
float  o 
)
1048{
1049 Cell old_cell = go->GetCurrentCell();
1050 Cell new_cell(x, y);
1051
1052 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
1053 {
1054 if (old_cell.DiffGrid(new_cell))
1055 EnsureGridLoaded(new_cell);
1056
1058 }
1059 else
1061
1062 go->Relocate(x, y, z, o);
1063 go->UpdateModelPosition();
1065 go->UpdateObjectVisibility(false);
1066}
void UpdateModelPosition()
Definition: GameObject.cpp:2955
void SetPositionDataUpdate()
Definition: Object.cpp:1145
virtual void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false)
Definition: Object.cpp:2925
void AddGameObjectToMoveList(GameObject *go)
Definition: Map.cpp:1101
void RemoveGameObjectFromMoveList(GameObject *go)
Definition: Map.cpp:1108

References AddGameObjectToMoveList(), Cell::DiffCell(), Cell::DiffGrid(), EnsureGridLoaded(), MovableMapObject::GetCurrentCell(), Position::Relocate(), RemoveGameObjectFromMoveList(), WorldObject::SetPositionDataUpdate(), GameObject::UpdateModelPosition(), and WorldObject::UpdateObjectVisibility().

Referenced by GameObject::SetPosition(), StaticTransport::UpdatePassengerPositions(), MotionTransport::UpdatePassengerPositions(), and StaticTransport::UpdatePosition().

◆ GenerateLowGuid()

◆ GetActiveNonPlayersCount()

size_t Map::GetActiveNonPlayersCount ( ) const
inline
649 {
650 return m_activeNonPlayers.size();
651 }

References m_activeNonPlayers.

Referenced by debug_commandscript::HandleDebugObjectCountMap().

◆ GetAllTransports()

TransportsContainer const & Map::GetAllTransports ( ) const
inline
627{ return _transports; }

References _transports.

Referenced by npc_preparations_for_war_vehicle::UpdateAI().

◆ GetAreaId()

uint32 Map::GetAreaId ( uint32  phaseMask,
float  x,
float  y,
float  z 
) const
2151{
2152 uint32 mogpFlags;
2153 int32 adtId, rootId, groupId;
2154 float vmapZ = z;
2155 bool hasVmapArea = GetAreaInfo(phaseMask, x, y, vmapZ, mogpFlags, adtId, rootId, groupId);
2156
2157 uint32 gridAreaId = 0;
2158 float gridMapHeight = INVALID_HEIGHT;
2159 if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
2160 {
2161 gridAreaId = gmap->getArea(x, y);
2162 gridMapHeight = gmap->getHeight(x, y);
2163 }
2164
2165 uint16 areaId = 0;
2166
2167 // floor is the height we are closer to (but only if above)
2168 if (hasVmapArea && G3D::fuzzyGe(z, vmapZ - GROUND_HEIGHT_TOLERANCE) && (G3D::fuzzyLt(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE) || vmapZ > gridMapHeight))
2169 {
2170 // wmo found
2171 if (WMOAreaTableEntry const* wmoEntry = GetWMOAreaTableEntryByTripple(rootId, adtId, groupId))
2172 areaId = wmoEntry->areaId;
2173
2174 if (!areaId)
2175 areaId = gridAreaId;
2176 }
2177 else
2178 areaId = gridAreaId;
2179
2180 if (!areaId)
2181 areaId = i_mapEntry->linked_zone;
2182
2183 return areaId;
2184}
std::uint32_t uint32
Definition: Define.h:108
std::uint16_t uint16
Definition: Define.h:109
WMOAreaTableEntry const * GetWMOAreaTableEntryByTripple(int32 rootid, int32 adtid, int32 groupid)
Definition: DBCStores.cpp:690
float const GROUND_HEIGHT_TOLERANCE
Definition: SharedDefines.h:25
Definition: Map.h:201
Definition: Map.h:312
GridMap * GetGrid(float x, float y)
Definition: Map.cpp:1980
bool GetAreaInfo(uint32 phaseMask, float x, float y, float z, uint32 &mogpflags, int32 &adtId, int32 &rootId, int32 &groupId) const
Definition: Map.cpp:2101
uint32 linked_zone
Definition: DBCStructure.h:1331
Definition: DBCStructure.h:2132

References GetAreaInfo(), GetGrid(), GetWMOAreaTableEntryByTripple(), GROUND_HEIGHT_TOLERANCE, i_mapEntry, INVALID_HEIGHT, and MapEntry::linked_zone.

Referenced by MapMgr::GetAreaId(), GetLiquidData(), GetZoneAndAreaId(), and GetZoneId().

◆ GetAreaInfo()

bool Map::GetAreaInfo ( uint32  phaseMask,
float  x,
float  y,
float  z,
uint32 mogpflags,
int32 adtId,
int32 rootId,
int32 groupId 
) const
2102{
2103 float vmap_z = z;
2104 float dynamic_z = z;
2105 float check_z = z;
2107 uint32 vflags;
2108 int32 vadtId;
2109 int32 vrootId;
2110 int32 vgroupId;
2111 uint32 dflags;
2112 int32 dadtId;
2113 int32 drootId;
2114 int32 dgroupId;
2115
2116 bool hasVmapAreaInfo = vmgr->GetAreaInfo(GetId(), x, y, vmap_z, vflags, vadtId, vrootId, vgroupId);
2117 bool hasDynamicAreaInfo = _dynamicTree.GetAreaInfo(x, y, dynamic_z, phaseMask, dflags, dadtId, drootId, dgroupId);
2118 auto useVmap = [&]() { check_z = vmap_z; flags = vflags; adtId = vadtId; rootId = vrootId; groupId = vgroupId; };
2119 auto useDyn = [&]() { check_z = dynamic_z; flags = dflags; adtId = dadtId; rootId = drootId; groupId = dgroupId; };
2120
2121 if (hasVmapAreaInfo)
2122 {
2123 if (hasDynamicAreaInfo && dynamic_z > vmap_z)
2124 useDyn();
2125 else
2126 useVmap();
2127 }
2128 else if (hasDynamicAreaInfo)
2129 {
2130 useDyn();
2131 }
2132
2133 if (hasVmapAreaInfo || hasDynamicAreaInfo)
2134 {
2135 // check if there's terrain between player height and object height
2136 if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
2137 {
2138 float mapHeight = gmap->getHeight(x, y);
2139 // z + 2.0f condition taken from GetHeight(), not sure if it's such a great choice...
2140 if (z + 2.0f > mapHeight && mapHeight > check_z)
2141 return false;
2142 }
2143
2144 return true;
2145 }
2146
2147 return false;
2148}
bool GetAreaInfo(float x, float y, float &z, uint32 phasemask, uint32 &flags, int32 &adtId, int32 &rootId, int32 &groupId) const
Definition: DynamicTree.cpp:311
virtual bool GetAreaInfo(uint32 pMapId, float x, float y, float &z, uint32 &flags, int32 &adtId, int32 &rootId, int32 &groupId) const =0

References _dynamicTree, VMAP::VMapFactory::createOrGetVMapMgr(), DynamicMapTree::GetAreaInfo(), VMAP::IVMapMgr::GetAreaInfo(), GetGrid(), and GetId().

Referenced by GetAreaId().

◆ GetCorpse()

Corpse * Map::GetCorpse ( ObjectGuid const  guid)
3300{
3301 return _objectsStore.Find<Corpse>(guid);
3302}
SPECIFIC_TYPE * Find(KEY_TYPE const &handle)
Definition: TypeContainer.h:147
MapStoredObjectTypesContainer _objectsStore
Definition: Map.h:793

References _objectsStore, and TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Find().

Referenced by ObjectAccessor::GetCorpse(), and ScriptsProcess().

◆ GetCorpseByPlayer()

Corpse * Map::GetCorpseByPlayer ( ObjectGuid const &  ownerGuid) const
inline
533 {
534 auto itr = _corpsesByPlayer.find(ownerGuid);
535 if (itr != _corpsesByPlayer.end())
536 return itr->second;
537
538 return nullptr;
539 }

References _corpsesByPlayer.

Referenced by ConvertCorpseToBones(), Player::GetCorpse(), and WorldSession::HandleMoveWorldportAck().

◆ GetCorpsesInCell()

std::unordered_set< Corpse * > const * Map::GetCorpsesInCell ( uint32  cellId) const
inline
524 {
525 auto itr = _corpsesByCell.find(cellId);
526 if (itr != _corpsesByCell.end())
527 return &itr->second;
528
529 return nullptr;
530 }

References _corpsesByCell.

Referenced by ObjectWorldLoader::Visit().

◆ GetCreature()

Creature * Map::GetCreature ( ObjectGuid const  guid)
3305{
3306 return _objectsStore.Find<Creature>(guid);
3307}

References _objectsStore, and TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Find().

Referenced by Battleground::_ProcessResurrect(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ActivatePrisoners(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::AddWave1(), boss_tyrannus::boss_tyrannusAI::boss_tyrannusAI(), instance_ruins_of_ahnqiraj::instance_ruins_of_ahnqiraj_InstanceMapScript::CallNextRajaxxLeader(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::CheckAchievementCriteriaMeet(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::CheckAchievementCriteriaMeet(), instance_obsidian_sanctum::instance_obsidian_sanctum_InstanceMapScript::CheckAchievementCriteriaMeet(), spell_sha_fire_nova::CheckFireTotem(), instance_molten_core::instance_molten_core_InstanceMapScript::CheckMajordomoExecutus(), boss_prince_valanar_icc::boss_prince_valanarAI::CheckRoom(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::CheckTombReset(), instance_stratholme::instance_stratholme_InstanceMapScript::CheckZiggurats(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::CleanupInstance(), violet_hold_trashAI::ClearDoorSealAura(), npc_hor_lich_king::npc_hor_lich_kingAI::DoAction(), npc_vh_void_sentry::npc_vh_void_sentryAI::DoAction(), instance_molten_core::instance_molten_core_InstanceMapScript::DoAction(), boss_ayamiss::DoAction(), instance_obsidian_sanctum::instance_obsidian_sanctum_InstanceMapScript::DoAction(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::DoAction(), boss_black_knight::boss_black_knightAI::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), InstanceScript::DoCastSpellOnPlayer(), WorldSession::DoLootRelease(), InstanceScript::DoRespawnCreature(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::DoSummonGrandChampion(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::DoWipe1(), instance_blackrock_spire::instance_blackrock_spireMapScript::Dragonspireroomcheck(), Spell::EffectDestroyAllTotems(), Spell::EffectScriptEffect(), BattlegroundEY::EventTeamCapturedPoint(), Battleground::GetBGCreature(), boss_erekem::boss_erekemAI::GetChainHealTargetGUID(), Battlefield::GetCreature(), InstanceScript::GetCreature(), ObjectAccessor::GetCreature(), npc_ranshalla::npc_ranshallaAI::GetSpeakerByEntry(), SmartScript::GetTargets(), WorldSession::HandleAreaSpiritHealerQueryOpcode(), WorldSession::HandleAreaSpiritHealerQueueOpcode(), WorldSession::HandleAutostoreLootItemOpcode(), WorldSession::HandleBattlemasterHelloOpcode(), WorldSession::HandleBattlemasterJoinArena(), BattlegroundIC::HandleCapturedNodes(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::HandleDropAttempt(), spell_sha_fire_nova::HandleDummy(), WorldSession::HandleLootMasterGiveOpcode(), WorldSession::HandleLootMoneyOpcode(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::HandleOutro(), WorldSession::HandleTotemDestroyed(), wp_commandscript::HandleWpModifyCommand(), wp_commandscript::HandleWpShowCommand(), TempSummon::InitStats(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::InstanceCleanup(), instance_violet_hold::instance_violet_hold_InstanceMapScript::InstanceCleanup(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::InstanceCleanup(), instance_ulduar::instance_ulduar_InstanceMapScript::IsEncounterInProgress(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::IsWaveAllDead(), npc_ranshalla::npc_ranshallaAI::JustDidDialogueStep(), boss_rajaxx::JustDied(), boss_jormungarAI::JustDied(), npc_ulduar_hodir_priest::npc_ulduar_hodir_priestAI::JustDied(), npc_ulduar_hodir_druid::npc_ulduar_hodir_druidAI::JustDied(), npc_ulduar_hodir_shaman::npc_ulduar_hodir_shamanAI::JustDied(), npc_ulduar_hodir_mage::npc_ulduar_hodir_mageAI::JustDied(), boss_skarvald_the_constructor::boss_skarvald_the_constructorAI::JustDied(), boss_dalronn_the_controller::boss_dalronn_the_controllerAI::JustDied(), npc_ichor_globule::npc_ichor_globuleAI::JustDied(), npc_vh_void_sentry::npc_vh_void_sentryAI::JustDied(), boss_anubarak_trial::boss_anubarak_trialAI::JustEngagedWith(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::JustEngagedWith(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustEngagedWith(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustEngagedWith(), boss_skarvald_the_constructor::boss_skarvald_the_constructorAI::JustEngagedWith(), boss_dalronn_the_controller::boss_dalronn_the_controllerAI::JustEngagedWith(), boss_erekem::boss_erekemAI::JustEngagedWith(), npc_erekem_guard::npc_erekem_guardAI::JustEngagedWith(), Player::KilledMonsterCredit(), boss_professor_putricide::boss_professor_putricideAI::MovementInform(), npc_hor_lich_king::npc_hor_lich_kingAI::MovementInform(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::MoveNPCIfAlive(), BattlegroundAB::NodeOccupied(), npc_pos_leader_second::npc_pos_leader_secondAI::npc_pos_leader_secondAI(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::npc_pos_martin_or_gorkun_secondAI(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::OnCreatureCreate(), instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::OnCreatureCreate(), instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::OnCreatureCreate(), instance_sunwell_plateau::instance_sunwell_plateau_InstanceMapScript::OnCreatureCreate(), instance_ruby_sanctum::instance_ruby_sanctum_InstanceMapScript::OnCreatureCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnCreatureCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), instance_black_temple::instance_black_temple_InstanceMapScript::OnCreatureCreate(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::OnCreatureCreate(), instance_molten_core::instance_molten_core_InstanceMapScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_naxxramas::instance_naxxramas_InstanceMapScript::OnGameObjectRemove(), instance_ruby_sanctum::instance_ruby_sanctum_InstanceMapScript::OnPlayerEnter(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::OnPlayerEnter(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnPlayerEnter(), instance_vault_of_archavon::instance_vault_of_archavon_InstanceMapScript::OnPlayerEnter(), instance_utgarde_keep::instance_utgarde_keep_InstanceMapScript::OnPlayerEnter(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::OnUnitDeath(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnUnitDeath(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnUnitDeath(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), instance_ulduar::instance_ulduar_InstanceMapScript::OnUnitDeath(), BattlegroundAV::PopulateNode(), BattlegroundIC::PostUpdateImpl(), instance_blackrock_spire::instance_blackrock_spireMapScript::ProcessEvent(), instance_eye_of_eternity::instance_eye_of_eternity_InstanceMapScript::ProcessEvent(), instance_stratholme::instance_stratholme_InstanceMapScript::ProcessSlaughterEvent(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::RandomizeCompositionsAndShow(), instance_zulgurub::instance_zulgurub_InstanceMapScript::RemoveHakkarPowerStack(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::ReplaceMoiraIfSaved(), boss_tyrannus::boss_tyrannusAI::Reset(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ResetPrisoners(), ScriptsProcess(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::SendAddsUpStairs(), Player::SendLoot(), instance_molten_core::instance_molten_core_InstanceMapScript::SetBossState(), instance_naxxramas::instance_naxxramas_InstanceMapScript::SetBossState(), instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::SetBossState(), instance_blackrock_spire::instance_blackrock_spireMapScript::SetBossState(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::SetBossState(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::SetBossState(), instance_ruby_sanctum::instance_ruby_sanctum_InstanceMapScript::SetBossState(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetBossState(), instance_black_temple::instance_black_temple_InstanceMapScript::SetBossState(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::SetData(), instance_blackrock_spire::instance_blackrock_spireMapScript::SetData(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::SetData(), instance_karazhan::instance_karazhan_InstanceMapScript::SetData(), instance_scholomance::instance_scholomance_InstanceMapScript::SetData(), instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::SetData(), instance_stratholme::instance_stratholme_InstanceMapScript::SetData(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::SetData(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::SetData(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::SetData(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::SetData(), instance_dire_maul::instance_dire_maul_InstanceMapScript::SetData(), instance_wailing_caverns::instance_wailing_caverns_InstanceMapScript::SetData(), instance_ahnkahet::instance_ahnkahet_InstanceScript::SetData(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::SetData(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::SetData(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetData(), instance_eye_of_eternity::instance_eye_of_eternity_InstanceMapScript::SetData(), instance_oculus::instance_oculus_InstanceMapScript::SetData(), instance_halls_of_stone::instance_halls_of_stone_InstanceMapScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::SetData(), instance_utgarde_keep::instance_utgarde_keep_InstanceMapScript::SetData(), instance_utgarde_pinnacle::instance_utgarde_pinnacle_InstanceMapScript::SetData(), instance_violet_hold::instance_violet_hold_InstanceMapScript::SetData(), instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::SetData(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::SetData(), instance_gruuls_lair::instance_gruuls_lair_InstanceMapScript::SetData(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::ShowKeeperGossip(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::SpawnAnubArak(), instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounterVehicles(), instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter(), instance_molten_core::instance_molten_core_InstanceMapScript::SummonMajordomoExecutus(), instance_blackrock_spire::instance_blackrock_spireMapScript::SummonSolakarWave(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::TombOfSevenEvent(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::TombOfSevenReset(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::Update(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::Update(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Update(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::Update(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::Update(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::Update(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::Update(), instance_naxxramas::instance_naxxramas_InstanceMapScript::Update(), instance_ulduar::instance_ulduar_InstanceMapScript::Update(), instance_vault_of_archavon::instance_vault_of_archavon_InstanceMapScript::Update(), instance_violet_hold::instance_violet_hold_InstanceMapScript::Update(), instance_shattered_halls::instance_shattered_halls_InstanceMapScript::Update(), boss_vaelastrasz::boss_vaelAI::UpdateAI(), boss_black_knight::boss_black_knightAI::UpdateAI(), npc_fos_corrupted_soul_fragment::npc_fos_corrupted_soul_fragmentAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), npc_pos_after_first_boss::npc_pos_after_first_bossAI::UpdateAI(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::UpdateAI(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::UpdateAI(), npc_pos_leader_second::npc_pos_leader_secondAI::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), boss_anubrekhan::boss_anubrekhanAI::UpdateAI(), boss_faerlina::boss_faerlinaAI::UpdateAI(), npc_power_spark::npc_power_sparkAI::UpdateAI(), boss_erekem::boss_erekemAI::UpdateAI(), boss_xevozz::boss_xevozzAI::UpdateAI(), npc_vh_teleportation_portal::npc_vh_teleportation_portalAI::UpdateAI(), npc_ichor_globule::npc_ichor_globuleAI::UpdateAI(), and Player::UpdateTriggerVisibility().

◆ GetCreatureBySpawnIdStore()

◆ GetCreatureRespawnTime()

time_t Map::GetCreatureRespawnTime ( ObjectGuid::LowType  dbGuid) const
inline
572 {
573 std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid);
574 if (itr != _creatureRespawnTimes.end())
575 return itr->second;
576
577 return time_t(0);
578 }

References _creatureRespawnTimes.

Referenced by GetLinkedRespawnTime(), and Creature::LoadCreatureFromDB().

◆ GetDebugInfo()

std::string Map::GetDebugInfo ( ) const
virtual

Reimplemented in InstanceMap.

4040{
4041 std::stringstream sstr;
4042 sstr << std::boolalpha
4043 << "Id: " << GetId() << " InstanceId: " << GetInstanceId() << " Difficulty: " << std::to_string(GetDifficulty())
4044 << " HasPlayers: " << HavePlayers();
4045 return sstr.str();
4046}
bool HavePlayers() const
Definition: Map.h:475
Difficulty GetDifficulty() const
Definition: Map.h:442

References GetDifficulty(), GetId(), GetInstanceId(), and HavePlayers().

Referenced by InstanceMap::GetDebugInfo().

◆ GetDifficulty()

◆ GetDynamicMapTree()

DynamicMapTree const & Map::GetDynamicMapTree ( ) const
inline

◆ GetDynamicObject()

DynamicObject * Map::GetDynamicObject ( ObjectGuid const  guid)
3329{
3330 return _objectsStore.Find<DynamicObject>(guid);
3331}
Definition: DynamicObject.h:35

References _objectsStore, and TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Find().

Referenced by ObjectAccessor::GetDynamicObject().

◆ GetEntrancePos()

bool Map::GetEntrancePos ( int32 mapid,
float &  x,
float &  y 
)
inline
458 {
459 if (!i_mapEntry)
460 return false;
461 return i_mapEntry->GetEntrancePos(mapid, x, y);
462 }
bool GetEntrancePos(int32 &mapid, float &x, float &y) const
Definition: DBCStructure.h:1358

References MapEntry::GetEntrancePos(), and i_mapEntry.

◆ GetEntry()

◆ GetFullTerrainStatusForPosition()

void Map::GetFullTerrainStatusForPosition ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight,
PositionFullTerrainStatus data,
uint8  reqLiquidType = MAP_ALL_LIQUIDS 
)
2291{
2292 GridMap* gmap = GetGrid(x, y);
2293
2295 VMAP::AreaAndLiquidData vmapData;
2296 // VMAP::AreaAndLiquidData dynData;
2297 VMAP::AreaAndLiquidData* wmoData = nullptr;
2298 vmgr->GetAreaAndLiquidData(GetId(), x, y, z, reqLiquidType, vmapData);
2299 // _dynamicTree.GetAreaAndLiquidData(x, y, z, phaseMask, reqLiquidType, dynData);
2300
2301 uint32 gridAreaId = 0;
2302 float gridMapHeight = INVALID_HEIGHT;
2303 if (gmap)
2304 {
2305 gridAreaId = gmap->getArea(x, y);
2306 gridMapHeight = gmap->getHeight(x, y);
2307 }
2308
2309 bool useGridLiquid = true;
2310
2311 // floor is the height we are closer to (but only if above)
2313 if (gridMapHeight > INVALID_HEIGHT && G3D::fuzzyGe(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE))
2314 data.floorZ = gridMapHeight;
2315
2316 if (vmapData.floorZ > VMAP_INVALID_HEIGHT && G3D::fuzzyGe(z, vmapData.floorZ - GROUND_HEIGHT_TOLERANCE) &&
2317 (G3D::fuzzyLt(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE) || vmapData.floorZ > gridMapHeight))
2318 {
2319 data.floorZ = vmapData.floorZ;
2320 wmoData = &vmapData;
2321 }
2322
2323 // NOTE: Objects will not detect a case when a wmo providing area/liquid despawns from under them
2324 // but this is fine as these kind of objects are not meant to be spawned and despawned a lot
2325 // example: Lich King platform
2326 /*
2327 if (dynData.floorZ > VMAP_INVALID_HEIGHT && G3D::fuzzyGe(z, dynData.floorZ - GROUND_HEIGHT_TOLERANCE) &&
2328 (G3D::fuzzyLt(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE) || dynData.floorZ > gridMapHeight) &&
2329 (G3D::fuzzyLt(z, vmapData.floorZ - GROUND_HEIGHT_TOLERANCE) || dynData.floorZ > vmapData.floorZ))
2330 {
2331 data.floorZ = dynData.floorZ;
2332 wmoData = &dynData;
2333 }
2334 */
2335
2336 if (wmoData)
2337 {
2338 if (wmoData->areaInfo)
2339 {
2340 // wmo found
2341 WMOAreaTableEntry const* wmoEntry = GetWMOAreaTableEntryByTripple(wmoData->areaInfo->rootId, wmoData->areaInfo->adtId, wmoData->areaInfo->groupId);
2342 data.outdoors = (wmoData->areaInfo->mogpFlags & 0x8) != 0;
2343 if (wmoEntry)
2344 {
2345 data.areaId = wmoEntry->areaId;
2346 if (wmoEntry->Flags & 4)
2347 data.outdoors = true;
2348 else if (wmoEntry->Flags & 2)
2349 data.outdoors = false;
2350 }
2351
2352 if (!data.areaId)
2353 data.areaId = gridAreaId;
2354
2355 useGridLiquid = !IsInWMOInterior(wmoData->areaInfo->mogpFlags);
2356 }
2357 }
2358 else
2359 {
2360 data.outdoors = true;
2361 data.areaId = gridAreaId;
2362 if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(data.areaId))
2363 data.outdoors = (areaEntry->flags & (AREA_FLAG_INSIDE | AREA_FLAG_OUTSIDE)) != AREA_FLAG_INSIDE;
2364 }
2365
2366 if (!data.areaId)
2368
2369 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(data.areaId);
2370
2371 // liquid processing
2372 if (wmoData && wmoData->liquidInfo && wmoData->liquidInfo->level > wmoData->floorZ)
2373 {
2374 uint32 liquidType = wmoData->liquidInfo->type;
2375 if (GetId() == 530 && liquidType == 2) // gotta love blizzard hacks
2376 liquidType = 15;
2377
2378 uint32 liquidFlagType = 0;
2379 if (LiquidTypeEntry const* liquidData = sLiquidTypeStore.LookupEntry(liquidType))
2380 liquidFlagType = liquidData->Type;
2381
2382 if (liquidType && liquidType < 21 && areaEntry)
2383 {
2384 uint32 overrideLiquid = areaEntry->LiquidTypeOverride[liquidFlagType];
2385 if (!overrideLiquid && areaEntry->zone)
2386 {
2387 AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(areaEntry->zone);
2388 if (zoneEntry)
2389 overrideLiquid = zoneEntry->LiquidTypeOverride[liquidFlagType];
2390 }
2391
2392 if (LiquidTypeEntry const* overrideData = sLiquidTypeStore.LookupEntry(overrideLiquid))
2393 {
2394 liquidType = overrideLiquid;
2395 liquidFlagType = overrideData->Type;
2396 }
2397 }
2398
2399 data.liquidInfo.Level = wmoData->liquidInfo->level;
2400 data.liquidInfo.DepthLevel = wmoData->floorZ;
2401 data.liquidInfo.Entry = liquidType;
2402 data.liquidInfo.Flags = 1 << liquidFlagType;
2403
2404 // Get position delta
2405 float delta = wmoData->liquidInfo->level - z;
2406
2407 if (delta > collisionHeight)
2409 else if (delta > 0.0f)
2411 else if (delta > -0.1f)
2413 else
2415 }
2416
2417 // look up liquid data from grid map
2418 if (gmap && useGridLiquid)
2419 {
2420 LiquidData const& gridLiquidData = gmap->GetLiquidData(x, y, z, collisionHeight, reqLiquidType);
2421 if (gridLiquidData.Status != LIQUID_MAP_NO_WATER && (!wmoData || gridLiquidData.Level > wmoData->floorZ))
2422 {
2423 uint32 liquidEntry = gridLiquidData.Entry;
2424 if (GetId() == 530 && liquidEntry == 2)
2425 liquidEntry = 15;
2426
2427 data.liquidInfo = gridLiquidData;
2428 data.liquidInfo.Entry = liquidEntry;
2429 }
2430 }
2431}
#define VMAP_INVALID_HEIGHT
Definition: IVMapMgr.h:48
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
DBCStorage< LiquidTypeEntry > sLiquidTypeStore(LiquidTypefmt)
static bool IsInWMOInterior(uint32 mogpFlags)
Definition: Map.cpp:2096
@ LIQUID_MAP_UNDER_WATER
Definition: Map.h:147
@ LIQUID_MAP_NO_WATER
Definition: Map.h:143
@ LIQUID_MAP_IN_WATER
Definition: Map.h:146
@ LIQUID_MAP_ABOVE_WATER
Definition: Map.h:144
@ LIQUID_MAP_WATER_WALK
Definition: Map.h:145
@ AREA_FLAG_OUTSIDE
Definition: DBCEnums.h:265
@ AREA_FLAG_INSIDE
Definition: DBCEnums.h:264
Definition: IVMapMgr.h:52
Optional< AreaInfo > areaInfo
Definition: IVMapMgr.h:72
Optional< LiquidInfo > liquidInfo
Definition: IVMapMgr.h:73
float floorZ
Definition: IVMapMgr.h:71
virtual void GetAreaAndLiquidData(uint32 mapId, float x, float y, float z, uint8 reqLiquidType, AreaAndLiquidData &data) const =0
Definition: Map.h:170
float Level
Definition: Map.h:175
uint32 Flags
Definition: Map.h:174
uint32 Entry
Definition: Map.h:173
LiquidStatus Status
Definition: Map.h:177
float DepthLevel
Definition: Map.h:176
float floorZ
Definition: Map.h:184
uint32 areaId
Definition: Map.h:183
LiquidData liquidInfo
Definition: Map.h:186
bool outdoors
Definition: Map.h:185
uint16 getArea(float x, float y) const
Definition: Map.cpp:1556
LiquidData const GetLiquidData(float x, float y, float z, float collisionHeight, uint8 ReqLiquidType) const
Definition: Map.cpp:1893
float getHeight(float x, float y) const
Definition: Map.h:259
Definition: DBCStructure.h:519
uint32 zone
Definition: DBCStructure.h:522
uint32 LiquidTypeOverride[4]
Definition: DBCStructure.h:530
Definition: DBCStructure.h:1281
uint32 Flags
Definition: DBCStructure.h:2142
uint32 areaId
Definition: DBCStructure.h:2143

References AREA_FLAG_INSIDE, AREA_FLAG_OUTSIDE, PositionFullTerrainStatus::areaId, WMOAreaTableEntry::areaId, VMAP::AreaAndLiquidData::areaInfo, VMAP::VMapFactory::createOrGetVMapMgr(), LiquidData::DepthLevel, LiquidData::Entry, LiquidData::Flags, WMOAreaTableEntry::Flags, VMAP::AreaAndLiquidData::floorZ, PositionFullTerrainStatus::floorZ, GridMap::getArea(), VMAP::IVMapMgr::GetAreaAndLiquidData(), GetGrid(), GridMap::getHeight(), GetId(), GridMap::GetLiquidData(), GetWMOAreaTableEntryByTripple(), GROUND_HEIGHT_TOLERANCE, i_mapEntry, INVALID_HEIGHT, IsInWMOInterior(), LiquidData::Level, MapEntry::linked_zone, LIQUID_MAP_ABOVE_WATER, LIQUID_MAP_IN_WATER, LIQUID_MAP_NO_WATER, LIQUID_MAP_UNDER_WATER, LIQUID_MAP_WATER_WALK, VMAP::AreaAndLiquidData::liquidInfo, PositionFullTerrainStatus::liquidInfo, AreaTableEntry::LiquidTypeOverride, PositionFullTerrainStatus::outdoors, sAreaTableStore, sLiquidTypeStore, LiquidData::Status, VMAP_INVALID_HEIGHT, and AreaTableEntry::zone.

Referenced by Creature::Create(), and WorldObject::UpdatePositionData().

◆ GetGameObject()

GameObject * Map::GetGameObject ( ObjectGuid const  guid)
3310{
3311 return _objectsStore.Find<GameObject>(guid);
3312}

References _objectsStore, and TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Find().

Referenced by boss_sjonnir::boss_sjonnirAI::ActivatePipe(), Spell::CheckCast(), Player::CheckDuelDistance(), Spell::CheckEffectTarget(), instance_stratholme::instance_stratholme_InstanceMapScript::CheckZiggurats(), hyjalAI::DeSpawnVeins(), boss_hodir::boss_hodirAI::DoAction(), instance_obsidian_sanctum::instance_obsidian_sanctum_InstanceMapScript::DoAction(), Spell::DoAllEffectOnTarget(), npc_rocknot::npc_rocknotAI::DoGo(), WorldSession::DoLootRelease(), InstanceScript::DoRespawnGameObject(), InstanceScript::DoUseDoorOrButton(), instance_blackrock_spire::instance_blackrock_spireMapScript::Dragonspireroomcheck(), instance_blackrock_spire::instance_blackrock_spireMapScript::Dragonspireroomstore(), Player::DuelComplete(), Spell::EffectSummonObject(), Battleground::GetBGObject(), Battlefield::GetGameObject(), InstanceScript::GetGameObject(), ObjectAccessor::GetGameObject(), Player::GetNextQuest(), BattlegroundRV::GetPillarAtPosition(), GetTransport(), WorldSession::HandleAutostoreLootItemOpcode(), InstanceScript::HandleGameObject(), WorldSession::HandleGameobjectReportUse(), WorldSession::HandleGossipSelectOptionOpcode(), WorldSession::HandleLootMasterGiveOpcode(), WorldSession::HandleLootMoneyOpcode(), WorldSession::HandleMovementOpcodes(), boss_urok_doomhowl::boss_urok_doomhowlAI::InitializeAI(), instance_violet_hold::instance_violet_hold_InstanceMapScript::InstanceCleanup(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::InstanceCleanup(), npc_ranshalla::npc_ranshallaAI::JustDidDialogueStep(), boss_rend_blackhand::boss_rend_blackhandAI::JustDied(), boss_shade_of_aran::JustDied(), npc_gunship::npc_gunshipAI::JustDied(), boss_sjonnir::boss_sjonnirAI::JustDied(), boss_kologarn::boss_kologarnAI::JustDied(), boss_faerlina::boss_faerlinaAI::JustDied(), boss_four_horsemen::boss_four_horsemenAI::JustDied(), boss_gothik::boss_gothikAI::JustDied(), boss_kelthuzad::boss_kelthuzadAI::JustDied(), boss_noth::boss_nothAI::JustDied(), boss_thaddius::boss_thaddiusAI::JustDied(), boss_shade_of_aran::JustEngagedWith(), boss_sjonnir::boss_sjonnirAI::JustEngagedWith(), boss_kologarn::boss_kologarnAI::JustEngagedWith(), boss_thaddius_summon::boss_thaddius_summonAI::JustEngagedWith(), boss_anubrekhan::boss_anubrekhanAI::JustEngagedWith(), boss_faerlina::boss_faerlinaAI::JustEngagedWith(), boss_four_horsemen::boss_four_horsemenAI::JustEngagedWith(), boss_gothik::boss_gothikAI::JustEngagedWith(), boss_heigan::boss_heiganAI::JustEngagedWith(), boss_kelthuzad::boss_kelthuzadAI::JustEngagedWith(), boss_loatheb::boss_loathebAI::JustEngagedWith(), boss_maexxna::boss_maexxnaAI::JustEngagedWith(), boss_noth::boss_nothAI::JustEngagedWith(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnCreatureCreate(), instance_sunwell_plateau::instance_sunwell_plateau_InstanceMapScript::OnPlayerEnter(), instance_ulduar::instance_ulduar_InstanceMapScript::OnPlayerEnter(), instance_eye_of_eternity::instance_eye_of_eternity_InstanceMapScript::OnPlayerEnter(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnUnitDeath(), boss_pyroguard_emberseer::boss_pyroguard_emberseerAI::OpenDoors(), Player::PrepareQuestMenu(), instance_blackrock_spire::instance_blackrock_spireMapScript::ProcessEvent(), instance_eye_of_eternity::instance_eye_of_eternity_InstanceMapScript::ProcessEvent(), instance_stratholme::instance_stratholme_InstanceMapScript::ProcessSlaughterEvent(), instance_eye_of_eternity::instance_eye_of_eternity_InstanceMapScript::ReadSaveDataMore(), boss_sartharion_dragonAI::RemoveTwilightPortal(), boss_rend_blackhand::boss_rend_blackhandAI::Reset(), boss_shade_of_aran::Reset(), boss_anubrekhan::boss_anubrekhanAI::Reset(), boss_faerlina::boss_faerlinaAI::Reset(), boss_four_horsemen::boss_four_horsemenAI::Reset(), boss_gothik::boss_gothikAI::Reset(), boss_heigan::boss_heiganAI::Reset(), boss_kelthuzad::boss_kelthuzadAI::Reset(), boss_loatheb::boss_loathebAI::Reset(), boss_maexxna::boss_maexxnaAI::Reset(), boss_noth::boss_nothAI::Reset(), boss_thaddius::boss_thaddiusAI::Reset(), boss_sjonnir::boss_sjonnirAI::Reset(), boss_kologarn::boss_kologarnAI::Reset(), boss_palehoof::boss_palehoofAI::Reset(), ScriptsProcess(), Player::SendLoot(), Player::SendQuestGiverStatusMultiple(), Acore::VisibleNotifier::SendToSelf(), instance_molten_core::instance_molten_core_InstanceMapScript::SetBossState(), instance_naxxramas::instance_naxxramas_InstanceMapScript::SetBossState(), instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::SetBossState(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::SetBossState(), instance_karazhan::instance_karazhan_InstanceMapScript::SetBossState(), instance_gundrak::instance_gundrak_InstanceMapScript::SetBossState(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetBossState(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::SetBossState(), instance_hellfire_ramparts::instance_hellfire_ramparts_InstanceMapScript::SetBossState(), instance_ulduar::instance_ulduar_InstanceMapScript::setChestsLootable(), instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::SetData(), instance_blackrock_spire::instance_blackrock_spireMapScript::SetData(), instance_scholomance::instance_scholomance_InstanceMapScript::SetData(), instance_stratholme::instance_stratholme_InstanceMapScript::SetData(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::SetData(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::SetData(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::SetData(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetData(), instance_eye_of_eternity::instance_eye_of_eternity_InstanceMapScript::SetData(), instance_oculus::instance_oculus_InstanceMapScript::SetData(), instance_halls_of_stone::instance_halls_of_stone_InstanceMapScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::SetData(), instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::SetData(), instance_gundrak::instance_gundrak_InstanceMapScript::SetData(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::SetData(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::SetData(), instance_halls_of_lightning::instance_halls_of_lightning_InstanceMapScript::SetData(), boss_pyroguard_emberseer::boss_pyroguard_emberseerAI::SetData(), boss_rend_blackhand::boss_rend_blackhandAI::SummonWave(), brann_bronzebeard::brann_bronzebeardAI::SwitchHeadVisaul(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Update(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::Update(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::Update(), instance_gundrak::instance_gundrak_InstanceMapScript::Update(), instance_naxxramas::instance_naxxramas_InstanceMapScript::Update(), instance_violet_hold::instance_violet_hold_InstanceMapScript::Update(), boss_rend_blackhand::boss_rend_blackhandAI::UpdateAI(), npc_harrison_jones::npc_harrison_jonesAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_pos_leader_second::npc_pos_leader_secondAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_freya_nature_bomb::boss_freya_nature_bombAI::UpdateAI(), boss_hodir::boss_hodirAI::UpdateAI(), npc_pet_gen_plump_turkey::UpdateAI(), BattlegroundRV::UpdatePillars(), boss_pyroguard_emberseer::boss_pyroguard_emberseerAI::UpdateRunes(), Player::UpdateTriggerVisibility(), npc_ranshalla::npc_ranshallaAI::WaypointReached(), and npc_arthas::npc_arthasAI::WaypointReached().

◆ GetGameObjectBySpawnIdStore()

◆ GetGameObjectFloor()

float Map::GetGameObjectFloor ( uint32  phasemask,
float  x,
float  y,
float  z,
float  maxSearchDist = DEFAULT_HEIGHT_SEARCH 
) const
inline
564 {
565 return _dynamicTree.getHeight(x, y, z, maxSearchDist, phasemask);
566 }
float getHeight(float x, float y, float z, float maxSearchDist, uint32 phasemask) const
Definition: DynamicTree.cpp:294

References _dynamicTree, and DynamicMapTree::getHeight().

◆ GetGORespawnTime()

time_t Map::GetGORespawnTime ( ObjectGuid::LowType  dbGuid) const
inline
581 {
582 std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid);
583 if (itr != _goRespawnTimes.end())
584 return itr->second;
585
586 return time_t(0);
587 }

References _goRespawnTimes.

Referenced by GetLinkedRespawnTime(), and GameObject::LoadGameObjectFromDB().

◆ GetGrid()

GridMap * Map::GetGrid ( float  x,
float  y 
)
1981{
1982 // half opt method
1983 int gx = (int)(32 - x / SIZE_OF_GRIDS); //grid x
1984 int gy = (int)(32 - y / SIZE_OF_GRIDS); //grid y
1985
1986 // ensure GridMap is loaded
1987 EnsureGridCreated(GridCoord(63 - gx, 63 - gy));
1988
1989 return GridMaps[gx][gy];
1990}
#define SIZE_OF_GRIDS
Definition: MapDefines.h:13

References EnsureGridCreated(), GridMaps, and SIZE_OF_GRIDS.

Referenced by GetAreaId(), GetAreaInfo(), GetFullTerrainStatusForPosition(), GetGridHeight(), GetLiquidData(), GetMinHeight(), GetWaterLevel(), and GetWaterOrGroundLevel().

◆ GetGridHeight()

float Map::GetGridHeight ( float  x,
float  y 
) const
2081{
2082 if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
2083 return gmap->getHeight(x, y);
2084
2086}

References GetGrid(), and VMAP_INVALID_HEIGHT_VALUE.

Referenced by CheckCollisionAndGetValidCoords(), and GetHeight().

◆ GetGuidSequenceGenerator()

template<HighGuid high>
ObjectGuidGeneratorBase & Map::GetGuidSequenceGenerator ( )
inlineprivate
784 {
785 auto itr = _guidGenerators.find(high);
786 if (itr == _guidGenerators.end())
787 itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
788
789 return *itr->second;
790 }
Definition: ObjectGuid.h:299
std::map< HighGuid, std::unique_ptr< ObjectGuidGeneratorBase > > _guidGenerators
Definition: Map.h:792

References _guidGenerators.

◆ GetHeight() [1/2]

float Map::GetHeight ( float  x,
float  y,
float  z,
bool  checkVMap = true,
float  maxSearchDist = DEFAULT_HEIGHT_SEARCH 
) const
2044{
2045 // find raw .map surface under Z coordinates
2046 float mapHeight = VMAP_INVALID_HEIGHT_VALUE;
2047 float gridHeight = GetGridHeight(x, y);
2048 if (G3D::fuzzyGe(z, gridHeight - GROUND_HEIGHT_TOLERANCE))
2049 mapHeight = gridHeight;
2050
2051 float vmapHeight = VMAP_INVALID_HEIGHT_VALUE;
2052 if (checkVMap)
2053 {
2055 vmapHeight = vmgr->getHeight(GetId(), x, y, z, maxSearchDist); // look from a bit higher pos to find the floor
2056 }
2057
2058 // mapHeight set for any above raw ground Z or <= INVALID_HEIGHT
2059 // vmapheight set for any under Z value or <= INVALID_HEIGHT
2060 if (vmapHeight > INVALID_HEIGHT)
2061 {
2062 if (mapHeight > INVALID_HEIGHT)
2063 {
2064 // we have mapheight and vmapheight and must select more appropriate
2065
2066 // we are already under the surface or vmap height above map heigt
2067 // or if the distance of the vmap height is less the land height distance
2068 if (vmapHeight > mapHeight || std::fabs(mapHeight - z) > std::fabs(vmapHeight - z))
2069 return vmapHeight;
2070 else
2071 return mapHeight; // better use .map surface height
2072 }
2073 else
2074 return vmapHeight; // we have only vmapHeight (if have)
2075 }
2076
2077 return mapHeight; // explicitly use map data
2078}
virtual float getHeight(unsigned int pMapId, float x, float y, float z, float maxSearchDist)=0

References VMAP::VMapFactory::createOrGetVMapMgr(), GetGridHeight(), VMAP::IVMapMgr::getHeight(), GetId(), GROUND_HEIGHT_TOLERANCE, INVALID_HEIGHT, and VMAP_INVALID_HEIGHT_VALUE.

Referenced by BattlegroundRV::CheckPositionForUnit(), boss_ick::boss_ickAI::DamageTaken(), GetHeight(), WorldObject::GetMapHeight(), GetTransportForPos(), GetWaterOrGroundLevel(), go_commandscript::HandleGoGridCommand(), go_commandscript::HandleGoXYZCommand(), go_commandscript::HandleGoZoneXYCommand(), spell_winter_veil_racer_rocket_slam::HandleTriggerSpell(), npc_frost_wyrm::npc_frost_wyrmAI::JustDied(), npc_gargoyle::npc_gargoyleAI::JustDied(), spell_svalna_revive_champion::spell_svalna_revive_champion_SpellScript::Land(), Creature::LoadCreatureFromDB(), Spell::SelectImplicitCasterDestTargets(), and npc_cork_gizelton::npc_cork_gizeltonAI::WaypointReached().

◆ GetHeight() [2/2]

float Map::GetHeight ( uint32  phasemask,
float  x,
float  y,
float  z,
bool  vmap = true,
float  maxSearchDist = DEFAULT_HEIGHT_SEARCH 
) const
2488{
2489 float h1, h2;
2490 h1 = GetHeight(x, y, z, vmap, maxSearchDist);
2491 h2 = _dynamicTree.getHeight(x, y, z, maxSearchDist, phasemask);
2492 return std::max<float>(h1, h2);
2493}
float GetHeight(float x, float y, float z, bool checkVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
Definition: Map.cpp:2043

References _dynamicTree, GetHeight(), and DynamicMapTree::getHeight().

◆ GetId()

uint32 Map::GetId ( ) const
inline
378{ return i_mapEntry->MapID; }
uint32 MapID
Definition: DBCStructure.h:1324

References i_mapEntry, and MapEntry::MapID.

Referenced by Group::_cancelHomebindIfInstance(), AddObjectToRemoveList(), AddObjectToSwitchList(), InstanceMap::AddPlayerToMap(), MapUpdateRequest::call(), InstanceMap::CannotEnter(), Player::CanRollForItemInLFG(), InstanceScript::CheckAchievementCriteriaMeet(), Spell::CheckCast(), GameObject::Create(), StaticTransport::Create(), MapInstanced::CreateBattleground(), MapInstanced::CreateInstance(), MapInstanced::CreateInstanceForPlayer(), InstanceMap::CreateInstanceScript(), TransportMgr::CreateInstanceTransports(), OPvPCapturePoint::DelCreature(), DeleteCorpseData(), DeleteRespawnTimes(), CreatureAI::DoZoneInCombat(), EnsureGridLoaded(), anonymous_namespace{AllMapScript.cpp}::ForeachMaps(), GetAreaInfo(), GetDebugInfo(), GetFullTerrainStatusForPosition(), GetHeight(), GetLiquidData(), GetMapDifficulty(), debug_commandscript::HandleDebugObjectCountMap(), gobject_commandscript::HandleGameObjectAddCommand(), go_commandscript::HandleGoZoneXYCommand(), WorldSession::HandleMoveWorldportAck(), npc_commandscript::HandleNpcAddCommand(), WorldSession::HandlePlayerLoginFromDB(), WorldSession::HandlePlayerLoginToCharInWorld(), WorldSession::HandleSetRaidDifficultyOpcode(), wp_commandscript::HandleWpModifyCommand(), wp_commandscript::HandleWpShowCommand(), InitVisibilityDistance(), InstanceMap::InitVisibilityDistance(), Player::inRandomLfgDungeon(), isInLineOfSight(), DisableMgr::IsPathfindingEnabled(), LoadCorpseData(), LoadMap(), LoadMMap(), ObjectGridLoader::LoadN(), LoadRespawnTimes(), LoadVMap(), LogEncounterFinished(), AchievementCriteriaData::Meets(), MotionMaster::MoveFall(), lfg::LFGPlayerScript::OnMapChanged(), InstanceMap::PermBindAllPlayers(), spell_valkyr_touch::spell_valkyr_touchAuraScript::PrepareAuraScript(), RemoveAllPlayers(), RemoveCreatureRespawnTime(), RemoveGORespawnTime(), InstanceMap::Reset(), Player::RewardReputation(), SaveCreatureRespawnTime(), SaveGORespawnTime(), InstanceMap::SendResetWarnings(), World::SetInitialWorldSettings(), WorldObject::SetMap(), Player::SetMover(), SummonCreatureGroup(), MotionTransport::TeleportTransport(), UnloadGrid(), Update(), UpdateEncounterState(), ObjectGridLoader::Visit(), and ~Map().

◆ GetInstanceId()

◆ GetInstanceResetPeriod()

time_t Map::GetInstanceResetPeriod ( ) const
inline

◆ GetLinkedRespawnTime()

time_t Map::GetLinkedRespawnTime ( ObjectGuid  guid) const
3572{
3573 ObjectGuid linkedGuid = sObjectMgr->GetLinkedRespawnGuid(guid);
3574 switch (linkedGuid.GetHigh())
3575 {
3576 case HighGuid::Unit:
3577 return GetCreatureRespawnTime(linkedGuid.GetCounter());
3578 case HighGuid::GameObject:
3579 return GetGORespawnTime(linkedGuid.GetCounter());
3580 default:
3581 break;
3582 }
3583
3584 return time_t(0);
3585}
#define sObjectMgr
Definition: ObjectMgr.h:1640
Definition: ObjectGuid.h:120
HighGuid GetHigh() const
Definition: ObjectGuid.h:145
time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const
Definition: Map.h:571
time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
Definition: Map.h:580

References ObjectGuid::GetCounter(), GetCreatureRespawnTime(), GetGORespawnTime(), ObjectGuid::GetHigh(), and sObjectMgr.

Referenced by GameObject::Update(), and Creature::Update().

◆ GetLiquidData()

LiquidData const Map::GetLiquidData ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight,
uint8  ReqLiquidType 
)
2205{
2206 LiquidData liquidData;
2207
2209 float liquid_level = INVALID_HEIGHT;
2210 float ground_level = INVALID_HEIGHT;
2211 uint32 liquid_type = 0;
2212 uint32 mogpFlags = 0;
2213 bool useGridLiquid = true;
2214 if (vmgr->GetLiquidLevel(GetId(), x, y, z, ReqLiquidType, liquid_level, ground_level, liquid_type, mogpFlags))
2215 {
2216 useGridLiquid = !IsInWMOInterior(mogpFlags);
2217 LOG_DEBUG("maps", "GetLiquidStatus(): vmap liquid level: {} ground: {} type: {}", liquid_level, ground_level, liquid_type);
2218 // Check water level and ground level
2219 if (liquid_level > ground_level && G3D::fuzzyGe(z, ground_level - GROUND_HEIGHT_TOLERANCE))
2220 {
2221 // hardcoded in client like this
2222 if (GetId() == 530 && liquid_type == 2)
2223 liquid_type = 15;
2224
2225 uint32 liquidFlagType = 0;
2226 if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(liquid_type))
2227 liquidFlagType = liq->Type;
2228
2229 if (liquid_type && liquid_type < 21)
2230 {
2231 if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(GetAreaId(phaseMask, x, y, z)))
2232 {
2233 uint32 overrideLiquid = area->LiquidTypeOverride[liquidFlagType];
2234 if (!overrideLiquid && area->zone)
2235 {
2236 area = sAreaTableStore.LookupEntry(area->zone);
2237 if (area)
2238 overrideLiquid = area->LiquidTypeOverride[liquidFlagType];
2239 }
2240
2241 if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(overrideLiquid))
2242 {
2243 liquid_type = overrideLiquid;
2244 liquidFlagType = liq->Type;
2245 }
2246 }
2247 }
2248
2249 liquidData.Level = liquid_level;
2250 liquidData.DepthLevel = ground_level;
2251 liquidData.Entry = liquid_type;
2252 liquidData.Flags = 1 << liquidFlagType;
2253 }
2254
2255 float delta = liquid_level - z;
2256
2257 // Get position delta
2258 if (delta > collisionHeight)
2259 liquidData.Status = LIQUID_MAP_UNDER_WATER;
2260 else if (delta > 0.0f)
2261 liquidData.Status = LIQUID_MAP_IN_WATER;
2262 else if (delta > -0.1f)
2263 liquidData.Status = LIQUID_MAP_WATER_WALK;
2264 else
2265 liquidData.Status = LIQUID_MAP_ABOVE_WATER;
2266 }
2267
2268 if (useGridLiquid)
2269 {
2270 if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
2271 {
2272 LiquidData const& map_data = gmap->GetLiquidData(x, y, z, collisionHeight, ReqLiquidType);
2273 // Not override LIQUID_MAP_ABOVE_WATER with LIQUID_MAP_NO_WATER:
2274 if (map_data.Status != LIQUID_MAP_NO_WATER && (map_data.Level > ground_level))
2275 {
2276 // hardcoded in client like this
2277 uint32 liquidEntry = map_data.Entry;
2278 if (GetId() == 530 && liquidEntry == 2)
2279 liquidEntry = 15;
2280
2281 liquidData = map_data;
2282 liquidData.Entry = liquidEntry;
2283 }
2284 }
2285 }
2286
2287 return liquidData;
2288}
virtual bool GetLiquidLevel(uint32 pMapId, float x, float y, float z, uint8 ReqLiquidType, float &level, float &floor, uint32 &type, uint32 &mogpFlags) const =0
uint32 GetAreaId(uint32 phaseMask, float x, float y, float z) const
Definition: Map.cpp:2150

References VMAP::VMapFactory::createOrGetVMapMgr(), LiquidData::DepthLevel, LiquidData::Entry, LiquidData::Flags, GetAreaId(), GetGrid(), GetId(), VMAP::IVMapMgr::GetLiquidLevel(), GROUND_HEIGHT_TOLERANCE, INVALID_HEIGHT, IsInWMOInterior(), LiquidData::Level, LIQUID_MAP_ABOVE_WATER, LIQUID_MAP_IN_WATER, LIQUID_MAP_NO_WATER, LIQUID_MAP_UNDER_WATER, LIQUID_MAP_WATER_WALK, LOG_DEBUG, sAreaTableStore, sLiquidTypeStore, and LiquidData::Status.

Referenced by PathGenerator::BuildPolyPath(), PathGenerator::GetNavTerrain(), GetWaterOrGroundLevel(), HasEnoughWater(), IsInWater(), IsUnderWater(), Spell::SelectImplicitCasterDestTargets(), and spell_spawn_blood_pool::SetDest().

◆ GetMapDifficulty()

MapDifficulty const * Map::GetMapDifficulty ( ) const
3200{
3202}
MapDifficulty const * GetMapDifficultyData(uint32 mapId, Difficulty difficulty)
Definition: DBCStores.cpp:757

References GetDifficulty(), GetId(), and GetMapDifficultyData().

Referenced by InstanceMap::GetMaxPlayers(), and InstanceMap::GetMaxResetDelay().

◆ GetMapName()

char const * Map::GetMapName ( ) const
2520{
2521 return i_mapEntry ? i_mapEntry->name[sWorld->GetDefaultDbcLocale()] : "UNNAMEDMAP\x0";
2522}
char const * name[16]
Definition: DBCStructure.h:1329

References i_mapEntry, MapEntry::name, and sWorld.

Referenced by InstanceMap::CannotEnter(), debug_commandscript::HandleDebugObjectCountMap(), go_commandscript::HandleGoZoneXYCommand(), LoadMMap(), LoadVMap(), LogCommandUsage(), and InstanceMap::PermBindAllPlayers().

◆ GetMinHeight()

float Map::GetMinHeight ( float  x,
float  y 
) const
2089{
2090 if (GridMap const* grid = const_cast<Map*>(this)->GetGrid(x, y))
2091 return grid->getMinHeight(x, y);
2092
2093 return -500.0f;
2094}

References GetGrid().

Referenced by WorldSession::HandleMovementOpcodes().

◆ GetMMapLock()

std::shared_mutex & Map::GetMMapLock ( ) const
inline
386{ return *(const_cast<std::shared_mutex*>(&MMapLock)); }
std::shared_mutex MMapLock
Definition: Map.h:700

References MMapLock.

◆ getNGrid()

NGridType * Map::getNGrid ( uint32  x,
uint32  y 
) const
inlineprivate
681 {
683 return i_grids[x][y];
684 }
NGridType * i_grids[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS]
Definition: Map.h:735

References ASSERT, i_grids, and MAX_NUMBER_OF_GRIDS.

Referenced by AddToGrid(), EnsureGridCreated(), EnsureGridCreated_i(), EnsureGridLoaded(), IsGridLoaded(), isGridObjectDataLoaded(), IsRemovalGrid(), setGridObjectDataLoaded(), SwitchGridContainers(), and Visit().

◆ GetObjectHitPos()

bool Map::GetObjectHitPos ( uint32  phasemask,
float  x1,
float  y1,
float  z1,
float  x2,
float  y2,
float  z2,
float &  rx,
float &  ry,
float &  rz,
float  modifyDist 
)
2474{
2475 G3D::Vector3 startPos(x1, y1, z1);
2476 G3D::Vector3 dstPos(x2, y2, z2);
2477
2478 G3D::Vector3 resultPos;
2479 bool result = _dynamicTree.GetObjectHitPos(phasemask, startPos, dstPos, resultPos, modifyDist);
2480
2481 rx = resultPos.x;
2482 ry = resultPos.y;
2483 rz = resultPos.z;
2484 return result;
2485}
bool GetObjectHitPos(uint32 phasemask, const G3D::Vector3 &pPos1, const G3D::Vector3 &pPos2, G3D::Vector3 &pResultHitPos, float pModifyDist) const
Definition: DynamicTree.cpp:230

References _dynamicTree, and DynamicMapTree::GetObjectHitPos().

Referenced by CheckCollisionAndGetValidCoords(), and Spell::SelectImplicitCasterDestTargets().

◆ GetObjectsStore()

◆ GetParent()

Map const * Map::GetParent ( ) const
inline
383{ return m_parentMap; }

References m_parentMap.

◆ GetPet()

Pet * Map::GetPet ( ObjectGuid const  guid)
3315{
3316 return _objectsStore.Find<Pet>(guid);
3317}
Definition: Pet.h:40

References _objectsStore, and TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Find().

Referenced by ObjectAccessor::GetPet(), and ScriptsProcess().

◆ GetPlayers()

PlayerList const & Map::GetPlayers ( ) const
inline
484{ return m_mapRefMgr; }
MapRefMgr m_mapRefMgr
Definition: Map.h:710

References m_mapRefMgr.

Referenced by AddToMap(), boss_hadronox::boss_hadronoxAI::AnyPlayerValid(), MotionTransport::BuildUpdate(), StaticTransport::BuildUpdate(), InstanceMap::CannotEnter(), boss_professor_putricide::boss_professor_putricideAI::ChangePhase(), boss_gothik::boss_gothikAI::CheckGroupSplitted(), boss_volazj::CheckPhaseMinions(), boss_skadi_grauf::boss_skadi_graufAI::CheckPlayers(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::ChromieWhisper(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), npc_arthas::npc_arthasAI::DoAction(), InstanceScript::DoCastSpellOnPlayers(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::DoCheckDedicatedInsanity(), boss_algalon_the_observer::boss_algalon_the_observerAI::DoCheckHeraldOfTheTitans(), DoForAllPlayers(), instance_violet_hold::instance_violet_hold_InstanceMapScript::DoNeedCleanup(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::DoNeedCleanup(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::DoNeedCleanup(), ScriptedAI::DoPlayMusic(), InstanceScript::DoRemoveAurasDueToSpellOnPlayers(), InstanceScript::DoSendNotifyToInstance(), InstanceScript::DoStartTimedAchievement(), InstanceScript::DoStopTimedAchievement(), ScriptedAI::DoTeleportAll(), boss_icehowl::boss_icehowlAI::DoTrampleIfValid(), InstanceScript::DoUpdateAchievementCriteria(), InstanceScript::DoUpdateWorldState(), CreatureAI::DoZoneInCombat(), boss_sapphiron::boss_sapphironAI::EnterCombatSelfFunction(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::EnterEvadeMode(), boss_thorim::boss_thorimAI::GetArenaPlayer(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::GetCreatureEntry(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::GetCreatureEntry(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::GetGameObjectEntry(), instance_sunwell_plateau::instance_sunwell_plateau_InstanceMapScript::GetPlayerInMap(), spell_teron_gorefiend_shadowy_construct::spell_teron_gorefiend_shadowy_construct_AuraScript::HandleEffectApply(), spell_yogg_saron_brain_link::spell_yogg_saron_brain_link_AuraScript::HandleOnEffectApply(), WorldSession::HandleSetRaidDifficultyOpcode(), boss_ichoron::boss_ichoronAI::IchoronDoCastToAllHostilePlayers(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::InstanceCleanup(), boss_halion::boss_halionAI::IsAnyPlayerValid(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::IsEncounterInProgress(), boss_apothecary_hummel::boss_apothecary_hummelAI::JustDied(), npc_coren_direbrew::JustDied(), boss_headless_horseman::JustDied(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::JustDied(), boss_yoggsaron::boss_yoggsaronAI::JustDied(), boss_four_horsemen::boss_four_horsemenAI::JustDied(), boss_alar::boss_alarAI::JustDied(), boss_devourer_of_souls::boss_devourer_of_soulsAI::JustEngagedWith(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), boss_felblood_kaelthas::boss_felblood_kaelthasAI::LapseAction(), LogEncounterFinished(), WorldSession::LogoutPlayer(), npc_image_of_medivh::npc_image_of_medivhAI::NextStep(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::OnCreatureCreate(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnCreatureCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), instance_nexus::instance_nexus_InstanceMapScript::OnCreatureCreate(), instance_shattered_halls::instance_shattered_halls_InstanceMapScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), spell_illidan_tear_of_azzinoth_summon_channel::spell_illidan_tear_of_azzinoth_summon_channel_AuraScript::OnPeriodic(), PlayDirectSoundToMap(), spell_valkyr_touch::spell_valkyr_touchAuraScript::PrepareAuraScript(), SmartScript::ProcessAction(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::RemoveBackPack(), RemoveFromMap(), boss_krystallus::boss_krystallusAI::RemoveStonedEffect(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::ReplaceMoiraIfSaved(), boss_volazj::ResetPlayersPhaseMask(), boss_yoggsaron_constrictor_tentacle::boss_yoggsaron_constrictor_tentacleAI::SelectConstrictTarget(), boss_yoggsaron_corruptor_tentacle::boss_yoggsaron_corruptor_tentacleAI::SelectCorruptionTarget(), boss_gluth::boss_gluthAI::SelectPlayerInRoom(), boss_thorim_arena_npcs::boss_thorim_arena_npcsAI::SelectT(), spell_gen_rallying_cry_of_the_dragonslayer::SelectTarget(), spell_gen_adals_song_of_battle::SelectTarget(), ScriptedAI::SelectTargetFromPlayerList(), npc_minigob_manabonk::npc_minigob_manabonkAI::SelectTargetInDalaran(), CreatureTextMgr::SendChatPacket(), CreatureTextMgr::SendNonChatPacket(), SendPacketToPlayers(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::SendUpdateWorldState(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::SetData(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::SetData(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::SetData(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::SetData(), GameObject::SetLootRecipient(), Creature::SetLootRecipient(), SetZoneMusic(), SetZoneOverrideLight(), SetZoneWeather(), boss_hodir::boss_hodirAI::SpawnHelpers(), instance_zulaman::instance_zulaman_InstanceMapScript::SummonHostage(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Update(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::Update(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::Update(), instance_vault_of_archavon::instance_vault_of_archavon_InstanceMapScript::Update(), boss_chromaggus::boss_chromaggusAI::UpdateAI(), npc_barnes::npc_barnesAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_kiljaeden_controller::npc_kiljaeden_controllerAI::UpdateAI(), npc_singularity::npc_singularityAI::UpdateAI(), boss_janalai::boss_janalaiAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_cthun::UpdateAI(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), boss_twin_valkyrAI::UpdateAI(), npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_gunship_boarding_addAI::UpdateAI(), npc_gunship_gunner::npc_gunship_gunnerAI::UpdateAI(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_icc_gauntlet_controller::npc_icc_gauntlet_controllerAI::UpdateAI(), npc_icc_putricades_trap::npc_icc_putricades_trapAI::UpdateAI(), boss_heigan::boss_heiganAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), npc_scion_of_eternity::npc_scion_of_eternityAI::UpdateAI(), boss_keristrasza::boss_keristraszaAI::UpdateAI(), boss_freya::boss_freyaAI::UpdateAI(), boss_vezax::boss_vezaxAI::UpdateAI(), boss_hodir::boss_hodirAI::UpdateAI(), boss_ignis::boss_ignisAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::UpdateAI(), npc_ulduar_flames_initial::npc_ulduar_flames_initialAI::UpdateAI(), npc_demonic_vapor::npc_demonic_vaporAI::UpdateAI(), UpdateEncounterState(), npc_grimstone::npc_grimstoneAI::UpdateEscortAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateWorldState(), and npc_thrall_bfu::npc_thrall_bfuAI::UpdateWorldState().

◆ GetPlayersCountExceptGMs()

◆ GetSpawnMode()

◆ GetTransport()

Transport * Map::GetTransport ( ObjectGuid const  guid)
3320{
3321 if (guid.GetHigh() != HighGuid::Mo_Transport && guid.GetHigh() != HighGuid::Transport)
3322 return nullptr;
3323
3324 GameObject* go = GetGameObject(guid);
3325 return go ? go->ToTransport() : nullptr;
3326}
Transport * ToTransport()
Definition: GameObject.h:325
GameObject * GetGameObject(ObjectGuid const guid)
Definition: Map.cpp:3309

References GetGameObject(), ObjectGuid::GetHigh(), and GameObject::ToTransport().

Referenced by ObjectAccessor::GetTransport(), WorldSession::HandleMovementOpcodes(), npc_gunship::npc_gunshipAI::JustDied(), npc_gunship_boarding_addAI::MovementInform(), ScriptsProcess(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), and npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI().

◆ GetTransportForPos()

Transport * Map::GetTransportForPos ( uint32  phase,
float  x,
float  y,
float  z,
WorldObject worldobject = nullptr 
)
2017{
2018 G3D::Vector3 v(x, y, z + 2.0f);
2019 G3D::Ray r(v, G3D::Vector3(0, 0, -1));
2020 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
2021 if ((*itr)->IsInWorld() && (*itr)->GetExactDistSq(x, y, z) < 75.0f * 75.0f && (*itr)->m_model)
2022 {
2023 float dist = 30.0f;
2024 bool hit = (*itr)->m_model->intersectRay(r, dist, false, phase, VMAP::ModelIgnoreFlags::Nothing);
2025 if (hit)
2026 return *itr;
2027 }
2028
2029 if (worldobject)
2030 if (GameObject* staticTrans = worldobject->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_TRANSPORT, 75.0f))
2031 if (staticTrans->m_model)
2032 {
2033 float dist = 10.0f;
2034 bool hit = staticTrans->m_model->intersectRay(r, dist, false, phase, VMAP::ModelIgnoreFlags::Nothing);
2035 if (hit)
2036 if (GetHeight(phase, x, y, z, true, 30.0f) < (v.z - dist + 1.0f))
2037 return staticTrans->ToTransport();
2038 }
2039
2040 return nullptr;
2041}
phase
Definition: boss_skadi.cpp:102
@ GAMEOBJECT_TYPE_TRANSPORT
Definition: SharedDefines.h:1543
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
Definition: Object.cpp:2452

References _transports, WorldObject::FindNearestGameObjectOfType(), GAMEOBJECT_TYPE_TRANSPORT, GetHeight(), and VMAP::Nothing.

Referenced by AddToMap(), and Creature::Update().

◆ GetVisibilityRange()

◆ GetWaterLevel()

float Map::GetWaterLevel ( float  x,
float  y 
) const
2434{
2435 if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
2436 return gmap->getLiquidLevel(x, y);
2437 else
2438 return 0;
2439}

References GetGrid().

Referenced by go_commandscript::HandleGoGridCommand(), go_commandscript::HandleGoXYZCommand(), and go_commandscript::HandleGoZoneXYCommand().

◆ GetWaterOrGroundLevel()

float Map::GetWaterOrGroundLevel ( uint32  phasemask,
float  x,
float  y,
float  z,
float *  ground = nullptr,
bool  swim = false,
float  collisionHeight = DEFAULT_COLLISION_HEIGHT 
) const
1993{
1994 if (const_cast<Map*>(this)->GetGrid(x, y))
1995 {
1996 // we need ground level (including grid height version) for proper return water level in point
1997 float ground_z = GetHeight(phasemask, x, y, z + Z_OFFSET_FIND_HEIGHT, true, 50.0f);
1998 if (ground)
1999 *ground = ground_z;
2000
2001 LiquidData const& liquidData = const_cast<Map*>(this)->GetLiquidData(phasemask, x, y, ground_z, collisionHeight, MAP_ALL_LIQUIDS);
2002 switch (liquidData.Status)
2003 {
2005 return std::max<float>(liquidData.Level, ground_z);
2007 return ground_z;
2008 default:
2009 return liquidData.Level;
2010 }
2011 }
2012
2014}
#define MAP_ALL_LIQUIDS
Definition: Map.h:159
constexpr float Z_OFFSET_FIND_HEIGHT
Definition: SharedDefines.h:26
LiquidData const GetLiquidData(uint32 phaseMask, float x, float y, float z, float collisionHeight, uint8 ReqLiquidType)
Definition: Map.cpp:2204

References GetGrid(), GetHeight(), GetLiquidData(), LiquidData::Level, LIQUID_MAP_ABOVE_WATER, LIQUID_MAP_NO_WATER, MAP_ALL_LIQUIDS, LiquidData::Status, VMAP_INVALID_HEIGHT_VALUE, and Z_OFFSET_FIND_HEIGHT.

Referenced by WorldObject::GetMapWaterOrGroundLevel().

◆ GetZoneAndAreaId()

void Map::GetZoneAndAreaId ( uint32  phaseMask,
uint32 zoneid,
uint32 areaid,
float  x,
float  y,
float  z 
) const
2197{
2198 areaid = zoneid = GetAreaId(phaseMask, x, y, z);
2199 if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaid))
2200 if (area->zone)
2201 zoneid = area->zone;
2202}

References GetAreaId(), and sAreaTableStore.

Referenced by WorldObject::AddToWorld(), and MapMgr::GetZoneAndAreaId().

◆ GetZoneId()

uint32 Map::GetZoneId ( uint32  phaseMask,
float  x,
float  y,
float  z 
) const
2187{
2188 uint32 areaId = GetAreaId(phaseMask, x, y, z);
2189 if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId))
2190 if (area->zone)
2191 return area->zone;
2192
2193 return areaId;
2194}

References GetAreaId(), and sAreaTableStore.

Referenced by MapMgr::GetZoneId().

◆ HandleDelayedVisibility()

void Map::HandleDelayedVisibility ( )
894{
896 return;
897 for (std::unordered_set<Unit*>::iterator itr = i_objectsForDelayedVisibility.begin(); itr != i_objectsForDelayedVisibility.end(); ++itr)
898 (*itr)->ExecuteDelayedUnitRelocationEvent();
900}
std::unordered_set< Unit * > i_objectsForDelayedVisibility
Definition: Map.h:388

References i_objectsForDelayedVisibility.

Referenced by Update().

◆ HasEnoughWater() [1/2]

bool Map::HasEnoughWater ( WorldObject const *  searcher,
float  x,
float  y,
float  z 
) const
2508{
2509 LiquidData const& liquidData = const_cast<Map*>(this)->GetLiquidData(searcher->GetPhaseMask(), x, y, z, searcher->GetCollisionHeight(), MAP_ALL_LIQUIDS);
2510 return (liquidData.Status & MAP_LIQUID_STATUS_SWIMMING) != 0 && HasEnoughWater(searcher, liquidData);
2511}
#define MAP_LIQUID_STATUS_SWIMMING
Definition: Map.h:150

References WorldObject::GetCollisionHeight(), GetLiquidData(), WorldObject::GetPhaseMask(), HasEnoughWater(), MAP_ALL_LIQUIDS, MAP_LIQUID_STATUS_SWIMMING, and LiquidData::Status.

Referenced by CanReachPositionAndGetValidCoords(), and HasEnoughWater().

◆ HasEnoughWater() [2/2]

bool Map::HasEnoughWater ( WorldObject const *  searcher,
LiquidData const &  liquidData 
) const
2514{
2515 float minHeightInWater = searcher->GetMinHeightInWater();
2516 return liquidData.Level > INVALID_HEIGHT && liquidData.Level > liquidData.DepthLevel && liquidData.Level - liquidData.DepthLevel >= minHeightInWater;
2517}

References LiquidData::DepthLevel, WorldObject::GetMinHeightInWater(), INVALID_HEIGHT, and LiquidData::Level.

◆ HavePlayers()

◆ InitializeObject() [1/3]

template<>
void Map::InitializeObject ( Creature )
546{
547 //obj->_moveState = MAP_OBJECT_CELL_MOVE_NONE;
548}

◆ InitializeObject() [2/3]

template<>
void Map::InitializeObject ( GameObject )
552{
553 //obj->_moveState = MAP_OBJECT_CELL_MOVE_NONE;
554}

◆ InitializeObject() [3/3]

template<class T >
void Map::InitializeObject ( T *  obj)
private
541{
542}

Referenced by AddToMap().

◆ InitVisibilityDistance()

void Map::InitVisibilityDistance ( )
virtual

Reimplemented in InstanceMap, BattlegroundMap, and MapInstanced.

261{
262 //init visibility for continents
264
265 switch (GetId())
266 {
267 case 609: // Scarlet Enclave (DK starting zone)
268 m_VisibleDistance = 125.0f;
269 break;
270 case 25: // Scott Test (box map)
271 m_VisibleDistance = 200.0f;
272 break;
273 }
274}
static float GetMaxVisibleDistanceOnContinents()
Definition: World.h:321

References GetId(), World::GetMaxVisibleDistanceOnContinents(), and m_VisibleDistance.

Referenced by Map().

◆ InsertGameObjectModel()

void Map::InsertGameObjectModel ( const GameObjectModel model)
inline
559{ _dynamicTree.insert(model); }
void insert(const GameObjectModel &)
Definition: DynamicTree.cpp:117

References _dynamicTree, and DynamicMapTree::insert().

Referenced by GameObject::AddToWorld(), GameObject::UpdateModel(), and GameObject::UpdateModelPosition().

◆ Instanceable()

◆ Is25ManRaid()

bool Map::Is25ManRaid ( ) const
inline
452{ return IsRaid() && i_spawnMode & RAID_DIFFICULTY_MASK_25MAN; } // since 25man difficulties are 1 and 3, we can check them like that
#define RAID_DIFFICULTY_MASK_25MAN
Definition: DBCEnums.h:284
bool IsRaid() const
Definition: Map.h:449

References i_spawnMode, IsRaid(), and RAID_DIFFICULTY_MASK_25MAN.

Referenced by boss_thorim::boss_thorimAI::DamageTaken(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::DoAction(), spell_archavon_rock_shards::spell_archavon_rock_shards_SpellScript::HandleScript(), instance_ulduar::instance_ulduar_InstanceMapScript::instance_ulduar_InstanceMapScript(), spell_the_lich_king_vile_spirits::spell_the_lich_king_vile_spirits_AuraScript::Load(), AchievementCriteriaData::Meets(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), AreaTrigger_at_celestial_planetarium_enterance::OnTrigger(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::Reset(), npc_gunship::npc_gunshipAI::SetGUID(), instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounterVehicles(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::UpdateAI(), boss_grobbulus_poison_cloud::boss_grobbulus_poison_cloudAI::UpdateAI(), boss_freya::boss_freyaAI::UpdateAI(), boss_freya_lifebinder::boss_freya_lifebinderAI::UpdateAI(), boss_freya_nature_bomb::boss_freya_nature_bombAI::UpdateAI(), boss_vezax::boss_vezaxAI::UpdateAI(), boss_kologarn_eyebeam::boss_kologarn_eyebeamAI::UpdateAI(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::UpdateAI(), and UpdateEncounterState().

◆ IsBattleArena()

◆ IsBattleground()

bool Map::IsBattleground ( ) const
inline
453{ return i_mapEntry && i_mapEntry->IsBattleground(); }
bool IsBattleground() const
Definition: DBCStructure.h:1353

References i_mapEntry, and MapEntry::IsBattleground().

Referenced by AuraEffect::HandleAuraDummy().

◆ IsBattlegroundOrArena()

◆ isCellMarked()

bool Map::isCellMarked ( uint32  pCellId)
inline
469{ return marked_cells.test(pCellId); }
std::bitset< TOTAL_NUMBER_OF_CELLS_PER_MAP *TOTAL_NUMBER_OF_CELLS_PER_MAP > marked_cells
Definition: Map.h:737

References marked_cells.

Referenced by VisitNearbyCellsOf().

◆ isCellMarkedLarge()

bool Map::isCellMarkedLarge ( uint32  pCellId)
inline
472{ return marked_cells_large.test(pCellId); }
std::bitset< TOTAL_NUMBER_OF_CELLS_PER_MAP *TOTAL_NUMBER_OF_CELLS_PER_MAP > marked_cells_large
Definition: Map.h:738

References marked_cells_large.

Referenced by VisitNearbyCellsOf(), and VisitNearbyCellsOfPlayer().

◆ IsDungeon()

bool Map::IsDungeon ( ) const
inline
447{ return i_mapEntry && i_mapEntry->IsDungeon(); }
bool IsDungeon() const
Definition: DBCStructure.h:1349

References i_mapEntry, and MapEntry::IsDungeon().

Referenced by Group::_cancelHomebindIfInstance(), InstanceSaveMgr::_ResetOrWarnAll(), InstanceMap::AddPlayerToMap(), GameObject::AddToSkillupList(), Spell::CheckCast(), MapInstanced::CreateInstance(), TransportMgr::CreateTransport(), Spell::DoAllEffectOnTarget(), ScriptedAI::DoTeleportAll(), CreatureAI::DoZoneInCombat(), Spell::EffectTeleportUnits(), SmartScript::FillScript(), Acore::XP::Gain(), WorldObject::GetInstanceScript(), Unit::GetMeleeAttackPoint(), SpellMgr::GetSpellIdForDifficulty(), misc_commandscript::HandleAppearCommand(), WorldSession::HandleAreaTriggerOpcode(), spell_freezing_circle::HandleDamage(), spell_item_nitro_boots::HandleDummy(), instance_commandscript::HandleInstanceSaveDataCommand(), WorldSession::HandleSetDungeonDifficultyOpcode(), WorldSession::HandleSetRaidDifficultyOpcode(), misc_commandscript::HandleSummonCommand(), InstanceSave::InsertToDB(), Player::IsAtGroupRewardDistance(), boss_ossirian::JustEngagedWith(), Unit::Kill(), WorldSession::LogoutPlayer(), Condition::Meets(), AchievementCriteriaData::Meets(), npc_image_of_medivh::npc_image_of_medivhAI::NextStep(), InstanceMap::PermBindAllPlayers(), SmartScript::ProcessAction(), boss_krystallus::boss_krystallusAI::RemoveStonedEffect(), CreatureTextMgr::SendChatPacket(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::SetData(), Player::SetEntryPoint(), Creature::SetLootRecipient(), boss_akilzon::boss_akilzonAI::SetWeather(), lfg::LFGMgr::TeleportPlayer(), ToInstanceMap(), AchievementMgr::UpdateAchievementCriteria(), npc_barnes::npc_barnesAI::UpdateAI(), boss_janalai::boss_janalaiAI::UpdateAI(), and boss_cthun::UpdateAI().

◆ IsGridLoaded() [1/2]

bool Map::IsGridLoaded ( const GridCoord p) const
private

◆ IsGridLoaded() [2/2]

bool Map::IsGridLoaded ( float  x,
float  y 
) const
inline
369 {
371 }
GridCoord ComputeGridCoord(float x, float y)
Definition: GridDefines.h:186
bool IsGridLoaded(float x, float y) const
Definition: Map.h:368

References Acore::ComputeGridCoord(), and IsGridLoaded().

Referenced by ObjectMgr::AddGOData(), GameEventMgr::GameEventSpawn(), IsGridLoaded(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::SetData(), PoolGroup< T >::Spawn1Object(), SwitchGridContainers(), and Visit().

◆ isGridObjectDataLoaded()

bool Map::isGridObjectDataLoaded ( uint32  x,
uint32  y 
) const
inlineprivate

◆ IsHeroic()

bool Map::IsHeroic ( ) const
inline
@ DUNGEON_DIFFICULTY_HEROIC
Definition: DBCEnums.h:275
@ RAID_DIFFICULTY_10MAN_HEROIC
Definition: DBCEnums.h:280

References DUNGEON_DIFFICULTY_HEROIC, i_spawnMode, IsRaid(), and RAID_DIFFICULTY_10MAN_HEROIC.

Referenced by spell_svala_ritual_strike::spell_svala_ritual_strike_AuraScript::CalculateAmount(), boss_eregos::boss_eregosAI::DamageTaken(), npc_orb_carrier::npc_orb_carrierAI::DoAction(), npc_molten_golem::npc_molten_golemAI::DoAction(), BattleExperienceEvent::Execute(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::FillInitialWorldStates(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::GetData(), spell_freezing_circle::HandleDamage(), spell_prince_taldaram_conjure_flame_sphere::HandleScript(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::InstanceCleanup(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::IsHeroic(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsHeroic(), boss_loken::boss_lokenAI::JustEngagedWith(), boss_krystallus::boss_krystallusAI::JustEngagedWith(), npc_tirion_fordring_tft::npc_tirion_fordringAI::JustReachedHome(), npc_frost_tomb::npc_frost_tombAI::npc_frost_tombAI(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::OnPlayerEnter(), at_shattered_halls_execution::OnTrigger(), spell_blood_queen_pact_of_the_darkfallen_dmg::spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript::PeriodicTick(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::ReadSaveDataMore(), npc_tirion_fordring_tft::npc_tirion_fordringAI::Reset(), ScriptedAI::ScriptedAI(), instance_gundrak::instance_gundrak_InstanceMapScript::SetBossState(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetBossState(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::SetData(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::SetData(), instance_oculus::instance_oculus_InstanceMapScript::SetData(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::SetData(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), boss_skadi_grauf::boss_skadi_graufAI::SpawnFlameTriggers(), boss_skadi_grauf::boss_skadi_graufAI::SpellHitTarget(), boss_ionar::boss_ionarAI::Split(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::Update(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::Update(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::Update(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::Update(), npc_time_rift::UpdateAI(), npc_stormforged_lieutenant::npc_stormforged_lieutenantAI::UpdateAI(), boss_ionar::boss_ionarAI::UpdateAI(), boss_loken::boss_lokenAI::UpdateAI(), boss_volkhan::boss_volkhanAI::UpdateAI(), npc_molten_golem::npc_molten_golemAI::UpdateAI(), npc_hol_monument::npc_hol_monumentAI::UpdateAI(), UpdateEncounterState(), and instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::WriteSaveDataMore().

◆ isInLineOfSight()

bool Map::isInLineOfSight ( float  x1,
float  y1,
float  z1,
float  x2,
float  y2,
float  z2,
uint32  phasemask,
LineOfSightChecks  checks,
VMAP::ModelIgnoreFlags  ignoreFlags 
) const
2442{
2443 if (!sWorld->getBoolConfig(CONFIG_VMAP_BLIZZLIKE_PVP_LOS))
2444 {
2446 {
2447 ignoreFlags = VMAP::ModelIgnoreFlags::Nothing;
2448 }
2449 }
2450
2451 if ((checks & LINEOFSIGHT_CHECK_VMAP) && !VMAP::VMapFactory::createOrGetVMapMgr()->isInLineOfSight(GetId(), x1, y1, z1, x2, y2, z2, ignoreFlags))
2452 {
2453 return false;
2454 }
2455
2456 if (sWorld->getBoolConfig(CONFIG_CHECK_GOBJECT_LOS) && (checks & LINEOFSIGHT_CHECK_GOBJECT_ALL))
2457 {
2458 ignoreFlags = VMAP::ModelIgnoreFlags::Nothing;
2459 if (!(checks & LINEOFSIGHT_CHECK_GOBJECT_M2))
2460 {
2461 ignoreFlags = VMAP::ModelIgnoreFlags::M2;
2462 }
2463
2464 if (!_dynamicTree.isInLineOfSight(x1, y1, z1, x2, y2, z2, phasemask, ignoreFlags))
2465 {
2466 return false;
2467 }
2468 }
2469
2470 return true;
2471}
@ LINEOFSIGHT_CHECK_GOBJECT_M2
Definition: Map.h:193
@ LINEOFSIGHT_CHECK_VMAP
Definition: Map.h:191
@ LINEOFSIGHT_CHECK_GOBJECT_ALL
Definition: Map.h:195
@ CONFIG_CHECK_GOBJECT_LOS
Definition: IWorld.h:159
@ CONFIG_VMAP_BLIZZLIKE_PVP_LOS
Definition: IWorld.h:180
bool isInLineOfSight(float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask, VMAP::ModelIgnoreFlags ignoreFlags) const
Definition: DynamicTree.cpp:276
bool isInLineOfSight(float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask, LineOfSightChecks checks, VMAP::ModelIgnoreFlags ignoreFlags) const
Definition: Map.cpp:2441

References _dynamicTree, CONFIG_CHECK_GOBJECT_LOS, CONFIG_VMAP_BLIZZLIKE_PVP_LOS, VMAP::VMapFactory::createOrGetVMapMgr(), GetId(), IsBattlegroundOrArena(), isInLineOfSight(), DynamicMapTree::isInLineOfSight(), LINEOFSIGHT_CHECK_GOBJECT_ALL, LINEOFSIGHT_CHECK_GOBJECT_M2, LINEOFSIGHT_CHECK_VMAP, VMAP::M2, VMAP::Nothing, and sWorld.

Referenced by RandomMovementGenerator< T >::_setRandomLocation(), isInLineOfSight(), WorldObject::IsWithinLOS(), WorldObject::IsWithinLOSInMap(), npc_ulduar_snow_mound::npc_ulduar_snow_moundAI::MoveInLineOfSight(), spell_blood_council_summon_shadow_resonance::spell_blood_council_summon_shadow_resonance_SpellScript::SetDest(), and PathGenerator::ShortenPathUntilDist().

◆ IsInWater()

bool Map::IsInWater ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight 
) const

◆ IsNonRaidDungeon()

bool Map::IsNonRaidDungeon ( ) const
inline
448{ return i_mapEntry && i_mapEntry->IsNonRaidDungeon(); }
bool IsNonRaidDungeon() const
Definition: DBCStructure.h:1350

References i_mapEntry, and MapEntry::IsNonRaidDungeon().

Referenced by WorldSession::HandleSetDungeonDifficultyOpcode(), and Player::RewardReputation().

◆ IsRaid()

◆ IsRaidOrHeroicDungeon()

bool Map::IsRaidOrHeroicDungeon ( ) const
inline
@ DUNGEON_DIFFICULTY_NORMAL
Definition: DBCEnums.h:274

References DUNGEON_DIFFICULTY_NORMAL, i_spawnMode, and IsRaid().

Referenced by Unit::Kill(), and WorldSession::LogoutPlayer().

◆ IsRegularDifficulty()

bool Map::IsRegularDifficulty ( ) const
inline
443{ return GetDifficulty() == REGULAR_DIFFICULTY; }
@ REGULAR_DIFFICULTY
Definition: DBCEnums.h:272

References GetDifficulty(), and REGULAR_DIFFICULTY.

◆ IsRemovalGrid()

bool Map::IsRemovalGrid ( float  x,
float  y 
) const
inline

◆ IsUnderWater()

bool Map::IsUnderWater ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight 
) const
2502{
2503 LiquidData const& liquidData = const_cast<Map*>(this)->GetLiquidData(phaseMask, x, y, z, collisionHeight, MAP_LIQUID_TYPE_WATER | MAP_LIQUID_TYPE_OCEAN);
2504 return liquidData.Status == LIQUID_MAP_UNDER_WATER;
2505}
#define MAP_LIQUID_TYPE_WATER
Definition: Map.h:154
#define MAP_LIQUID_TYPE_OCEAN
Definition: Map.h:155

References GetLiquidData(), LIQUID_MAP_UNDER_WATER, MAP_LIQUID_TYPE_OCEAN, MAP_LIQUID_TYPE_WATER, and LiquidData::Status.

Referenced by WorldSession::HandleMovementOpcodes().

◆ LoadAllCells()

void Map::LoadAllCells ( )
500{
501 for (uint32 cellX = 0; cellX < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellX++)
502 for (uint32 cellY = 0; cellY < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellY++)
504}
#define TOTAL_NUMBER_OF_CELLS_PER_MAP
Definition: GridDefines.h:49
#define CENTER_GRID_CELL_ID
Definition: GridDefines.h:46
#define SIZE_OF_GRID_CELL
Definition: GridDefines.h:44
void LoadGrid(float x, float y)
Definition: Map.cpp:494

References CENTER_GRID_CELL_ID, LoadGrid(), SIZE_OF_GRID_CELL, and TOTAL_NUMBER_OF_CELLS_PER_MAP.

Referenced by World::SetInitialWorldSettings().

◆ LoadCorpseData()

void Map::LoadCorpseData ( )
3994{
3996 stmt->SetData(0, GetId());
3997 stmt->SetData(1, GetInstanceId());
3998
3999 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
4000 // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ?
4001 PreparedQueryResult result = CharacterDatabase.Query(stmt);
4002 if (!result)
4003 return;
4004
4005 do
4006 {
4007 Field* fields = result->Fetch();
4008 CorpseType type = CorpseType(fields[13].Get<uint8>());
4009 uint32 guid = fields[16].Get<uint32>();
4010 if (type >= MAX_CORPSE_TYPE || type == CORPSE_BONES)
4011 {
4012 LOG_ERROR("maps", "Corpse (guid: {}) have wrong corpse type ({}), not loading.", guid, type);
4013 continue;
4014 }
4015
4016 Corpse* corpse = new Corpse(type);
4017
4018 if (!corpse->LoadCorpseFromDB(GenerateLowGuid<HighGuid::Corpse>(), fields))
4019 {
4020 delete corpse;
4021 continue;
4022 }
4023
4024 AddCorpse(corpse);
4025
4026 corpse->UpdatePositionData();
4027 } while (result->NextRow());
4028}
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition: DatabaseEnvFwd.h:50
@ CHAR_SEL_CORPSES
Definition: CharacterDatabase.h:244
CorpseType
Definition: Corpse.h:27
#define MAX_CORPSE_TYPE
Definition: Corpse.h:32
Class used to access individual fields of database query result.
Definition: Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field *fields)
Definition: Corpse.cpp:132

References AddCorpse(), CHAR_SEL_CORPSES, CharacterDatabase, CORPSE_BONES, Field::Get(), GetId(), GetInstanceId(), Corpse::LoadCorpseFromDB(), LOG_ERROR, MAX_CORPSE_TYPE, PreparedStatementBase::SetData(), and WorldObject::UpdatePositionData().

Referenced by MapMgr::CreateBaseMap(), and MapInstanced::CreateInstance().

◆ LoadGrid()

void Map::LoadGrid ( float  x,
float  y 
)
495{
496 EnsureGridLoaded(Cell(x, y));
497}

References EnsureGridLoaded().

Referenced by at_zulgurub_entrance_speech::_OnTrigger(), at_zulgurub_bridge_speech::_OnTrigger(), at_zulgurub_temple_speech::_OnTrigger(), at_zulgurub_bloodfire_pit_speech::_OnTrigger(), at_zulgurub_edge_of_madness_speech::_OnTrigger(), CinematicMgr::BeginCinematic(), instance_stratholme::instance_stratholme_InstanceMapScript::CheckZiggurats(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::CleanupInstance(), MotionTransport::DelayedTeleportTransport(), npc_thrall_warchief::npc_thrall_warchiefAI::DoAction(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DoAction(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::EnsureGridLoaded(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::EnsureGridLoaded(), WorldSession::HandleMoveWorldportAck(), boss_kelidan_the_breaker::JustDied(), boss_kurinnaxx::JustDied(), LoadAllCells(), npc_akama_illidan::npc_akama_illidanAI::npc_akama_illidanAI(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnCreatureCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_ruby_sanctum::instance_ruby_sanctum_InstanceMapScript::OnPlayerEnter(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnPlayerEnter(), instance_sunwell_plateau::instance_sunwell_plateau_InstanceMapScript::OnPlayerEnter(), instance_ulduar::instance_ulduar_InstanceMapScript::OnPlayerEnter(), at_sindragosa_lair::OnTrigger(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), FlightPathMovementGenerator::PreloadEndGrid(), instance_naxxramas::instance_naxxramas_InstanceMapScript::SetBossState(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetBossState(), instance_stratholme::instance_stratholme_InstanceMapScript::SetData(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::SetData(), instance_dire_maul::instance_dire_maul_InstanceMapScript::SetData(), instance_wailing_caverns::instance_wailing_caverns_InstanceMapScript::SetData(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::SetData(), instance_shattered_halls::instance_shattered_halls_InstanceMapScript::SetData(), Vehicle::TeleportVehicle(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Update(), instance_naxxramas::instance_naxxramas_InstanceMapScript::Update(), MotionTransport::UpdatePosition(), and StaticTransport::UpdatePosition().

◆ LoadMap()

void Map::LoadMap ( int  gx,
int  gy,
bool  reload = false 
)
private
184{
185 if (i_InstanceId != 0)
186 {
187 if (GridMaps[gx][gy])
188 return;
189
190 // load grid map for base map
191 m_parentMap->EnsureGridCreated(GridCoord(63 - gx, 63 - gy));
192
193 GridMaps[gx][gy] = m_parentMap->GridMaps[gx][gy];
194 return;
195 }
196
197 if (GridMaps[gx][gy] && !reload)
198 return;
199
200 //map already load, delete it before reloading (Is it necessary? Do we really need the ability the reload maps during runtime?)
201 if (GridMaps[gx][gy])
202 {
203 LOG_DEBUG("maps", "Unloading previously loaded map {} before reloading.", GetId());
204 sScriptMgr->OnUnloadGridMap(this, GridMaps[gx][gy], gx, gy);
205
206 delete (GridMaps[gx][gy]);
207 GridMaps[gx][gy] = nullptr;
208 }
209
210 // map file name
211 char* tmp = nullptr;
212 int len = sWorld->GetDataPath().length() + strlen("maps/%03u%02u%02u.map") + 1;
213 tmp = new char[len];
214 snprintf(tmp, len, (char*)(sWorld->GetDataPath() + "maps/%03u%02u%02u.map").c_str(), GetId(), gx, gy);
215 LOG_DEBUG("maps", "Loading map {}", tmp);
216 // loading data
217 GridMaps[gx][gy] = new GridMap();
218 if (!GridMaps[gx][gy]->loadData(tmp))
219 {
220 LOG_ERROR("maps", "Error loading map file: \n {}\n", tmp);
221 }
222 delete [] tmp;
223
224 sScriptMgr->OnLoadGridMap(this, GridMaps[gx][gy], gx, gy);
225}

References EnsureGridCreated(), GetId(), GridMaps, i_InstanceId, LOG_DEBUG, LOG_ERROR, m_parentMap, sScriptMgr, and sWorld.

Referenced by LoadMapAndVMap().

◆ LoadMapAndVMap()

void Map::LoadMapAndVMap ( int  gx,
int  gy 
)
private
228{
229 LoadMap(gx, gy);
230 if (i_InstanceId == 0)
231 {
232 LoadVMap(gx, gy); // Only load the data for the base map
233 LoadMMap(gx, gy);
234 }
235}
void LoadMMap(int gx, int gy)
Definition: Map.cpp:145
void LoadMap(int gx, int gy, bool reload=false)
Definition: Map.cpp:183
void LoadVMap(int gx, int gy)
Definition: Map.cpp:165

References i_InstanceId, LoadMap(), LoadMMap(), and LoadVMap().

Referenced by EnsureGridCreated_i().

◆ LoadMMap()

void Map::LoadMMap ( int  gx,
int  gy 
)
private
146{
147 if (!DisableMgr::IsPathfindingEnabled(this)) // pussywizard
148 return;
149
150 int mmapLoadResult = MMAP::MMapFactory::createOrGetMMapMgr()->loadMap(GetId(), gx, gy);
151 switch (mmapLoadResult)
152 {
154 LOG_DEBUG("maps", "MMAP loaded name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy);
155 break;
157 LOG_DEBUG("maps", "Could not load MMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy);
158 break;
160 LOG_DEBUG("maps", "Ignored MMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy);
161 break;
162 }
163}
@ MMAP_LOAD_RESULT_ERROR
Definition: IMMAPMgr.h:29
@ MMAP_LOAD_RESULT_IGNORED
Definition: IMMAPMgr.h:31
@ MMAP_LOAD_RESULT_OK
Definition: IMMAPMgr.h:30
bool IsPathfindingEnabled(const Map *map)
Definition: DisableMgr.cpp:411
bool loadMap(uint32 mapId, int32 x, int32 y)
Definition: MMapMgr.cpp:128
const char * GetMapName() const
Definition: Map.cpp:2519

References MMAP::MMapFactory::createOrGetMMapMgr(), GetId(), GetMapName(), 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 LoadMapAndVMap().

◆ LoadRespawnTimes()

void Map::LoadRespawnTimes ( )
3408{
3410 stmt->SetData(0, GetId());
3411 stmt->SetData(1, GetInstanceId());
3412 if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
3413 {
3414 do
3415 {
3416 Field* fields = result->Fetch();
3417 ObjectGuid::LowType lowguid = fields[0].Get<uint32>();
3418 uint32 respawnTime = fields[1].Get<uint32>();
3419
3420 _creatureRespawnTimes[lowguid] = time_t(respawnTime);
3421 } while (result->NextRow());
3422 }
3423
3424 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GO_RESPAWNS);
3425 stmt->SetData(0, GetId());
3426 stmt->SetData(1, GetInstanceId());
3427 if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
3428 {
3429 do
3430 {
3431 Field* fields = result->Fetch();
3432 ObjectGuid::LowType lowguid = fields[0].Get<uint32>();
3433 uint32 respawnTime = fields[1].Get<uint32>();
3434
3435 _goRespawnTimes[lowguid] = time_t(respawnTime);
3436 } while (result->NextRow());
3437 }
3438}
@ CHAR_SEL_CREATURE_RESPAWNS
Definition: CharacterDatabase.h:250
@ CHAR_SEL_GO_RESPAWNS
Definition: CharacterDatabase.h:255

References _creatureRespawnTimes, _goRespawnTimes, CHAR_SEL_CREATURE_RESPAWNS, CHAR_SEL_GO_RESPAWNS, CharacterDatabase, Field::Get(), GetId(), GetInstanceId(), and PreparedStatementBase::SetData().

Referenced by MapMgr::CreateBaseMap(), and MapInstanced::CreateInstance().

◆ LoadVMap()

void Map::LoadVMap ( int  gx,
int  gy 
)
private
166{
167 // x and y are swapped !!
168 int vmapLoadResult = VMAP::VMapFactory::createOrGetVMapMgr()->loadMap((sWorld->GetDataPath() + "vmaps").c_str(), GetId(), gx, gy);
169 switch (vmapLoadResult)
170 {
172 LOG_DEBUG("maps", "VMAP loaded name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy);
173 break;
175 LOG_DEBUG("maps", "Could not load VMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy);
176 break;
178 LOG_DEBUG("maps", "Ignored VMAP name:{}, id:{}, x:{}, y:{} (vmap rep.: x:{}, y:{})", GetMapName(), GetId(), gx, gy, gx, gy);
179 break;
180 }
181}
@ VMAP_LOAD_RESULT_ERROR
Definition: IVMapMgr.h:36
@ VMAP_LOAD_RESULT_OK
Definition: IVMapMgr.h:37
@ VMAP_LOAD_RESULT_IGNORED
Definition: IVMapMgr.h:38
int loadMap(const char *pBasePath, unsigned int mapId, int x, int y) override
Definition: VMapMgr2.cpp:98

References VMAP::VMapFactory::createOrGetVMapMgr(), GetId(), GetMapName(), VMAP::VMapMgr2::loadMap(), LOG_DEBUG, sWorld, VMAP::VMAP_LOAD_RESULT_ERROR, VMAP::VMAP_LOAD_RESULT_IGNORED, and VMAP::VMAP_LOAD_RESULT_OK.

Referenced by LoadMapAndVMap().

◆ LogEncounterFinished()

void Map::LogEncounterFinished ( EncounterCreditType  type,
uint32  creditEntry 
)
3527{
3528 if (!IsRaid() || !GetEntry() || GetEntry()->Expansion() < 2) // only for wotlk raids, because logs take up tons of mysql memory
3529 return;
3530 InstanceMap* map = ToInstanceMap();
3531 if (!map)
3532 return;
3533 std::string playersInfo;
3534 char buffer[16384], buffer2[255];
3535 Map::PlayerList const& pl = map->GetPlayers();
3536 for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
3537 if (Player* p = itr->GetSource())
3538 {
3539 std::string auraStr;
3540 const Unit::AuraApplicationMap& a = p->GetAppliedAuras();
3541 for (auto iterator = a.begin(); iterator != a.end(); ++iterator)
3542 {
3543 snprintf(buffer2, 255, "%u(%u) ", iterator->first, iterator->second->GetEffectMask());
3544 auraStr += buffer2;
3545 }
3546
3547 snprintf(buffer, 16384, "%s (%s, acc: %u, ip: %s, guild: %u), xyz: (%.1f, %.1f, %.1f), auras: %s\n",
3548 p->GetName().c_str(), p->GetGUID().ToString().c_str(), p->GetSession()->GetAccountId(), p->GetSession()->GetRemoteAddress().c_str(), p->GetGuildId(), p->GetPositionX(), p->GetPositionY(), p->GetPositionZ(), auraStr.c_str());
3549 playersInfo += buffer;
3550 }
3551 CleanStringForMysqlQuery(playersInfo);
3552 CharacterDatabase.Execute("INSERT INTO log_encounter VALUES(NOW(), {}, {}, {}, {}, '{}')", GetId(), (uint32)GetDifficulty(), type, creditEntry, playersInfo);
3553}
void CleanStringForMysqlQuery(std::string &str)
Definition: Common.cpp:44
std::multimap< uint32, AuraApplication * > AuraApplicationMap
Definition: Unit.h:1311
LinkedListHead::Iterator< GridReference< NGridType > > iterator
Definition: GridRefMgr.h:30
MapEntry const * GetEntry() const
Definition: Map.h:318
InstanceMap * ToInstanceMap()
Definition: Map.h:544
Definition: Map.h:813
Definition: MapRefMgr.h:26

References MapRefMgr::begin(), CharacterDatabase, CleanStringForMysqlQuery(), MapRefMgr::end(), GetDifficulty(), GetEntry(), GetId(), GetPlayers(), IsRaid(), and ToInstanceMap().

Referenced by UpdateEncounterState().

◆ markCell()

void Map::markCell ( uint32  pCellId)
inline
470{ marked_cells.set(pCellId); }

References marked_cells.

Referenced by VisitNearbyCellsOf().

◆ markCellLarge()

void Map::markCellLarge ( uint32  pCellId)
inline
473{ marked_cells_large.set(pCellId); }

References marked_cells_large.

Referenced by VisitNearbyCellsOf(), and VisitNearbyCellsOfPlayer().

◆ MoveAllCreaturesInMoveList()

void Map::MoveAllCreaturesInMoveList ( )
1128{
1129 for (std::vector<Creature*>::iterator itr = _creaturesToMove.begin(); itr != _creaturesToMove.end(); ++itr)
1130 {
1131 Creature* c = *itr;
1132 if (c->FindMap() != this)
1133 continue;
1134
1136 {
1138 continue;
1139 }
1140
1142 if (!c->IsInWorld())
1143 continue;
1144
1145 Cell const& old_cell = c->GetCurrentCell();
1146 Cell new_cell(c->GetPositionX(), c->GetPositionY());
1147
1148 c->RemoveFromGrid();
1149 if (old_cell.DiffGrid(new_cell))
1150 EnsureGridLoaded(new_cell);
1151 AddToGrid(c, new_cell);
1152 }
1153 _creaturesToMove.clear();
1154}
void RemoveFromGrid()
Definition: Object.h:339
Map * FindMap() const
Definition: Object.h:518

References _creaturesToMove, MovableMapObject::_moveState, AddToGrid(), Cell::DiffGrid(), EnsureGridLoaded(), WorldObject::FindMap(), MovableMapObject::GetCurrentCell(), Position::GetPositionX(), Position::GetPositionY(), Object::IsInWorld(), MAP_OBJECT_CELL_MOVE_ACTIVE, MAP_OBJECT_CELL_MOVE_NONE, and GridObject< T >::RemoveFromGrid().

Referenced by Update().

◆ MoveAllDynamicObjectsInMoveList()

void Map::MoveAllDynamicObjectsInMoveList ( )
1186{
1187 for (std::vector<DynamicObject*>::iterator itr = _dynamicObjectsToMove.begin(); itr != _dynamicObjectsToMove.end(); ++itr)
1188 {
1189 DynamicObject* dynObj = *itr;
1190 if (dynObj->FindMap() != this)
1191 continue;
1192
1194 {
1196 continue;
1197 }
1198
1200 if (!dynObj->IsInWorld())
1201 continue;
1202
1203 Cell const& old_cell = dynObj->GetCurrentCell();
1204 Cell new_cell(dynObj->GetPositionX(), dynObj->GetPositionY());
1205
1206 dynObj->RemoveFromGrid();
1207 if (old_cell.DiffGrid(new_cell))
1208 EnsureGridLoaded(new_cell);
1209 AddToGrid(dynObj, new_cell);
1210 }
1211 _dynamicObjectsToMove.clear();
1212}

References _dynamicObjectsToMove, MovableMapObject::_moveState, AddToGrid(), Cell::DiffGrid(), EnsureGridLoaded(), WorldObject::FindMap(), MovableMapObject::GetCurrentCell(), Position::GetPositionX(), Position::GetPositionY(), Object::IsInWorld(), MAP_OBJECT_CELL_MOVE_ACTIVE, MAP_OBJECT_CELL_MOVE_NONE, and GridObject< T >::RemoveFromGrid().

Referenced by Update().

◆ MoveAllGameObjectsInMoveList()

void Map::MoveAllGameObjectsInMoveList ( )
1157{
1158 for (std::vector<GameObject*>::iterator itr = _gameObjectsToMove.begin(); itr != _gameObjectsToMove.end(); ++itr)
1159 {
1160 GameObject* go = *itr;
1161 if (go->FindMap() != this)
1162 continue;
1163
1165 {
1167 continue;
1168 }
1169
1171 if (!go->IsInWorld())
1172 continue;
1173
1174 Cell const& old_cell = go->GetCurrentCell();
1175 Cell new_cell(go->GetPositionX(), go->GetPositionY());
1176
1177 go->RemoveFromGrid();
1178 if (old_cell.DiffGrid(new_cell))
1179 EnsureGridLoaded(new_cell);
1180 AddToGrid(go, new_cell);
1181 }
1182 _gameObjectsToMove.clear();
1183}

References _gameObjectsToMove, MovableMapObject::_moveState, AddToGrid(), Cell::DiffGrid(), EnsureGridLoaded(), WorldObject::FindMap(), MovableMapObject::GetCurrentCell(), Position::GetPositionX(), Position::GetPositionY(), Object::IsInWorld(), MAP_OBJECT_CELL_MOVE_ACTIVE, MAP_OBJECT_CELL_MOVE_NONE, and GridObject< T >::RemoveFromGrid().

Referenced by Update().

◆ PlayDirectSoundToMap()

void Map::PlayDirectSoundToMap ( uint32  soundId,
uint32  zoneId = 0 
)
3724{
3725 Map::PlayerList const& players = GetPlayers();
3726 if (!players.IsEmpty())
3727 {
3729 data << uint32(soundId);
3730
3731 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
3732 if (Player* player = itr->GetSource())
3733 if (!zoneId || player->GetZoneId() == zoneId)
3734 player->SendDirectMessage(&data);
3735 }
3736}
@ SMSG_PLAY_SOUND
Definition: Opcodes.h:752

References MapRefMgr::begin(), MapRefMgr::end(), GetPlayers(), LinkedListHead::IsEmpty(), and SMSG_PLAY_SOUND.

Referenced by instance_naxxramas::instance_naxxramas_InstanceMapScript::Update().

◆ PlayerRelocation()

void Map::PlayerRelocation ( Player player,
float  x,
float  y,
float  z,
float  o 
)
1004{
1005 Cell old_cell(player->GetPositionX(), player->GetPositionY());
1006 Cell new_cell(x, y);
1007
1008 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
1009 {
1010 player->RemoveFromGrid();
1011
1012 if (old_cell.DiffGrid(new_cell))
1013 EnsureGridLoaded(new_cell);
1014
1015 AddToGrid(player, new_cell);
1016 }
1017
1018 player->Relocate(x, y, z, o);
1019 if (player->IsVehicle())
1020 player->GetVehicleKit()->RelocatePassengers();
1021 player->UpdatePositionData();
1022 player->UpdateObjectVisibility(false);
1023}

References AddToGrid(), Cell::DiffCell(), Cell::DiffGrid(), EnsureGridLoaded(), Position::GetPositionX(), Position::GetPositionY(), Unit::GetVehicleKit(), Unit::IsVehicle(), Position::Relocate(), Vehicle::RelocatePassengers(), GridObject< T >::RemoveFromGrid(), Player::UpdateObjectVisibility(), and WorldObject::UpdatePositionData().

Referenced by at_icc_saurfang_portal::OnTrigger(), StaticTransport::UpdatePassengerPositions(), MotionTransport::UpdatePassengerPositions(), and Unit::UpdatePosition().

◆ RemoveAllObjectsInRemoveList()

void Map::RemoveAllObjectsInRemoveList ( )
2674{
2675 while (!i_objectsToSwitch.empty())
2676 {
2677 std::map<WorldObject*, bool>::iterator itr = i_objectsToSwitch.begin();
2678 WorldObject* obj = itr->first;
2679 bool on = itr->second;
2680 i_objectsToSwitch.erase(itr);
2681
2682 if (!obj->IsPermanentWorldObject())
2683 {
2684 switch (obj->GetTypeId())
2685 {
2686 case TYPEID_UNIT:
2687 SwitchGridContainers<Creature>(obj->ToCreature(), on);
2688 break;
2689 case TYPEID_GAMEOBJECT:
2690 SwitchGridContainers<GameObject>(obj->ToGameObject(), on);
2691 break;
2692 default:
2693 break;
2694 }
2695 }
2696 }
2697
2698 //LOG_DEBUG("maps", "Object remover 1 check.");
2699 while (!i_objectsToRemove.empty())
2700 {
2701 std::unordered_set<WorldObject*>::iterator itr = i_objectsToRemove.begin();
2702 WorldObject* obj = *itr;
2703 i_objectsToRemove.erase(itr);
2704
2705 switch (obj->GetTypeId())
2706 {
2707 case TYPEID_CORPSE:
2708 {
2709 Corpse* corpse = ObjectAccessor::GetCorpse(*obj, obj->GetGUID());
2710 if (!corpse)
2711 LOG_ERROR("maps", "Tried to delete corpse/bones {} that is not in map.", obj->GetGUID().ToString());
2712 else
2713 RemoveFromMap(corpse, true);
2714 break;
2715 }
2717 RemoveFromMap((DynamicObject*)obj, true);
2718 break;
2719 case TYPEID_GAMEOBJECT:
2720 if (MotionTransport* transport = obj->ToGameObject()->ToMotionTransport())
2721 RemoveFromMap(transport, true);
2722 else
2723 RemoveFromMap(obj->ToGameObject(), true);
2724 break;
2725 case TYPEID_UNIT:
2726 // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
2727 // make sure that like sources auras/etc removed before destructor start
2729 RemoveFromMap(obj->ToCreature(), true);
2730 break;
2731 default:
2732 LOG_ERROR("maps", "Non-grid object (TypeId: {}) is in grid object remove list, ignored.", obj->GetTypeId());
2733 break;
2734 }
2735 }
2736
2737 //LOG_DEBUG("maps", "Object remover 2 check.");
2738}
@ TYPEID_DYNAMICOBJECT
Definition: ObjectGuid.h:40
@ TYPEID_CORPSE
Definition: ObjectGuid.h:41
Corpse * GetCorpse(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:184
MotionTransport * ToMotionTransport()
Definition: GameObject.h:331
bool IsPermanentWorldObject() const
Definition: Object.h:566
void CleanupsBeforeDelete(bool finalCleanup=true) override
Definition: Unit.cpp:15742
void RemoveFromMap(T *, bool)
Definition: Map.cpp:942

References Unit::CleanupsBeforeDelete(), ObjectAccessor::GetCorpse(), Object::GetGUID(), Object::GetTypeId(), i_objectsToRemove, i_objectsToSwitch, WorldObject::IsPermanentWorldObject(), LOG_ERROR, RemoveFromMap(), Object::ToCreature(), Object::ToGameObject(), GameObject::ToMotionTransport(), ObjectGuid::ToString(), TYPEID_CORPSE, TYPEID_DYNAMICOBJECT, TYPEID_GAMEOBJECT, and TYPEID_UNIT.

Referenced by DelayedUpdate(), and UnloadGrid().

◆ RemoveAllPlayers()

void Map::RemoveAllPlayers ( )
virtual

Reimplemented in BattlegroundMap.

1262{
1263 if (HavePlayers())
1264 {
1265 for (MapRefMgr::iterator itr = m_mapRefMgr.begin(); itr != m_mapRefMgr.end(); ++itr)
1266 {
1267 Player* player = itr->GetSource();
1268 if (!player->IsBeingTeleportedFar())
1269 {
1270 // this is happening for bg
1271 LOG_ERROR("maps", "Map::UnloadAll: player {} is still in map {} during unload, this should not happen!", player->GetName(), GetId());
1272 player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->m_homebindO);
1273 }
1274 }
1275 }
1276}
std::string const & GetName() const
Definition: Object.h:446
float m_homebindZ
Definition: Player.h:2332
bool IsBeingTeleportedFar() const
Definition: Player.h:2053
uint32 m_homebindMapId
Definition: Player.h:2328
float m_homebindY
Definition: Player.h:2331
float m_homebindO
Definition: Player.h:2333
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition: Player.cpp:1311
float m_homebindX
Definition: Player.h:2330

References MapRefMgr::begin(), MapRefMgr::end(), GetId(), WorldObject::GetName(), HavePlayers(), Player::IsBeingTeleportedFar(), LOG_ERROR, Player::m_homebindMapId, Player::m_homebindO, Player::m_homebindX, Player::m_homebindY, Player::m_homebindZ, m_mapRefMgr, and Player::TeleportTo().

◆ RemoveCorpse()

void Map::RemoveCorpse ( Corpse corpse)
3599{
3600 ASSERT(corpse);
3601
3602 corpse->DestroyForNearbyPlayers();
3603 if (corpse->IsInGrid())
3604 RemoveFromMap(corpse, false);
3605 else
3606 {
3607 corpse->RemoveFromWorld();
3608 corpse->ResetMap();
3609 }
3610
3611 _corpsesByCell[corpse->GetCellCoord().GetId()].erase(corpse);
3612 if (corpse->GetType() != CORPSE_BONES)
3613 _corpsesByPlayer.erase(corpse->GetOwnerGUID());
3614 else
3615 _corpseBones.erase(corpse);
3616}
void RemoveFromWorld() override
Definition: Corpse.cpp:53
bool IsInGrid() const
Definition: Object.h:337
void DestroyForNearbyPlayers()
Definition: Object.cpp:2898

References _corpseBones, _corpsesByCell, _corpsesByPlayer, ASSERT, CORPSE_BONES, WorldObject::DestroyForNearbyPlayers(), Corpse::GetCellCoord(), CoordPair< LIMIT >::GetId(), Corpse::GetOwnerGUID(), Corpse::GetType(), GridObject< T >::IsInGrid(), RemoveFromMap(), Corpse::RemoveFromWorld(), and WorldObject::ResetMap().

Referenced by ConvertCorpseToBones(), and RemoveOldCorpses().

◆ RemoveCreatureFromMoveList()

void Map::RemoveCreatureFromMoveList ( Creature c)
private

◆ RemoveCreatureRespawnTime()

void Map::RemoveCreatureRespawnTime ( ObjectGuid::LowType  dbGuid)
3363{
3364 _creatureRespawnTimes.erase(spawnId);
3365
3367 stmt->SetData(0, spawnId);
3368 stmt->SetData(1, GetId());
3369 stmt->SetData(2, GetInstanceId());
3370 CharacterDatabase.Execute(stmt);
3371}
@ CHAR_DEL_CREATURE_RESPAWN
Definition: CharacterDatabase.h:252

References _creatureRespawnTimes, CHAR_DEL_CREATURE_RESPAWN, CharacterDatabase, GetId(), GetInstanceId(), and PreparedStatementBase::SetData().

Referenced by Creature::DeleteFromDB(), Creature::Respawn(), and SaveCreatureRespawnTime().

◆ RemoveDynamicObjectFromMoveList()

void Map::RemoveDynamicObjectFromMoveList ( DynamicObject go)
private
1122{
1123 if (dynObj->_moveState == MAP_OBJECT_CELL_MOVE_ACTIVE)
1124 dynObj->_moveState = MAP_OBJECT_CELL_MOVE_INACTIVE;
1125}

References MovableMapObject::_moveState, MAP_OBJECT_CELL_MOVE_ACTIVE, and MAP_OBJECT_CELL_MOVE_INACTIVE.

Referenced by DynamicObjectRelocation().

◆ RemoveFromActive() [1/4]

template<>
void Map::RemoveFromActive ( Creature c)
2787{
2789}
void RemoveFromActiveHelper(WorldObject *obj)
Definition: Map.h:760

References RemoveFromActiveHelper().

◆ RemoveFromActive() [2/4]

template<>
void Map::RemoveFromActive ( DynamicObject obj)
2793{
2795}

References RemoveFromActiveHelper().

◆ RemoveFromActive() [3/4]

template<>
void Map::RemoveFromActive ( GameObject obj)
2799{
2801}

References RemoveFromActiveHelper().

◆ RemoveFromActive() [4/4]

template<class T >
void Map::RemoveFromActive ( T *  obj)
2781{
2783}

References RemoveFromActiveHelper().

Referenced by RemoveFromMap(), and WorldObject::setActive().

◆ RemoveFromActiveHelper()

void Map::RemoveFromActiveHelper ( WorldObject obj)
inlineprivate
761 {
762 // Map::Update for active object in proccess
764 {
765 ActiveNonPlayers::iterator itr = m_activeNonPlayers.find(obj);
766 if (itr == m_activeNonPlayers.end())
767 return;
768 if (itr == m_activeNonPlayersIter)
770 m_activeNonPlayers.erase(itr);
771 }
772 else
773 m_activeNonPlayers.erase(obj);
774 }

References m_activeNonPlayers, and m_activeNonPlayersIter.

Referenced by RemoveFromActive().

◆ RemoveFromMap() [1/2]

template<>
void Map::RemoveFromMap ( MotionTransport obj,
bool  remove 
)
963{
964 obj->RemoveFromWorld();
965 if (obj->isActiveObject())
966 RemoveFromActive(obj);
967
968 Map::PlayerList const& players = GetPlayers();
969 if (!players.IsEmpty())
970 {
971 UpdateData data;
972 obj->BuildOutOfRangeUpdateBlock(&data);
973 WorldPacket packet;
974 data.BuildPacket(&packet);
975 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
976 if (itr->GetSource()->GetTransport() != obj)
977 itr->GetSource()->SendDirectMessage(&packet);
978 }
979
981 {
982 TransportsContainer::iterator itr = _transports.find(obj);
983 if (itr == _transports.end())
984 return;
985 if (itr == _transportsUpdateIter)
987 _transports.erase(itr);
988 }
989 else
990 _transports.erase(obj);
991
992 obj->ResetMap();
993
994 if (remove)
995 {
996 // if option set then object already saved at this moment
997 if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
998 obj->SaveRespawnTime();
999 DeleteFromWorld(obj);
1000 }
1001}
@ CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY
Definition: IWorld.h:98
void RemoveFromWorld() override
Definition: GameObject.cpp:169
void SaveRespawnTime() override
Definition: GameObject.h:246
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
Definition: Object.cpp:269
void RemoveFromActive(T *obj)
Definition: Map.cpp:2780
void DeleteFromWorld(T *)
Definition: Map.cpp:419

References _transports, _transportsUpdateIter, MapRefMgr::begin(), Object::BuildOutOfRangeUpdateBlock(), UpdateData::BuildPacket(), CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY, DeleteFromWorld(), MapRefMgr::end(), GetPlayers(), WorldObject::isActiveObject(), LinkedListHead::IsEmpty(), RemoveFromActive(), GameObject::RemoveFromWorld(), WorldObject::ResetMap(), GameObject::SaveRespawnTime(), and sWorld.

◆ RemoveFromMap() [2/2]

template<class T >
void Map::RemoveFromMap ( T *  obj,
bool  remove 
)
943{
944 bool inWorld = obj->IsInWorld() && obj->GetTypeId() >= TYPEID_UNIT && obj->GetTypeId() <= TYPEID_GAMEOBJECT;
945 obj->RemoveFromWorld();
946
947 if (obj->isActiveObject())
948 RemoveFromActive(obj);
949
950 if (!inWorld) // pussywizard: if was in world, RemoveFromWorld() called DestroyForNearbyPlayers()
951 obj->DestroyForNearbyPlayers(); // pussywizard: previous player->UpdateObjectVisibility()
952
953 obj->RemoveFromGrid();
954
955 obj->ResetMap();
956
957 if (remove)
958 DeleteFromWorld(obj);
959}

References DeleteFromWorld(), RemoveFromActive(), TYPEID_GAMEOBJECT, and TYPEID_UNIT.

Referenced by MotionTransport::DelayedTeleportTransport(), RemoveAllObjectsInRemoveList(), and RemoveCorpse().

◆ RemoveGameObjectFromMoveList()

void Map::RemoveGameObjectFromMoveList ( GameObject go)
private

◆ RemoveGameObjectModel()

void Map::RemoveGameObjectModel ( const GameObjectModel model)
inline
558{ _dynamicTree.remove(model); }
void remove(const GameObjectModel &)
Definition: DynamicTree.cpp:122

References _dynamicTree, and DynamicMapTree::remove().

Referenced by GameObject::RemoveFromWorld(), GameObject::UpdateModel(), and GameObject::UpdateModelPosition().

◆ RemoveGORespawnTime()

void Map::RemoveGORespawnTime ( ObjectGuid::LowType  dbGuid)
3397{
3398 _goRespawnTimes.erase(spawnId);
3399
3401 stmt->SetData(0, spawnId);
3402 stmt->SetData(1, GetId());
3403 stmt->SetData(2, GetInstanceId());
3404 CharacterDatabase.Execute(stmt);
3405}
@ CHAR_DEL_GO_RESPAWN
Definition: CharacterDatabase.h:257

References _goRespawnTimes, CHAR_DEL_GO_RESPAWN, CharacterDatabase, GetId(), GetInstanceId(), and PreparedStatementBase::SetData().

Referenced by GameObject::DeleteFromDB(), GameObject::LoadGameObjectFromDB(), GameObject::Respawn(), and SaveGORespawnTime().

◆ RemoveOldCorpses()

void Map::RemoveOldCorpses ( )
3672{
3673 time_t now = GameTime::GetGameTime().count();
3674
3675 std::vector<ObjectGuid> corpses;
3676 corpses.reserve(_corpsesByPlayer.size());
3677
3678 for (auto const& p : _corpsesByPlayer)
3679 if (p.second->IsExpired(now))
3680 corpses.push_back(p.first);
3681
3682 for (ObjectGuid const& ownerGuid : corpses)
3683 ConvertCorpseToBones(ownerGuid);
3684
3685 std::vector<Corpse*> expiredBones;
3686 for (Corpse* bones : _corpseBones)
3687 if (bones->IsExpired(now))
3688 expiredBones.push_back(bones);
3689
3690 for (Corpse* bones : expiredBones)
3691 {
3692 RemoveCorpse(bones);
3693 delete bones;
3694 }
3695}
Seconds GetGameTime()
Definition: GameTime.cpp:38

References _corpseBones, _corpsesByPlayer, ConvertCorpseToBones(), GameTime::GetGameTime(), and RemoveCorpse().

Referenced by World::Update().

◆ RemovePlayerFromMap()

void Map::RemovePlayerFromMap ( Player player,
bool  remove 
)
virtual

Reimplemented in InstanceMap, and BattlegroundMap.

915{
916 player->getHostileRefMgr().deleteReferences(true); // pussywizard: multithreading crashfix
917
918 bool inWorld = player->IsInWorld();
919 player->RemoveFromWorld();
920 SendRemoveTransports(player);
921
922 if (!inWorld) // pussywizard: if was in world, RemoveFromWorld() called DestroyForNearbyPlayers()
923 player->DestroyForNearbyPlayers(); // pussywizard: previous player->UpdateObjectVisibility(true)
924
925 if (player->IsInGrid())
926 player->RemoveFromGrid();
927 else
928 ASSERT(remove); //maybe deleted in logoutplayer when player is not in a map
929
930 sScriptMgr->OnPlayerLeaveMap(this, player);
931 if (remove)
932 {
933 DeleteFromWorld(player);
934 }
935}