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

#include "Map.h"

Inheritance diagram for Map:
GridRefMgr< MapGridType > 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< MapGridType >
typedef LinkedListHead::Iterator< GridReference< MapGridType > > 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)
 
void OnCreateMap ()
 
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 IsGridLoaded (GridCoord const &gridCoord) const
 
bool IsGridLoaded (float x, float y) const
 
bool IsGridCreated (GridCoord const &gridCoord) const
 
bool IsGridCreated (float x, float y) const
 
void LoadGrid (float x, float y)
 
void LoadAllGrids ()
 
void LoadGridsInRange (Position const &center, float radius)
 
bool UnloadGrid (MapGridType &grid)
 
virtual void UnloadAll ()
 
std::shared_ptr< GridTerrainDataGetGridTerrainDataSharedPtr (GridCoord const &gridCoord)
 
GridTerrainDataGetGridTerrainData (GridCoord const &gridCoord)
 
GridTerrainDataGetGridTerrainData (float x, float y)
 
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 IsWorldMap () 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 UpdatePlayerZoneStats (uint32 oldZone, uint32 newZone)
 
uint32 ApplyDynamicModeRespawnScaling (WorldObject const *obj, uint32 respawnDelay) const
 
void ScheduleCreatureRespawn (ObjectGuid, Milliseconds, Position pos=Position())
 
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)
 
void EnsureGridCreated (GridCoord 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)
 
std::size_t GetActiveNonPlayersCount () const
 
virtual std::string GetDebugInfo () const
 
uint32 GetCreatedGridsCount ()
 
uint32 GetLoadedGridsCount ()
 
uint32 GetCreatedCellsInGridCount (uint16 const x, uint16 const y)
 
uint32 GetCreatedCellsInMapCount ()
 
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< MapGridType >
GridReference< MapGridType > * getFirst ()
 
GridReference< MapGridType > * 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 void DeleteRespawnTimesInDB (uint16 mapId, uint32 instanceId)
 

Public Attributes

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

Protected Types

typedef std::set< WorldObject * > ActiveNonPlayers
 

Protected Member Functions

template<class T >
void AddToGrid (T *object, Cell const &cell)
 

Protected Attributes

std::mutex Lock
 
std::shared_mutex MMapLock
 
MapGridManager _mapGridManager
 
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

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 EnsureGridLoaded (Cell const &cell)
 
MapGridTypeGetMapGrid (uint16 const x, uint16 const y)
 
void ScriptsProcess ()
 Process queued scripts.
 
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 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
 
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
 
std::unordered_map< uint32, uint32_zonePlayerCountMap
 
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
 
class GridObjectLoader
 

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 
270 {
271 CAN_ENTER = 0,
272 CANNOT_ENTER_ALREADY_IN_MAP = 1, // Player is already in the map
273 CANNOT_ENTER_NO_ENTRY, // No map entry was found for the target map ID
274 CANNOT_ENTER_UNINSTANCED_DUNGEON, // No instance template was found for dungeon map
275 CANNOT_ENTER_DIFFICULTY_UNAVAILABLE, // Requested instance difficulty is not available for target map
276 CANNOT_ENTER_NOT_IN_RAID, // Target instance is a raid instance and the player is not in a raid group
277 CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE, // Player is dead and their corpse is not in target instance
278 CANNOT_ENTER_INSTANCE_BIND_MISMATCH, // Player's permanent instance save is not compatible with their group's current instance bind
279 CANNOT_ENTER_TOO_MANY_INSTANCES, // Player has entered too many instances recently
280 CANNOT_ENTER_MAX_PLAYERS, // Target map already has the maximum number of players allowed
281 CANNOT_ENTER_ZONE_IN_COMBAT, // A boss encounter is currently in progress on the target map
283 };
@ CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE
Definition Map.h:277
@ CANNOT_ENTER_TOO_MANY_INSTANCES
Definition Map.h:279
@ CANNOT_ENTER_MAX_PLAYERS
Definition Map.h:280
@ CANNOT_ENTER_ZONE_IN_COMBAT
Definition Map.h:281
@ CAN_ENTER
Definition Map.h:271
@ CANNOT_ENTER_ALREADY_IN_MAP
Definition Map.h:272
@ CANNOT_ENTER_UNSPECIFIED_REASON
Definition Map.h:282
@ CANNOT_ENTER_NO_ENTRY
Definition Map.h:273
@ CANNOT_ENTER_DIFFICULTY_UNAVAILABLE
Definition Map.h:275
@ CANNOT_ENTER_INSTANCE_BIND_MISMATCH
Definition Map.h:278
@ CANNOT_ENTER_UNINSTANCED_DUNGEON
Definition Map.h:274
@ CANNOT_ENTER_NOT_IN_RAID
Definition Map.h:276

Constructor & Destructor Documentation

◆ Map()

Map::Map ( uint32  id,
uint32  InstanceId,
uint8  SpawnMode,
Map _parent = nullptr 
)
74 :
75 _mapGridManager(this), i_mapEntry(sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId),
79{
80 m_parentMap = (_parent ? _parent : this);
81
82 _zonePlayerCountMap.clear();
83
84 //lets initialize visibility distance for map
86}
uint32 GetDefaultMapLight(uint32 mapId)
Definition DBCStores.cpp:880
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
#define DEFAULT_VISIBILITY_DISTANCE
Definition ObjectDefines.h:40
MapEntry const * i_mapEntry
Definition Map.h:545
uint8 i_spawnMode
Definition Map.h:546
std::unordered_map< uint32, uint32 > _zonePlayerCountMap
Definition Map.h:616
TransportsContainer::iterator _transportsUpdateIter
Definition Map.h:562
uint32 m_unloadTimer
Definition Map.h:548
uint32 _defaultLight
Definition Map.h:619
Map * m_parentMap
Definition Map.h:576
bool i_scriptLock
Definition Map.h:581
time_t _instanceResetPeriod
Definition Map.h:551
ActiveNonPlayers m_activeNonPlayers
Definition Map.h:557
float m_VisibleDistance
Definition Map.h:549
MapGridManager _mapGridManager
Definition Map.h:544
virtual void InitVisibilityDistance()
Definition Map.cpp:98
TransportsContainer _transports
Definition Map.h:561
uint32 i_InstanceId
Definition Map.h:547
ActiveNonPlayers::iterator m_activeNonPlayersIter
Definition Map.h:558

References _zonePlayerCountMap, InitVisibilityDistance(), and m_parentMap.

◆ ~Map()

Map::~Map ( )
override
53{
54 // UnloadAll must be called before deleting the map
55
56 sScriptMgr->OnDestroyMap(this);
57
58 while (!i_worldObjects.empty())
59 {
60 WorldObject* obj = *i_worldObjects.begin();
61 ASSERT(obj->IsWorldObject());
62 LOG_DEBUG("maps", "Map::~Map: WorldObject TypeId is not a corpse! ({})", static_cast<uint8>(obj->GetTypeId()));
63 //ASSERT(obj->IsCorpse());
64 obj->RemoveFromWorld();
65 obj->ResetMap();
66 }
67
68 if (!m_scriptSchedule.empty())
69 sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size());
70
72}
std::uint8_t uint8
Definition Define.h:109
#define ASSERT
Definition Errors.h:68
#define LOG_DEBUG(filterType__,...)
Definition Log.h:169
#define sScriptMgr
Definition ScriptMgr.h:727
static MMapMgr * createOrGetMMapMgr()
Definition MMapFactory.cpp:27
bool unloadMapInstance(uint32 mapId, uint32 instanceId)
Definition MMapMgr.cpp:279
ScriptScheduleMap m_scriptSchedule
Definition Map.h:587
uint32 GetId() const
Definition Map.h:229
std::unordered_set< WorldObject * > i_worldObjects
Definition Map.h:584
TypeID GetTypeId() const
Definition Object.h:127
Definition Object.h:410
virtual void ResetMap()
Definition Object.cpp:2142
bool IsWorldObject() const
Definition Object.cpp:1083
void RemoveFromWorld() override
Definition Object.cpp:1193

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
268{
269 auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid);
270 if (bounds.first == bounds.second)
271 return nullptr;
272
273 return bounds.first->second;
274}

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

Referenced by _ScriptProcessDoor(), and ScriptsProcess().

◆ _GetScriptCreature()

Creature * Map::_GetScriptCreature ( Object obj,
bool  isSource,
const ScriptInfo scriptInfo 
) const
inlineprivate
187{
188 Creature* creature = nullptr;
189 if (!obj)
190 LOG_ERROR("maps.script", "{} {} object is nullptr.", scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
191 else
192 {
193 creature = obj->ToCreature();
194 if (!creature)
195 LOG_ERROR("maps.script", "{} {} object is not a creature ({}).", scriptInfo->GetDebugInfo(),
196 isSource ? "source" : "target", obj->GetGUID().ToString());
197 }
198 return creature;
199}
#define LOG_ERROR(filterType__,...)
Definition Log.h:157
Definition Creature.h:43
Creature * ToCreature()
Definition Object.h:205
std::string ToString(Type &&val, Params &&... params)
Definition StringConvert.h:250
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
121{
122 Creature* creature = nullptr;
123 if (!source && !target)
124 LOG_ERROR("maps.script", "{} source and target objects are nullptr.", scriptInfo->GetDebugInfo());
125 else
126 {
127 if (bReverse)
128 {
129 // Check target first, then source.
130 if (target)
131 creature = target->ToCreature();
132 if (!creature && source)
133 creature = source->ToCreature();
134 }
135 else
136 {
137 // Check source first, then target.
138 if (source)
139 creature = source->ToCreature();
140 if (!creature && target)
141 creature = target->ToCreature();
142 }
143
144 if (!creature)
145 LOG_ERROR("maps.script", "{} neither source nor target are creatures (source: TypeId: {}, Entry: {}, GUID: {}; target: TypeId: {}, Entry: {}, GUID: {}), skipping.",
146 scriptInfo->GetDebugInfo(),
147 source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString() : "",
148 target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString() : "");
149 }
150 return creature;
151}
MapEntry const * GetEntry() const
Definition Map.h:163

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
172{
173 Player* player = nullptr;
174 if (!obj)
175 LOG_ERROR("maps.script", "{} {} object is nullptr.", scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
176 else
177 {
178 player = obj->ToPlayer();
179 if (!player)
180 LOG_ERROR("maps.script", "{} {} object is not a player ({}).",
181 scriptInfo->GetDebugInfo(), isSource ? "source" : "target", obj->GetGUID().ToString());
182 }
183 return player;
184}
Player * ToPlayer()
Definition Object.h:201
Definition Player.h:1081

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
99{
100 Player* player = nullptr;
101 if (!source && !target)
102 LOG_ERROR("maps.script", "{} source and target objects are nullptr.", scriptInfo->GetDebugInfo());
103 else
104 {
105 // Check target first, then source.
106 if (target)
107 player = target->ToPlayer();
108 if (!player && source)
109 player = source->ToPlayer();
110
111 if (!player)
112 LOG_ERROR("maps.script", "{} neither source nor target object is player (source: TypeId: {}, Entry: {}, GUID: {}; target: TypeId: {}, Entry: {}, GUID: {}), skipping.",
113 scriptInfo->GetDebugInfo(),
114 source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString() : "",
115 target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString() : "");
116 }
117 return player;
118}

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
154{
155 Unit* unit = nullptr;
156 if (!obj)
157 LOG_ERROR("maps.script", "{} {} object is nullptr.", scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
158 else if (!obj->IsUnit())
159 LOG_ERROR("maps.script", "{} {} object is not unit (TypeId: {}, Entry: {}, GUID: {}), skipping.",
160 scriptInfo->GetDebugInfo(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().ToString());
161 else
162 {
163 unit = obj->ToUnit();
164 if (!unit)
165 LOG_ERROR("maps.script", "{} {} object could not be casted to unit.",
166 scriptInfo->GetDebugInfo(), isSource ? "source" : "target");
167 }
168 return unit;
169}
bool IsUnit() const
Definition Object.h:208
Unit * ToUnit()
Definition Object.h:209
Definition Unit.h:636

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

Referenced by ScriptsProcess().

◆ _GetScriptWorldObject()

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

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
218{
219 bool bOpen = false;
220 ObjectGuid::LowType guid = scriptInfo->ToggleDoor.GOGuid;
221 int32 nTimeToToggle = std::max(15, int32(scriptInfo->ToggleDoor.ResetDelay));
222 switch (scriptInfo->command)
223 {
225 bOpen = true;
226 break;
228 break;
229 default:
230 LOG_ERROR("maps.script", "{} unknown command for _ScriptProcessDoor.", scriptInfo->GetDebugInfo());
231 return;
232 }
233 if (!guid)
234 LOG_ERROR("maps.script", "{} door guid is not specified.", scriptInfo->GetDebugInfo());
235 else if (!source)
236 LOG_ERROR("maps.script", "{} source object is nullptr.", scriptInfo->GetDebugInfo());
237 else if (!source->IsUnit())
238 LOG_ERROR("maps.script", "{} source object is not unit ({}), skipping.", scriptInfo->GetDebugInfo(), source->GetGUID().ToString());
239 else
240 {
241 WorldObject* wSource = dynamic_cast <WorldObject*> (source);
242 if (!wSource)
243 LOG_ERROR("maps.script", "{} source object could not be casted to world object ({}), skipping.", scriptInfo->GetDebugInfo(), source->GetGUID().ToString());
244 else
245 {
246 GameObject* pDoor = _FindGameObject(wSource, guid);
247 if (!pDoor)
248 LOG_ERROR("maps.script", "{} gameobject was not found (guid: {}).", scriptInfo->GetDebugInfo(), guid);
249 else if (pDoor->GetGoType() != GAMEOBJECT_TYPE_DOOR)
250 LOG_ERROR("maps.script", "{} gameobject is not a door ({}).",
251 scriptInfo->GetDebugInfo(), pDoor->GetGUID().ToString());
252 else if (bOpen == (pDoor->GetGoState() == GO_STATE_READY))
253 {
254 pDoor->UseDoorOrButton(nTimeToToggle);
255
256 if (target && target->isType(TYPEMASK_GAMEOBJECT))
257 {
258 GameObject* goTarget = target->ToGameObject();
259 if (goTarget && goTarget->GetGoType() == GAMEOBJECT_TYPE_BUTTON)
260 goTarget->UseDoorOrButton(nTimeToToggle);
261 }
262 }
263 }
264 }
265}
std::int32_t int32
Definition Define.h:103
@ GO_STATE_READY
Definition GameObjectData.h:690
@ TYPEMASK_GAMEOBJECT
Definition ObjectGuid.h:51
@ SCRIPT_COMMAND_CLOSE_DOOR
Definition ObjectMgr.h:104
@ SCRIPT_COMMAND_OPEN_DOOR
Definition ObjectMgr.h:103
@ GAMEOBJECT_TYPE_BUTTON
Definition SharedDefines.h:1561
@ GAMEOBJECT_TYPE_DOOR
Definition SharedDefines.h:1560
Definition GameObject.h:120
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
Definition GameObject.cpp:1414
GOState GetGoState() const
Definition GameObject.h:204
GameobjectTypes GetGoType() const
Definition GameObject.h:202
GameObject * _FindGameObject(WorldObject *pWorldObject, ObjectGuid::LowType guid) const
Definition MapScripts.cpp:267
std::string ToString() const
Definition ObjectGuid.cpp:47
uint32 LowType
Definition ObjectGuid.h:122
bool isType(uint16 mask) const
Definition Object.h:128
GameObject * ToGameObject()
Definition Object.h:213
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:112
struct ScriptInfo::@266::@279 ToggleDoor
ScriptCommands command
Definition ObjectMgr.h:194
uint32 ResetDelay
Definition ObjectMgr.h:287
uint32 GOGuid
Definition ObjectMgr.h:267

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(), Object::IsUnit(), LOG_ERROR, ScriptInfo::ResetDelay, SCRIPT_COMMAND_CLOSE_DOOR, SCRIPT_COMMAND_OPEN_DOOR, Object::ToGameObject(), ScriptInfo::ToggleDoor, ObjectGuid::ToString(), TYPEMASK_GAMEOBJECT, and GameObject::UseDoorOrButton().

Referenced by ScriptsProcess().

◆ AddCorpse()

void Map::AddCorpse ( Corpse corpse)
2782{
2783 corpse->SetMap(this);
2784
2785 _corpsesByCell[corpse->GetCellCoord().GetId()].insert(corpse);
2786 if (corpse->GetType() != CORPSE_BONES)
2787 _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse;
2788 else
2789 _corpseBones.insert(corpse);
2790}
@ 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
std::unordered_map< ObjectGuid, Corpse * > _corpsesByPlayer
Definition Map.h:636
std::unordered_map< uint32, std::unordered_set< Corpse * > > _corpsesByCell
Definition Map.h:635
std::unordered_set< Corpse * > _corpseBones
Definition Map.h:637
virtual void SetMap(Map *map)
Definition Object.cpp:2116
uint32 GetId() const
Definition GridDefines.h:146

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
929{
931 _creaturesToMove.push_back(c);
933}
@ MAP_OBJECT_CELL_MOVE_ACTIVE
Definition Object.h:388
@ MAP_OBJECT_CELL_MOVE_NONE
Definition Object.h:387
std::vector< Creature * > _creaturesToMove
Definition Map.h:525
MapObjectCellMoveState _moveState
Definition Object.h:406

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
955{
956 if (dynObj->_moveState == MAP_OBJECT_CELL_MOVE_NONE)
957 _dynamicObjectsToMove.push_back(dynObj);
958 dynObj->_moveState = MAP_OBJECT_CELL_MOVE_ACTIVE;
959}
std::vector< DynamicObject * > _dynamicObjectsToMove
Definition Map.h:527

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
942{
944 _gameObjectsToMove.push_back(go);
946}
std::vector< GameObject * > _gameObjectsToMove
Definition Map.h:526

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

Referenced by GameObjectRelocation().

◆ AddObjectToRemoveList()

void Map::AddObjectToRemoveList ( WorldObject obj)
1834{
1835 ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId());
1836
1837 obj->CleanupsBeforeDelete(false); // remove or simplify at least cross referenced links
1838
1839 i_objectsToRemove.insert(obj);
1840 //LOG_DEBUG("maps", "Object ({}) added to removing list.", obj->GetGUID().ToString());
1841}
std::unordered_set< WorldObject * > i_objectsToRemove
Definition Map.h:582
uint32 GetInstanceId() const
Definition Map.h:266
uint32 GetMapId() const
Definition Position.h:280
uint32 GetInstanceId() const
Definition Object.h:448
virtual void CleanupsBeforeDelete(bool finalCleanup=true)
Definition Object.cpp:1142

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 
)
1844{
1845 ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId());
1846 // i_objectsToSwitch is iterated only in Map::RemoveAllObjectsInRemoveList() and it uses
1847 // the contained objects only if IsCreature() , so we can return in all other cases
1848 if (!obj->IsCreature() && !obj->IsGameObject())
1849 return;
1850
1851 std::map<WorldObject*, bool>::iterator itr = i_objectsToSwitch.find(obj);
1852 if (itr == i_objectsToSwitch.end())
1853 i_objectsToSwitch.insert(itr, std::make_pair(obj, on));
1854 else if (itr->second != on)
1855 i_objectsToSwitch.erase(itr);
1856 else
1857 ABORT();
1858}
#define ABORT
Definition Errors.h:76
std::map< WorldObject *, bool > i_objectsToSwitch
Definition Map.h:583
bool IsGameObject() const
Definition Object.h:212
bool IsCreature() const
Definition Object.h:204

References ABORT, ASSERT, GetId(), WorldObject::GetInstanceId(), GetInstanceId(), WorldLocation::GetMapId(), i_objectsToSwitch, Object::IsCreature(), and Object::IsGameObject().

Referenced by WorldObject::SetWorldObject().

◆ AddPlayerToMap()

bool Map::AddPlayerToMap ( Player player)
virtual

Reimplemented in InstanceMap, and BattlegroundMap.

344{
345 CellCoord cellCoord = Acore::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
346 if (!cellCoord.IsCoordValid())
347 {
348 LOG_ERROR("maps", "Map::Add: Player ({}) has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
349 player->GetGUID().ToString(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
350 return false;
351 }
352
353 Cell cell(cellCoord);
355 AddToGrid(player, cell);
356
357 // Check if we are adding to correct map
358 ASSERT (player->GetMap() == this);
359 player->SetMap(this);
360 player->AddToWorld();
361
362 SendInitTransports(player);
363 SendInitSelf(player);
364 SendZoneDynamicInfo(player);
365
366 player->m_clientGUIDs.clear();
367 player->UpdateObjectVisibility(false);
368
369 if (player->IsAlive())
370 ConvertCorpseToBones(player->GetGUID());
371
372 sScriptMgr->OnPlayerEnterMap(this, player);
373 return true;
374}
#define MAX_VISIBILITY_DISTANCE
Definition ObjectDefines.h:31
void LoadGridsInRange(Position const &center, float radius)
Definition Map.cpp:313
void SendZoneDynamicInfo(Player *player)
Definition Map.cpp:2902
void SendInitSelf(Player *player)
Definition Map.cpp:1685
void AddToGrid(T *object, Cell const &cell)
Definition Map.cpp:116
void SendInitTransports(Player *player)
Definition Map.cpp:1720
Corpse * ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia=false)
Definition Map.cpp:2812
GuidUnorderedSet m_clientGUIDs
Definition Player.h:2389
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition PlayerUpdates.cpp:1617
void AddToWorld() override
Definition Player.cpp:1706
void SetMap(Map *map) override
Definition Player.cpp:14730
bool IsAlive() const
Definition Unit.h:1707
Map * GetMap() const
Definition Object.h:536
CellCoord ComputeCellCoord(float x, float y)
Definition GridDefines.h:193
Definition Cell.h:45
bool IsCoordValid() const
Definition GridDefines.h:134
uint32 x_coord
Definition GridDefines.h:151
uint32 y_coord
Definition GridDefines.h:152
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References AddToGrid(), Player::AddToWorld(), ASSERT, Acore::ComputeCellCoord(), ConvertCorpseToBones(), Object::GetGUID(), WorldObject::GetMap(), Position::GetPositionX(), Position::GetPositionY(), Unit::IsAlive(), CoordPair< LIMIT >::IsCoordValid(), LoadGridsInRange(), LOG_ERROR, Player::m_clientGUIDs, MAX_VISIBILITY_DISTANCE, 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)
1950{
1952}
void AddToActiveHelper(WorldObject *obj)
Definition Map.h:592

References AddToActiveHelper().

◆ AddToActive() [2/4]

template<>
void Map::AddToActive ( DynamicObject d)
1956{
1958}

References AddToActiveHelper().

◆ AddToActive() [3/4]

template<>
void Map::AddToActive ( GameObject d)
1962{
1964}

References AddToActiveHelper().

◆ AddToActive() [4/4]

template<class T >
void Map::AddToActive ( T *  obj)

◆ AddToActiveHelper()

void Map::AddToActiveHelper ( WorldObject obj)
inlineprivate
593 {
594 m_activeNonPlayers.insert(obj);
595 }

References m_activeNonPlayers.

Referenced by AddToActive(), AddToActive(), AddToActive(), and AddToActive().

◆ AddToGrid() [1/5]

template<>
void Map::AddToGrid ( Corpse obj,
Cell const &  cell 
)
160{
161 MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
162 // Corpses are a special object type - they can be added to grid via a call to AddToMap
163 // or loaded through ObjectGridLoader.
164 // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell
165 // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded
166 // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader)
167 // to avoid failing an assertion in GridObject::AddToGrid
168 if (grid->IsObjectDataLoaded())
169 {
170 if (obj->IsWorldObject())
171 grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
172 else
173 grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
174 }
175}
Definition MapGrid.h:32
void AddGridObject(uint16 const x, uint16 const y, SPECIFIC_OBJECT *obj)
Definition MapGrid.h:58
void AddWorldObject(uint16 const x, uint16 const y, SPECIFIC_OBJECT *obj)
Definition MapGrid.h:48
bool IsObjectDataLoaded() const
Definition MapGrid.h:45
MapGridType * GetMapGrid(uint16 const x, uint16 const y)
Definition Map.cpp:286

References MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddWorldObject(), Cell::CellX(), Cell::CellY(), GetMapGrid(), Cell::GridX(), Cell::GridY(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::IsObjectDataLoaded(), and WorldObject::IsWorldObject().

◆ AddToGrid() [2/5]

template<>
void Map::AddToGrid ( Creature obj,
Cell const &  cell 
)
127{
128 MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
129 if (obj->IsWorldObject())
130 grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
131 else
132 grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
133
134 obj->SetCurrentCell(cell);
135}
void SetCurrentCell(Cell const &cell)
Definition Object.h:403

References MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddWorldObject(), Cell::CellX(), Cell::CellY(), GetMapGrid(), Cell::GridX(), Cell::GridY(), WorldObject::IsWorldObject(), and MovableMapObject::SetCurrentCell().

◆ AddToGrid() [3/5]

template<>
void Map::AddToGrid ( DynamicObject obj,
Cell const &  cell 
)
148{
149 MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
150 if (obj->IsWorldObject())
151 grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
152 else
153 grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
154
155 obj->SetCurrentCell(cell);
156}

References MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddWorldObject(), Cell::CellX(), Cell::CellY(), GetMapGrid(), Cell::GridX(), Cell::GridY(), WorldObject::IsWorldObject(), and MovableMapObject::SetCurrentCell().

◆ AddToGrid() [4/5]

template<>
void Map::AddToGrid ( GameObject obj,
Cell const &  cell 
)
139{
140 MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
141 grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
142
143 obj->SetCurrentCell(cell);
144}

References MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), Cell::CellX(), Cell::CellY(), GetMapGrid(), Cell::GridX(), Cell::GridY(), and MovableMapObject::SetCurrentCell().

◆ AddToGrid() [5/5]

template<class T >
void Map::AddToGrid ( T *  object,
Cell const &  cell 
)
protected

◆ AddToMap() [1/2]

template<>
bool Map::AddToMap ( MotionTransport obj,
bool   
)
452{
453 //TODO: Needs clean up. An object should not be added to map twice.
454 if (obj->IsInWorld())
455 return true;
456
458 if (!cellCoord.IsCoordValid())
459 {
460 LOG_ERROR("maps", "Map::Add: Object {} has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
461 obj->GetGUID().ToString(), obj->GetPositionX(), obj->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
462 return false; //Should delete object
463 }
464
465 Cell cell(cellCoord);
466 if (obj->isActiveObject())
467 EnsureGridLoaded(cell);
468
469 obj->AddToWorld();
470
471 if (obj->isActiveObject())
472 AddToActive(obj);
473
474 _transports.insert(obj);
475
476 // Broadcast creation to players
477 if (!GetPlayers().IsEmpty())
478 {
479 for (Map::PlayerList::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
480 {
481 if (itr->GetSource()->GetTransport() != obj)
482 {
483 UpdateData data;
484 obj->BuildCreateUpdateBlockForPlayer(&data, itr->GetSource());
485 WorldPacket packet;
486 data.BuildPacket(packet);
487 itr->GetSource()->SendDirectMessage(&packet);
488 }
489 }
490 }
491
492 return true;
493}
void AddToWorld() override
Definition GameObject.cpp:140
iterator begin()
Definition GridRefMgr.h:35
Definition LinkedList.h:139
bool IsEmpty() const
Definition LinkedList.h:97
iterator end()
Definition MapRefMgr.h:37
void AddToActive(T *obj)
Definition Map.cpp:1943
bool EnsureGridLoaded(Cell const &cell)
Definition Map.cpp:273
PlayerList const & GetPlayers() const
Definition Map.h:333
bool IsInWorld() const
Definition Object.h:107
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:189
Definition UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition UpdateData.cpp:48
bool isActiveObject() const
Definition Object.h:580
Definition WorldPacket.h:26

References _transports, AddToActive(), GameObject::AddToWorld(), GridRefMgr< MapGridType >::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 
)
395{
396 //TODO: Needs clean up. An object should not be added to map twice.
397 if (obj->IsInWorld())
398 {
399 ASSERT(obj->IsInGrid());
400 obj->UpdateObjectVisibilityOnCreate();
401 return true;
402 }
403
404 CellCoord cellCoord = Acore::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
405 //It will create many problems (including crashes) if an object is not added to grid after creation
406 //The correct way to fix it is to make AddToMap return false and delete the object if it is not added to grid
407 //But now AddToMap is used in too many places, I will just see how many ASSERT failures it will cause
408 ASSERT(cellCoord.IsCoordValid());
409 if (!cellCoord.IsCoordValid())
410 {
411 LOG_ERROR("maps", "Map::AddToMap: Object {} has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
412 obj->GetGUID().ToString(), obj->GetPositionX(), obj->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
413 return false; //Should delete object
414 }
415
416 Cell cell(cellCoord);
417 if (obj->isActiveObject())
418 EnsureGridLoaded(cell);
419 else
420 EnsureGridCreated(GridCoord(cell.GridX(), cell.GridY()));
421
422 AddToGrid(obj, cell);
423
424 //Must already be set before AddToMap. Usually during obj->Create.
425 //obj->SetMap(this);
426 obj->AddToWorld();
427
428 if (checkTransport)
429 if (!(obj->IsGameObject() && obj->ToGameObject()->IsTransport())) // dont add transport to transport ;d
430 if (Transport* transport = GetTransportForPos(obj->GetPhaseMask(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj))
431 transport->AddPassenger(obj, true);
432
433 InitializeObject(obj);
434
435 if (obj->isActiveObject())
436 AddToActive(obj);
437
438 //something, such as vehicle, needs to be update immediately
439 //also, trigger needs to cast spell, if not update, cannot see visual
440 obj->UpdateObjectVisibility(true);
441
442 // 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
443 // Initialize vehicle, this is done only for summoned npcs, DB creatures are handled by grid loaders
444 if (obj->IsCreature())
445 if (Vehicle* vehicle = obj->ToCreature()->GetVehicleKit())
446 vehicle->Reset();
447 return true;
448}
CoordPair< MAX_NUMBER_OF_GRIDS > GridCoord
Definition GridDefines.h:167
void InitializeObject(T *obj)
Definition Map.cpp:377
Transport * GetTransportForPos(uint32 phase, float x, float y, float z, WorldObject *worldobject=nullptr)
Definition Map.cpp:1167
void EnsureGridCreated(GridCoord const &gridCoord)
Definition Map.cpp:268
Definition Transport.h:30
Definition Vehicle.h:28

References AddToActive(), AddToGrid(), ASSERT, Acore::ComputeCellCoord(), EnsureGridCreated(), EnsureGridLoaded(), GetTransportForPos(), Cell::GridX(), Cell::GridY(), InitializeObject(), CoordPair< LIMIT >::IsCoordValid(), LOG_ERROR, 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(), 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(), Battlefield::SpawnCreature(), Battlefield::SpawnGameObject(), SummonCreature(), SummonGameObject(), WorldObject::SummonGameObject(), Player::SummonPet(), and GameObject::Update().

◆ AddUpdateObject()

void Map::AddUpdateObject ( Object obj)
inline
494 {
495 _updateObjects.insert(obj);
496 }
std::unordered_set< Object * > _updateObjects
Definition Map.h:639

References _updateObjects.

Referenced by WorldObject::AddToObjectUpdate().

◆ AddWorldObject()

void Map::AddWorldObject ( WorldObject obj)
inline

◆ AfterPlayerUnlinkFromMap()

void Map::AfterPlayerUnlinkFromMap ( )
virtual

◆ AllTransportsEmpty()

bool Map::AllTransportsEmpty ( ) const
2750{
2751 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
2752 if (!(*itr)->GetPassengers().empty())
2753 return false;
2754
2755 return true;
2756}

References _transports.

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

◆ AllTransportsRemovePassengers()

void Map::AllTransportsRemovePassengers ( )
2759{
2760 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
2761 while (!(*itr)->GetPassengers().empty())
2762 (*itr)->RemovePassenger(*((*itr)->GetPassengers().begin()), true);
2763}

References _transports.

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

◆ ApplyDynamicModeRespawnScaling()

uint32 Map::ApplyDynamicModeRespawnScaling ( WorldObject const *  obj,
uint32  respawnDelay 
) const
1782{
1783 ASSERT(obj->GetMap() == this);
1784
1785 float rate = sWorld->getFloatConfig(obj->IsGameObject() ? CONFIG_RESPAWN_DYNAMICRATE_GAMEOBJECT : CONFIG_RESPAWN_DYNAMICRATE_CREATURE);
1786
1787 if (rate == 1.0f)
1788 return respawnDelay;
1789
1790 // No instanced maps (dungeons, battlegrounds, arenas etc.)
1791 if (obj->GetMap()->Instanceable())
1792 return respawnDelay;
1793
1794 // No quest givers or world bosses
1795 if (Creature const* creature = obj->ToCreature())
1796 if (creature->IsQuestGiver() || creature->isWorldBoss()
1797 || (creature->GetCreatureTemplate()->rank == CREATURE_ELITE_RARE)
1798 || (creature->GetCreatureTemplate()->rank == CREATURE_ELITE_RAREELITE))
1799 return respawnDelay;
1800
1801 auto it = _zonePlayerCountMap.find(obj->GetZoneId());
1802 if (it == _zonePlayerCountMap.end())
1803 return respawnDelay;
1804 uint32 const playerCount = it->second;
1805 if (!playerCount)
1806 return respawnDelay;
1807 double const adjustFactor = rate / playerCount;
1808 if (adjustFactor >= 1.0) // nothing to do here
1809 return respawnDelay;
1810 uint32 const timeMinimum = sWorld->getIntConfig(obj->IsGameObject() ? CONFIG_RESPAWN_DYNAMICMINIMUM_GAMEOBJECT : CONFIG_RESPAWN_DYNAMICMINIMUM_CREATURE);
1811 if (respawnDelay <= timeMinimum)
1812 return respawnDelay;
1813
1814 return std::max<uint32>(std::ceil(respawnDelay * adjustFactor), timeMinimum);
1815}
std::uint32_t uint32
Definition Define.h:107
@ CONFIG_RESPAWN_DYNAMICMINIMUM_CREATURE
Definition IWorld.h:428
@ CONFIG_RESPAWN_DYNAMICMINIMUM_GAMEOBJECT
Definition IWorld.h:427
@ CONFIG_RESPAWN_DYNAMICRATE_CREATURE
Definition IWorld.h:203
@ CONFIG_RESPAWN_DYNAMICRATE_GAMEOBJECT
Definition IWorld.h:202
@ CREATURE_ELITE_RARE
Definition SharedDefines.h:2735
@ CREATURE_ELITE_RAREELITE
Definition SharedDefines.h:2733
#define sWorld
Definition World.h:363

References _zonePlayerCountMap, ASSERT, CONFIG_RESPAWN_DYNAMICMINIMUM_CREATURE, CONFIG_RESPAWN_DYNAMICMINIMUM_GAMEOBJECT, CONFIG_RESPAWN_DYNAMICRATE_CREATURE, CONFIG_RESPAWN_DYNAMICRATE_GAMEOBJECT, CREATURE_ELITE_RARE, CREATURE_ELITE_RAREELITE, WorldObject::GetMap(), WorldObject::GetZoneId(), Instanceable(), Object::IsGameObject(), sWorld, and Object::ToCreature().

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

◆ Balance()

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

References _dynamicTree, and DynamicMapTree::balance().

Referenced by EnsureGridLoaded().

◆ 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
3066{
3067 return CanReachPositionAndGetValidCoords(source, source->GetPositionX(), source->GetPositionY(), source->GetPositionZ(), destX, destY, destZ, failOnCollision, failOnSlopes);
3068}
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:3025

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
3071{
3072 if (!CheckCollisionAndGetValidCoords(source, startX, startY, startZ, destX, destY, destZ, failOnCollision))
3073 {
3074 return false;
3075 }
3076
3077 Unit const* unit = source->ToUnit();
3078 // if it's not an unit (Object) then we do not have to continue
3079 // with walkable checks
3080 if (!unit)
3081 {
3082 return true;
3083 }
3084
3085 /*
3086 * Walkable checks
3087 */
3088 bool isWaterNext = HasEnoughWater(unit, destX, destY, destZ);
3089 Creature const* creature = unit->ToCreature();
3090 bool cannotEnterWater = isWaterNext && (creature && !creature->CanEnterWater());
3091 bool cannotWalkOrFly = !isWaterNext && !source->ToPlayer() && !unit->CanFly() && (creature && !creature->CanWalk());
3092 if (cannotEnterWater || cannotWalkOrFly ||
3093 (failOnSlopes && !PathGenerator::IsWalkableClimb(startX, startY, startZ, destX, destY, destZ, source->GetCollisionHeight())))
3094 {
3095 return false;
3096 }
3097
3098 return true;
3099}
bool CanWalk() const
Definition Creature.h:79
bool CanEnterWater() const override
Definition Creature.cpp:3288
bool HasEnoughWater(WorldObject const *searcher, float x, float y, float z) const
Definition Map.cpp:1666
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:3108
bool IsWalkableClimb(float const *v1, float const *v2) const
Definition PathGenerator.cpp:951
virtual bool CanFly() const =0

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.

3026{
3027 G3D::Vector3 prevPath = path->GetStartPosition();
3028 for (auto& vector : path->GetPath())
3029 {
3030 float x = vector.x;
3031 float y = vector.y;
3032 float z = vector.z;
3033
3034 if (!CanReachPositionAndGetValidCoords(source, prevPath.x, prevPath.y, prevPath.z, x, y, z, failOnCollision, failOnSlopes))
3035 {
3036 destX = x;
3037 destY = y;
3038 destZ = z;
3039 return false;
3040 }
3041
3042 prevPath = vector;
3043 }
3044
3045 destX = prevPath.x;
3046 destY = prevPath.y;
3047 destZ = prevPath.z;
3048
3049 return true;
3050}
G3D::Vector3 const & GetStartPosition() const
Definition PathGenerator.h:86

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

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

◆ CanUnload()

bool Map::CanUnload ( uint32  diff)
inline
167 {
168 if (!m_unloadTimer)
169 return false;
170
171 if (m_unloadTimer <= diff)
172 return true;
173
174 m_unloadTimer -= diff;
175 return false;
176 }

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
3109{
3110 // Prevent invalid coordinates here, position is unchanged
3111 if (!Acore::IsValidMapCoord(startX, startY, startZ) || !Acore::IsValidMapCoord(destX, destY, destZ))
3112 {
3113 LOG_FATAL("maps", "Map::CheckCollisionAndGetValidCoords invalid coordinates startX: {}, startY: {}, startZ: {}, destX: {}, destY: {}, destZ: {}", startX, startY, startZ, destX, destY, destZ);
3114 return false;
3115 }
3116
3117 bool isWaterNext = IsInWater(source->GetPhaseMask(), destX, destY, destZ, source->GetCollisionHeight());
3118
3119 PathGenerator path(source);
3120
3121 // Use a detour raycast to get our first collision point
3122 path.SetUseRaycast(true);
3123 bool result = path.CalculatePath(startX, startY, startZ, destX, destY, destZ, false);
3124
3125 Unit const* unit = source->ToUnit();
3126 bool notOnGround = path.GetPathType() & PATHFIND_NOT_USING_PATH
3127 || isWaterNext || (unit && unit->IsFlying());
3128
3129 // Check for valid path types before we proceed
3130 if (!result || (!notOnGround && path.GetPathType() & ~(PATHFIND_NORMAL | PATHFIND_SHORTCUT | PATHFIND_INCOMPLETE | PATHFIND_FARFROMPOLY_END)))
3131 {
3132 return false;
3133 }
3134
3135 G3D::Vector3 endPos = path.GetPath().back();
3136 destX = endPos.x;
3137 destY = endPos.y;
3138 destZ = endPos.z;
3139
3140 // collision check
3141 bool collided = false;
3142
3143 // check static LOS
3144 float halfHeight = source->GetCollisionHeight() * 0.5f;
3145
3146 // Unit is not on the ground, check for potential collision via vmaps
3147 if (notOnGround)
3148 {
3149 bool col = VMAP::VMapFactory::createOrGetVMapMgr()->GetObjectHitPos(source->GetMapId(),
3150 startX, startY, startZ + halfHeight,
3151 destX, destY, destZ + halfHeight,
3152 destX, destY, destZ, -CONTACT_DISTANCE);
3153
3154 destZ -= halfHeight;
3155
3156 // Collided with static LOS object, move back to collision point
3157 if (col)
3158 {
3159 collided = true;
3160 }
3161 }
3162
3163 // check dynamic collision
3164 bool col = source->GetMap()->GetObjectHitPos(source->GetPhaseMask(),
3165 startX, startY, startZ + halfHeight,
3166 destX, destY, destZ + halfHeight,
3167 destX, destY, destZ, -CONTACT_DISTANCE);
3168
3169 destZ -= halfHeight;
3170
3171 // Collided with a gameobject, move back to collision point
3172 if (col)
3173 {
3174 collided = true;
3175 }
3176
3177 float groundZ = VMAP_INVALID_HEIGHT_VALUE;
3178 source->UpdateAllowedPositionZ(destX, destY, destZ, &groundZ);
3179
3180 // position has no ground under it (or is too far away)
3181 if (groundZ <= INVALID_HEIGHT && unit && !unit->CanFly())
3182 {
3183 // fall back to gridHeight if any
3184 float gridHeight = GetGridHeight(destX, destY);
3185 if (gridHeight > INVALID_HEIGHT)
3186 {
3187 destZ = gridHeight + unit->GetHoverHeight();
3188 }
3189 else
3190 {
3191 return false;
3192 }
3193 }
3194
3195 return !failOnCollision || !collided;
3196}
#define INVALID_HEIGHT
Definition GridTerrainData.h:27
#define VMAP_INVALID_HEIGHT_VALUE
Definition IVMapMgr.h:49
#define LOG_FATAL(filterType__,...)
Definition Log.h:153
#define CONTACT_DISTANCE
Definition ObjectDefines.h:23
@ PATHFIND_FARFROMPOLY_END
Definition PathGenerator.h:54
@ PATHFIND_NOT_USING_PATH
Definition PathGenerator.h:51
@ PATHFIND_NORMAL
Definition PathGenerator.h:47
@ PATHFIND_SHORTCUT
Definition PathGenerator.h:48
@ PATHFIND_INCOMPLETE
Definition PathGenerator.h:49
bool IsInWater(uint32 phaseMask, float x, float y, float z, float collisionHeight) const
Definition Map.cpp:1654
float GetGridHeight(float x, float y) const
Definition Map.cpp:1231
Definition PathGenerator.h:59
float GetCollisionHeight() const override
Return collision height sent to client.
Definition Unit.cpp:21156
float GetHoverHeight() const
Definition Unit.h:1636
bool IsFlying() const
Definition Unit.h:1633
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
bool IsValidMapCoord(float c)
Definition GridDefines.h:206

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
409{ 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 
)
2813{
2814 Corpse* corpse = GetCorpseByPlayer(ownerGuid);
2815 if (!corpse)
2816 return nullptr;
2817
2818 RemoveCorpse(corpse);
2819
2820 // remove corpse from DB
2821 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
2822 corpse->DeleteFromDB(trans);
2823 CharacterDatabase.CommitTransaction(trans);
2824
2825 Corpse* bones = NULL;
2826
2827 // create the bones only if the map and the grid is loaded at the corpse's location
2828 // ignore bones creating option in case insignia
2829 if ((insignia ||
2831 IsGridLoaded(corpse->GetPositionX(), corpse->GetPositionY()))
2832 {
2833 // Create bones, don't change Corpse
2834 bones = new Corpse();
2835 bones->Create(corpse->GetGUID().GetCounter());
2836
2837 for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type
2838 bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
2839
2840 bones->SetCellCoord(corpse->GetCellCoord());
2841 bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
2842 bones->SetPhaseMask(corpse->GetPhaseMask(), false);
2843
2845 bones->SetGuidValue(CORPSE_FIELD_OWNER, corpse->GetOwnerGUID());
2846
2847 for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
2848 if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i))
2849 bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0);
2850
2851 AddCorpse(bones);
2852
2853 bones->UpdatePositionData();
2854
2855 // add bones in grid store if grid loaded where corpse placed
2856 AddToMap(bones);
2857 }
2858
2859 // all references to the corpse should be removed at this point
2860 delete corpse;
2861
2862 return bones;
2863}
@ CORPSE_FLAG_BONES
Definition Corpse.h:40
@ CORPSE_FLAG_UNK2
Definition Corpse.h:42
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
@ CONFIG_DEATH_BONES_BG_OR_ARENA
Definition IWorld.h:104
@ CONFIG_DEATH_BONES_WORLD
Definition IWorld.h:103
@ EQUIPMENT_SLOT_END
Definition Player.h:699
@ 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
Definition Corpse.h:49
bool Create(ObjectGuid::LowType guidlow)
Definition Corpse.cpp:61
void SetCellCoord(CellCoord const &cellCoord)
Definition Corpse.h:75
void DeleteFromDB(CharacterDatabaseTransaction trans)
Definition Corpse.cpp:119
bool IsBattlegroundOrArena() const
Definition Map.h:303
void AddCorpse(Corpse *corpse)
Definition Map.cpp:2781
bool IsGridLoaded(GridCoord const &gridCoord) const
Definition Map.cpp:291
Corpse * GetCorpseByPlayer(ObjectGuid const &ownerGuid) const
Definition Map.h:381
bool AddToMap(T *, bool checkTransport=false)
Definition Map.cpp:394
void RemoveCorpse(Corpse *corpse)
Definition Map.cpp:2792
LowType GetCounter() const
Definition ObjectGuid.h:145
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:2886
uint32 GetPhaseMask() const
Definition Object.h:451
void UpdatePositionData()
Definition Object.cpp:1165
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
void Relocate(float x, float y)
Definition Position.h:77

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(), IsGridLoaded(), 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 
)
866{
867 Cell old_cell = creature->GetCurrentCell();
868 Cell new_cell(x, y);
869
870 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
871 {
872 if (old_cell.DiffGrid(new_cell))
873 EnsureGridLoaded(new_cell);
874
875 AddCreatureToMoveList(creature);
876 }
877 else
879
880 creature->Relocate(x, y, z, o);
881 if (creature->IsVehicle())
882 creature->GetVehicleKit()->RelocatePassengers();
883 creature->UpdatePositionData();
884 creature->UpdateObjectVisibility(false);
885}
void AddCreatureToMoveList(Creature *c)
Definition Map.cpp:928
void RemoveCreatureFromMoveList(Creature *c)
Definition Map.cpp:935
Cell const & GetCurrentCell() const
Definition Object.h:402
bool IsVehicle() const
Definition Unit.h:766
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition Unit.cpp:19182
Vehicle * GetVehicleKit() const
Definition Unit.h:1838
void RelocatePassengers()
Definition Vehicle.cpp:513
bool DiffGrid(const Cell &cell) const
Definition Cell.h:63
bool DiffCell(const Cell &cell) const
Definition Cell.h:57

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.

1818{
1820 {
1823
1824 if (!transport->IsInWorld())
1825 continue;
1826
1827 transport->DelayedUpdate(t_diff);
1828 }
1829
1831}
void RemoveAllObjectsInRemoveList()
Definition Map.cpp:1860
Definition Transport.h:49
void DelayedUpdate(uint32 diff)
Definition Transport.cpp:240

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

Referenced by MapInstanced::DelayedUpdate().

◆ DeleteCorpseData()

void Map::DeleteCorpseData ( )
3236{
3237 // DELETE FROM corpse WHERE mapId = ? AND instanceId = ?
3239 stmt->SetData(0, GetId());
3240 stmt->SetData(1, GetInstanceId());
3241 CharacterDatabase.Execute(stmt);
3242}
@ CHAR_DEL_CORPSES_FROM_MAP
Definition CharacterDatabase.h:249
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157

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)
261{
263
264 RemoveUpdateObject(player); //TODO: I do not know why we need this, it should be removed in ~Object anyway
265 delete player;
266}
void RemoveUpdateObject(Object *obj)
Definition Map.h:498
void RemoveObject(T *object)
Definition ObjectAccessor.h:95

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

◆ DeleteFromWorld() [2/2]

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

Referenced by RemoveFromMap(), RemoveFromMap(), and RemovePlayerFromMap().

◆ DeleteRespawnTimes()

void Map::DeleteRespawnTimes ( )
2635{
2636 _creatureRespawnTimes.clear();
2637 _goRespawnTimes.clear();
2638
2640}
static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId)
Definition Map.cpp:2642
std::unordered_map< ObjectGuid::LowType, time_t > _creatureRespawnTimes
Definition Map.h:613
std::unordered_map< ObjectGuid::LowType, time_t > _goRespawnTimes
Definition Map.h:614

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

Referenced by InstanceMap::UnloadAll().

◆ DeleteRespawnTimesInDB()

void Map::DeleteRespawnTimesInDB ( uint16  mapId,
uint32  instanceId 
)
static
2643{
2645 stmt->SetData(0, mapId);
2646 stmt->SetData(1, instanceId);
2647 CharacterDatabase.Execute(stmt);
2648
2649 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE);
2650 stmt->SetData(0, mapId);
2651 stmt->SetData(1, instanceId);
2652 CharacterDatabase.Execute(stmt);
2653}
@ CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE
Definition CharacterDatabase.h:255
@ CHAR_DEL_GO_RESPAWN_BY_INSTANCE
Definition CharacterDatabase.h:260

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()

void Map::DoForAllPlayers ( std::function< void(Player *)>  exec)
3009{
3010 for (auto const& it : GetPlayers())
3011 {
3012 if (Player* player = it.GetSource())
3013 {
3014 exec(player);
3015 }
3016 }
3017}

References GetPlayers().

Referenced by Battleground::_ProcessProgress(), ArenaSeasonMgr::BroadcastUpdatedWorldState(), WorldState::BuffAdalsSongOfBattle(), WorldState::BuffMagtheridonTeam(), BattlegroundSA::CaptureGraveyard(), WorldState::DispelAdalsSongOfBattle(), WorldState::DispelMagtheridonTeam(), npc_thrall_warchief::npc_thrall_warchiefAI::DoAction(), InstanceScript::DoCastSpellOnPlayers(), InstanceScript::DoRemoveAurasDueToSpellOnPlayers(), InstanceScript::DoSendNotifyToInstance(), InstanceScript::DoStartTimedAchievement(), InstanceScript::DoStopTimedAchievement(), InstanceScript::DoUpdateAchievementCriteria(), BattlegroundSA::EventPlayerDamagedGO(), BattlegroundSA::EventPlayerUsedGO(), boss_azuregos::boss_azuregosAI::JustDied(), boss_rajaxx::JustDied(), boss_alar::JustDied(), boss_felblood_kaelthas::LapseAction(), BattlegroundSA::PostUpdateImpl(), spell_fire_festival_fortitude::PrepareSpellScript(), boss_azuregos::boss_azuregosAI::Reset(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::Reset(), npc_minigob_manabonk::SelectTargetInDalaran(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::SetBossState(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetData(), Battleground::SpiritOfCompetitionEvent(), boss_nefarian::UpdateAI(), boss_cthun::UpdateAI(), npc_gunship::npc_gunshipAI::UpdateAI(), and npc_midsummer_bonfire::UpdateBonfireBlessingBuffs().

◆ DynamicObjectRelocation()

void Map::DynamicObjectRelocation ( DynamicObject go,
float  x,
float  y,
float  z,
float  o 
)
909{
910 Cell old_cell = dynObj->GetCurrentCell();
911 Cell new_cell(x, y);
912
913 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
914 {
915 if (old_cell.DiffGrid(new_cell))
916 EnsureGridLoaded(new_cell);
917
919 }
920 else
922
923 dynObj->Relocate(x, y, z, o);
924 dynObj->SetPositionDataUpdate();
925 dynObj->UpdateObjectVisibility(false);
926}
void RemoveDynamicObjectFromMoveList(DynamicObject *go)
Definition Map.cpp:961
void AddDynamicObjectToMoveList(DynamicObject *go)
Definition Map.cpp:954

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 ( GridCoord const &  gridCoord)
269{
270 _mapGridManager.CreateGrid(gridCoord.x_coord, gridCoord.y_coord);
271}
void CreateGrid(uint16 const x, uint16 const y)
Definition MapGridManager.cpp:5

References _mapGridManager, MapGridManager::CreateGrid(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by AddToMap(), EnsureGridLoaded(), GetGridTerrainData(), and GetGridTerrainDataSharedPtr().

◆ EnsureGridLoaded()

bool Map::EnsureGridLoaded ( Cell const &  cell)
private
274{
275 EnsureGridCreated(GridCoord(cell.GridX(), cell.GridY()));
276
277 if (_mapGridManager.LoadGrid(cell.GridX(), cell.GridY()))
278 {
279 Balance();
280 return true;
281 }
282
283 return false;
284}
bool LoadGrid(uint16 const x, uint16 const y)
Definition MapGridManager.cpp:22
void Balance()
Definition Map.h:406

References _mapGridManager, Balance(), EnsureGridCreated(), Cell::GridX(), Cell::GridY(), and MapGridManager::LoadGrid().

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

◆ GameObjectRelocation()

void Map::GameObjectRelocation ( GameObject go,
float  x,
float  y,
float  z,
float  o 
)
888{
889 Cell old_cell = go->GetCurrentCell();
890 Cell new_cell(x, y);
891
892 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
893 {
894 if (old_cell.DiffGrid(new_cell))
895 EnsureGridLoaded(new_cell);
896
898 }
899 else
901
902 go->Relocate(x, y, z, o);
905 go->UpdateObjectVisibility(false);
906}
void UpdateModelPosition()
Definition GameObject.cpp:2895
void AddGameObjectToMoveList(GameObject *go)
Definition Map.cpp:941
void RemoveGameObjectFromMoveList(GameObject *go)
Definition Map.cpp:948
void SetPositionDataUpdate()
Definition Object.cpp:1156
virtual void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false)
Definition Object.cpp:2982

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()

std::size_t Map::GetActiveNonPlayersCount ( ) const
inline
504 {
505 return m_activeNonPlayers.size();
506 }

References m_activeNonPlayers.

Referenced by debug_commandscript::HandleDebugObjectCountMap().

◆ GetAllTransports()

TransportsContainer const & Map::GetAllTransports ( ) const
inline
482{ 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
1302{
1303 uint32 mogpFlags;
1304 int32 adtId, rootId, groupId;
1305 float vmapZ = z;
1306 bool hasVmapArea = GetAreaInfo(phaseMask, x, y, vmapZ, mogpFlags, adtId, rootId, groupId);
1307
1308 uint32 gridAreaId = 0;
1309 float gridMapHeight = INVALID_HEIGHT;
1310 if (GridTerrainData* gmap = const_cast<Map*>(this)->GetGridTerrainData(x, y))
1311 {
1312 gridAreaId = gmap->getArea(x, y);
1313 gridMapHeight = gmap->getHeight(x, y);
1314 }
1315
1316 uint16 areaId = 0;
1317
1318 // floor is the height we are closer to (but only if above)
1319 if (hasVmapArea && G3D::fuzzyGe(z, vmapZ - GROUND_HEIGHT_TOLERANCE) && (G3D::fuzzyLt(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE) || vmapZ > gridMapHeight))
1320 {
1321 // wmo found
1322 if (WMOAreaTableEntry const* wmoEntry = GetWMOAreaTableEntryByTripple(rootId, adtId, groupId))
1323 areaId = wmoEntry->areaId;
1324
1325 if (!areaId)
1326 areaId = gridAreaId;
1327 }
1328 else
1329 areaId = gridAreaId;
1330
1331 if (!areaId)
1332 areaId = i_mapEntry->linked_zone;
1333
1334 return areaId;
1335}
WMOAreaTableEntry const * GetWMOAreaTableEntryByTripple(int32 rootid, int32 adtid, int32 groupid)
Definition DBCStores.cpp:694
std::uint16_t uint16
Definition Define.h:108
float const GROUND_HEIGHT_TOLERANCE
Definition SharedDefines.h:26
Definition GridTerrainData.h:222
Definition Map.h:156
bool GetAreaInfo(uint32 phaseMask, float x, float y, float z, uint32 &mogpflags, int32 &adtId, int32 &rootId, int32 &groupId) const
Definition Map.cpp:1252
GridTerrainData * GetGridTerrainData(GridCoord const &gridCoord)
Definition Map.cpp:1130
uint32 linked_zone
Definition DBCStructure.h:1332
Definition DBCStructure.h:2130

References GetAreaInfo(), GetGridTerrainData(), 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
1253{
1254 float vmap_z = z;
1255 float dynamic_z = z;
1256 float check_z = z;
1258 uint32 vflags;
1259 int32 vadtId;
1260 int32 vrootId;
1261 int32 vgroupId;
1262 uint32 dflags;
1263 int32 dadtId;
1264 int32 drootId;
1265 int32 dgroupId;
1266
1267 bool hasVmapAreaInfo = vmgr->GetAreaInfo(GetId(), x, y, vmap_z, vflags, vadtId, vrootId, vgroupId);
1268 bool hasDynamicAreaInfo = _dynamicTree.GetAreaInfo(x, y, dynamic_z, phaseMask, dflags, dadtId, drootId, dgroupId);
1269 auto useVmap = [&]() { check_z = vmap_z; flags = vflags; adtId = vadtId; rootId = vrootId; groupId = vgroupId; };
1270 auto useDyn = [&]() { check_z = dynamic_z; flags = dflags; adtId = dadtId; rootId = drootId; groupId = dgroupId; };
1271
1272 if (hasVmapAreaInfo)
1273 {
1274 if (hasDynamicAreaInfo && dynamic_z > vmap_z)
1275 useDyn();
1276 else
1277 useVmap();
1278 }
1279 else if (hasDynamicAreaInfo)
1280 {
1281 useDyn();
1282 }
1283
1284 if (hasVmapAreaInfo || hasDynamicAreaInfo)
1285 {
1286 // check if there's terrain between player height and object height
1287 if (GridTerrainData* gmap = const_cast<Map*>(this)->GetGridTerrainData(x, y))
1288 {
1289 float mapHeight = gmap->getHeight(x, y);
1290 // z + 2.0f condition taken from GetHeight(), not sure if it's such a great choice...
1291 if (z + 2.0f > mapHeight && mapHeight > check_z)
1292 return false;
1293 }
1294
1295 return true;
1296 }
1297
1298 return false;
1299}
bool GetAreaInfo(float x, float y, float &z, uint32 phasemask, uint32 &flags, int32 &adtId, int32 &rootId, int32 &groupId) const
Definition DynamicTree.cpp:311
Definition IVMapMgr.h:78
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(), GetGridTerrainData(), and GetId().

Referenced by GetAreaId().

◆ GetCorpse()

Corpse * Map::GetCorpse ( ObjectGuid const  guid)
2494{
2495 return _objectsStore.Find<Corpse>(guid);
2496}
MapStoredObjectTypesContainer _objectsStore
Definition Map.h:632
SPECIFIC_TYPE * Find(KEY_TYPE const &handle)
Definition TypeContainer.h:144

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

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

◆ GetCorpseByPlayer()

Corpse * Map::GetCorpseByPlayer ( ObjectGuid const &  ownerGuid) const
inline
382 {
383 auto itr = _corpsesByPlayer.find(ownerGuid);
384 if (itr != _corpsesByPlayer.end())
385 return itr->second;
386
387 return nullptr;
388 }

References _corpsesByPlayer.

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

◆ GetCorpsesInCell()

std::unordered_set< Corpse * > const * Map::GetCorpsesInCell ( uint32  cellId) const
inline
373 {
374 auto itr = _corpsesByCell.find(cellId);
375 if (itr != _corpsesByCell.end())
376 return &itr->second;
377
378 return nullptr;
379 }

References _corpsesByCell.

Referenced by GridObjectLoader::LoadAllCellsInGrid().

◆ GetCreatedCellsInGridCount()

uint32 Map::GetCreatedCellsInGridCount ( uint16 const  x,
uint16 const  y 
)
3264{
3266}
uint32 GetCreatedCellsInGridCount(uint16 const x, uint16 const y)
Definition MapGridManager.cpp:98

References _mapGridManager, and MapGridManager::GetCreatedCellsInGridCount().

Referenced by debug_commandscript::HandleDebugMapDataCommand().

◆ GetCreatedCellsInMapCount()

uint32 Map::GetCreatedCellsInMapCount ( )
3269{
3271}
uint32 GetCreatedCellsInMapCount()
Definition MapGridManager.cpp:107

References _mapGridManager, and MapGridManager::GetCreatedCellsInMapCount().

Referenced by debug_commandscript::HandleDebugMapDataCommand().

◆ GetCreatedGridsCount()

uint32 Map::GetCreatedGridsCount ( )
3254{
3256}
uint32 GetCreatedGridsCount()
Definition MapGridManager.cpp:88

References _mapGridManager, and MapGridManager::GetCreatedGridsCount().

Referenced by debug_commandscript::HandleDebugMapDataCommand().

◆ GetCreature()

Creature * Map::GetCreature ( ObjectGuid const  guid)
2499{
2500 return _objectsStore.Find<Creature>(guid);
2501}

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(), 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(), boss_tyrannus::boss_tyrannusAI::EnterEvadeMode(), 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(), Unit::isAttackingPlayer(), 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::JustDied(), boss_dalronn_the_controller::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::JustEngagedWith(), boss_dalronn_the_controller::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_shadowfang_keep::instance_shadowfang_keep_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_molten_core::instance_molten_core_InstanceMapScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_ruby_sanctum::instance_ruby_sanctum_InstanceMapScript::OnPlayerEnter(), instance_vault_of_archavon::instance_vault_of_archavon_InstanceMapScript::OnPlayerEnter(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::OnPlayerEnter(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::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(), BattlegroundRV::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(), instance_zulaman::instance_zulaman_InstanceMapScript::ResetAkilzonGauntlet(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ResetPrisoners(), ScheduleCreatureRespawn(), ScriptsProcess(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::SendAddsUpStairs(), Player::SendLoot(), instance_molten_core::instance_molten_core_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_scarlet_monastery::instance_scarlet_monastery_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_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_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::SetData(), Unit::SetPhaseMask(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::SpawnAnubArak(), instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounterVehicles(), instance_zulaman::instance_zulaman_InstanceMapScript::StartAkilzonGauntlet(), 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_icecrown_citadel::instance_icecrown_citadel_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(), 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
421 {
422 std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid);
423 if (itr != _creatureRespawnTimes.end())
424 return itr->second;
425
426 return time_t(0);
427 }

References _creatureRespawnTimes.

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

◆ GetDebugInfo()

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

Reimplemented in InstanceMap.

3245{
3246 std::stringstream sstr;
3247 sstr << std::boolalpha
3248 << "Id: " << GetId() << " InstanceId: " << GetInstanceId() << " Difficulty: " << std::to_string(GetDifficulty())
3249 << " HasPlayers: " << HavePlayers();
3250 return sstr.str();
3251}
bool HavePlayers() const
Definition Map.h:324
Difficulty GetDifficulty() const
Definition Map.h:290

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

Referenced by InstanceMap::GetDebugInfo().

◆ GetDifficulty()

◆ GetDynamicMapTree()

DynamicMapTree const & Map::GetDynamicMapTree ( ) const
inline
410{ return _dynamicTree; }

References _dynamicTree.

Referenced by BattlegroundRV::CheckPositionForUnit().

◆ GetDynamicObject()

DynamicObject * Map::GetDynamicObject ( ObjectGuid const  guid)
2523{
2524 return _objectsStore.Find<DynamicObject>(guid);
2525}
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
307 {
308 if (!i_mapEntry)
309 return false;
310 return i_mapEntry->GetEntrancePos(mapid, x, y);
311 }
bool GetEntrancePos(int32 &mapid, float &x, float &y) const
Definition DBCStructure.h:1359

References MapEntry::GetEntrancePos(), and i_mapEntry.

◆ GetEntry()

MapEntry const * Map::GetEntry ( ) const
inline

◆ GetFullTerrainStatusForPosition()

void Map::GetFullTerrainStatusForPosition ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight,
PositionFullTerrainStatus data,
uint8  reqLiquidType = MAP_ALL_LIQUIDS 
)
1442{
1443 GridTerrainData* gmap = GetGridTerrainData(x, y);
1444
1446 VMAP::AreaAndLiquidData vmapData;
1447 // VMAP::AreaAndLiquidData dynData;
1448 VMAP::AreaAndLiquidData* wmoData = nullptr;
1449 vmgr->GetAreaAndLiquidData(GetId(), x, y, z, reqLiquidType, vmapData);
1450 // _dynamicTree.GetAreaAndLiquidData(x, y, z, phaseMask, reqLiquidType, dynData);
1451
1452 uint32 gridAreaId = 0;
1453 float gridMapHeight = INVALID_HEIGHT;
1454 if (gmap)
1455 {
1456 gridAreaId = gmap->getArea(x, y);
1457 gridMapHeight = gmap->getHeight(x, y);
1458 }
1459
1460 bool useGridLiquid = true;
1461
1462 // floor is the height we are closer to (but only if above)
1464 if (gridMapHeight > INVALID_HEIGHT && G3D::fuzzyGe(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE))
1465 data.floorZ = gridMapHeight;
1466
1467 if (vmapData.floorZ > VMAP_INVALID_HEIGHT && G3D::fuzzyGe(z, vmapData.floorZ - GROUND_HEIGHT_TOLERANCE) &&
1468 (G3D::fuzzyLt(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE) || vmapData.floorZ > gridMapHeight))
1469 {
1470 data.floorZ = vmapData.floorZ;
1471 wmoData = &vmapData;
1472 }
1473
1474 // NOTE: Objects will not detect a case when a wmo providing area/liquid despawns from under them
1475 // but this is fine as these kind of objects are not meant to be spawned and despawned a lot
1476 // example: Lich King platform
1477 /*
1478 if (dynData.floorZ > VMAP_INVALID_HEIGHT && G3D::fuzzyGe(z, dynData.floorZ - GROUND_HEIGHT_TOLERANCE) &&
1479 (G3D::fuzzyLt(z, gridMapHeight - GROUND_HEIGHT_TOLERANCE) || dynData.floorZ > gridMapHeight) &&
1480 (G3D::fuzzyLt(z, vmapData.floorZ - GROUND_HEIGHT_TOLERANCE) || dynData.floorZ > vmapData.floorZ))
1481 {
1482 data.floorZ = dynData.floorZ;
1483 wmoData = &dynData;
1484 }
1485 */
1486
1487 if (wmoData)
1488 {
1489 if (wmoData->areaInfo)
1490 {
1491 // wmo found
1492 WMOAreaTableEntry const* wmoEntry = GetWMOAreaTableEntryByTripple(wmoData->areaInfo->rootId, wmoData->areaInfo->adtId, wmoData->areaInfo->groupId);
1493 data.outdoors = (wmoData->areaInfo->mogpFlags & 0x8) != 0;
1494 if (wmoEntry)
1495 {
1496 data.areaId = wmoEntry->areaId;
1497 if (wmoEntry->Flags & 4)
1498 data.outdoors = true;
1499 else if (wmoEntry->Flags & 2)
1500 data.outdoors = false;
1501 }
1502
1503 if (!data.areaId)
1504 data.areaId = gridAreaId;
1505
1506 useGridLiquid = !IsInWMOInterior(wmoData->areaInfo->mogpFlags);
1507 }
1508 }
1509 else
1510 {
1511 data.outdoors = true;
1512 data.areaId = gridAreaId;
1513 if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(data.areaId))
1514 data.outdoors = (areaEntry->flags & (AREA_FLAG_INSIDE | AREA_FLAG_OUTSIDE)) != AREA_FLAG_INSIDE;
1515 }
1516
1517 if (!data.areaId)
1519
1520 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(data.areaId);
1521
1522 // liquid processing
1523 if (wmoData && wmoData->liquidInfo && wmoData->liquidInfo->level > wmoData->floorZ)
1524 {
1525 uint32 liquidType = wmoData->liquidInfo->type;
1526 if (GetId() == 530 && liquidType == 2) // gotta love blizzard hacks
1527 liquidType = 15;
1528
1529 uint32 liquidFlagType = 0;
1530 if (LiquidTypeEntry const* liquidData = sLiquidTypeStore.LookupEntry(liquidType))
1531 liquidFlagType = liquidData->Type;
1532
1533 if (liquidType && liquidType < 21 && areaEntry)
1534 {
1535 uint32 overrideLiquid = areaEntry->LiquidTypeOverride[liquidFlagType];
1536 if (!overrideLiquid && areaEntry->zone)
1537 {
1538 AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(areaEntry->zone);
1539 if (zoneEntry)
1540 overrideLiquid = zoneEntry->LiquidTypeOverride[liquidFlagType];
1541 }
1542
1543 if (LiquidTypeEntry const* overrideData = sLiquidTypeStore.LookupEntry(overrideLiquid))
1544 {
1545 liquidType = overrideLiquid;
1546 liquidFlagType = overrideData->Type;
1547 }
1548 }
1549
1550 data.liquidInfo.Level = wmoData->liquidInfo->level;
1551 data.liquidInfo.DepthLevel = wmoData->floorZ;
1552 data.liquidInfo.Entry = liquidType;
1553 data.liquidInfo.Flags = 1 << liquidFlagType;
1554
1555 // Get position delta
1556 float delta = wmoData->liquidInfo->level - z;
1557
1558 if (delta > collisionHeight)
1560 else if (delta > 0.0f)
1562 else if (delta > -0.1f)
1564 else
1566 }
1567
1568 // look up liquid data from grid map
1569 if (gmap && useGridLiquid)
1570 {
1571 LiquidData const& gridLiquidData = gmap->GetLiquidData(x, y, z, collisionHeight, reqLiquidType);
1572 if (gridLiquidData.Status != LIQUID_MAP_NO_WATER && (!wmoData || gridLiquidData.Level > wmoData->floorZ))
1573 {
1574 uint32 liquidEntry = gridLiquidData.Entry;
1575 if (GetId() == 530 && liquidEntry == 2)
1576 liquidEntry = 15;
1577
1578 data.liquidInfo = gridLiquidData;
1579 data.liquidInfo.Entry = liquidEntry;
1580 }
1581 }
1582}
@ AREA_FLAG_OUTSIDE
Definition DBCEnums.h:260
@ AREA_FLAG_INSIDE
Definition DBCEnums.h:259
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
DBCStorage< LiquidTypeEntry > sLiquidTypeStore(LiquidTypefmt)
@ LIQUID_MAP_UNDER_WATER
Definition GridTerrainData.h:195
@ LIQUID_MAP_NO_WATER
Definition GridTerrainData.h:191
@ LIQUID_MAP_IN_WATER
Definition GridTerrainData.h:194
@ LIQUID_MAP_ABOVE_WATER
Definition GridTerrainData.h:192
@ LIQUID_MAP_WATER_WALK
Definition GridTerrainData.h:193
#define VMAP_INVALID_HEIGHT
Definition IVMapMgr.h:48
static bool IsInWMOInterior(uint32 mogpFlags)
Definition Map.cpp:1247
float getHeight(float x, float y) const
Definition GridTerrainData.h:249
uint16 getArea(float x, float y) const
Definition GridTerrainData.cpp:214
LiquidData const GetLiquidData(float x, float y, float z, float collisionHeight, uint8 ReqLiquidType) const
Definition GridTerrainData.cpp:530
virtual void GetAreaAndLiquidData(uint32 mapId, float x, float y, float z, uint8 reqLiquidType, AreaAndLiquidData &data) const =0
Definition DBCStructure.h:518
uint32 zone
Definition DBCStructure.h:521
uint32 LiquidTypeOverride[4]
Definition DBCStructure.h:529
Definition GridTerrainData.h:199
float Level
Definition GridTerrainData.h:204
uint32 Flags
Definition GridTerrainData.h:203
uint32 Entry
Definition GridTerrainData.h:202
LiquidStatus Status
Definition GridTerrainData.h:206
float DepthLevel
Definition GridTerrainData.h:205
Definition DBCStructure.h:1282
float floorZ
Definition Map.h:93
uint32 areaId
Definition Map.h:92
LiquidData liquidInfo
Definition Map.h:95
bool outdoors
Definition Map.h:94
Definition IVMapMgr.h:52
Optional< AreaInfo > areaInfo
Definition IVMapMgr.h:72
Optional< LiquidInfo > liquidInfo
Definition IVMapMgr.h:73
float floorZ
Definition IVMapMgr.h:71
uint32 Flags
Definition DBCStructure.h:2140
uint32 areaId
Definition DBCStructure.h:2141

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, GridTerrainData::getArea(), VMAP::IVMapMgr::GetAreaAndLiquidData(), GetGridTerrainData(), GridTerrainData::getHeight(), GetId(), GridTerrainData::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)
2504{
2505 return _objectsStore.Find<GameObject>(guid);
2506}

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

Referenced by boss_sjonnir::boss_sjonnirAI::ActivatePipe(), Spell::CheckCast(), Player::CheckDuelDistance(), Spell::CheckEffectTarget(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::CheckLichKingAvailability(), instance_stratholme::instance_stratholme_InstanceMapScript::CheckZiggurats(), 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::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_shade_of_aran::JustEngagedWith(), boss_sjonnir::boss_sjonnirAI::JustEngagedWith(), boss_kologarn::boss_kologarnAI::JustEngagedWith(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnCreatureCreate(), 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_icecrown_citadel::instance_icecrown_citadel_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_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_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::SetBossState(), instance_blackwing_lair::instance_blackwing_lair_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_blackrock_spire::instance_blackrock_spireMapScript::SetData(), instance_scarlet_monastery::instance_scarlet_monastery_InstanceMapScript::SetData(), instance_scholomance::instance_scholomance_InstanceMapScript::SetData(), instance_stratholme::instance_stratholme_InstanceMapScript::SetData(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::SetData(), instance_hyjal::instance_mount_hyjal_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_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::Update(), instance_violet_hold::instance_violet_hold_InstanceMapScript::Update(), boss_rend_blackhand::boss_rend_blackhandAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_pos_leader_second::npc_pos_leader_secondAI::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
413 {
414 return _dynamicTree.getHeight(x, y, z, maxSearchDist, phasemask);
415 }
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
430 {
431 std::unordered_map<ObjectGuid::LowType /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid);
432 if (itr != _goRespawnTimes.end())
433 return itr->second;
434
435 return time_t(0);
436 }

References _goRespawnTimes.

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

◆ GetGridHeight()

float Map::GetGridHeight ( float  x,
float  y 
) const
1232{
1233 if (GridTerrainData* gmap = const_cast<Map*>(this)->GetGridTerrainData(x, y))
1234 return gmap->getHeight(x, y);
1235
1236 return INVALID_HEIGHT;
1237}

References GetGridTerrainData(), and INVALID_HEIGHT.

Referenced by CheckCollisionAndGetValidCoords(), and GetHeight().

◆ GetGridTerrainData() [1/2]

GridTerrainData * Map::GetGridTerrainData ( float  x,
float  y 
)
1141{
1142 GridCoord const gridCoord = Acore::ComputeGridCoord(x, y);
1143 return GetGridTerrainData(gridCoord);
1144}
GridCoord ComputeGridCoord(float x, float y)
Definition GridDefines.h:181

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

◆ GetGridTerrainData() [2/2]

GridTerrainData * Map::GetGridTerrainData ( GridCoord const &  gridCoord)
1131{
1132 if (!MapGridManager::IsValidGridCoordinates(gridCoord.x_coord, gridCoord.y_coord))
1133 return nullptr;
1134
1135 // ensure GridMap is created
1136 EnsureGridCreated(gridCoord);
1137 return _mapGridManager.GetGrid(gridCoord.x_coord, gridCoord.y_coord)->GetTerrainData();
1138}
MapGridType * GetGrid(uint16 const x, uint16 const y)
Definition MapGridManager.cpp:80
static bool IsValidGridCoordinates(uint16 const x, uint16 const y)
Definition MapGridManager.h:42
GridTerrainData * GetTerrainData() const
Definition MapGrid.h:100

References _mapGridManager, EnsureGridCreated(), MapGridManager::GetGrid(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetTerrainData(), MapGridManager::IsValidGridCoordinates(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

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

◆ GetGridTerrainDataSharedPtr()

std::shared_ptr< GridTerrainData > Map::GetGridTerrainDataSharedPtr ( GridCoord const &  gridCoord)
1124{
1125 // ensure GridMap is created
1126 EnsureGridCreated(gridCoord);
1127 return _mapGridManager.GetGrid(gridCoord.x_coord, gridCoord.y_coord)->GetTerrainDataSharedPtr();
1128}
std::shared_ptr< GridTerrainData > GetTerrainDataSharedPtr()
Definition MapGrid.h:101

References _mapGridManager, EnsureGridCreated(), MapGridManager::GetGrid(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetTerrainDataSharedPtr(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by GridTerrainLoader::LoadMap().

◆ GetGuidSequenceGenerator()

template<HighGuid high>
ObjectGuidGeneratorBase & Map::GetGuidSequenceGenerator ( )
inlineprivate
623 {
624 auto itr = _guidGenerators.find(high);
625 if (itr == _guidGenerators.end())
626 itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
627
628 return *itr->second;
629 }
std::map< HighGuid, std::unique_ptr< ObjectGuidGeneratorBase > > _guidGenerators
Definition Map.h:631
Definition ObjectGuid.h:297

References _guidGenerators.

◆ GetHeight() [1/2]

float Map::GetHeight ( float  x,
float  y,
float  z,
bool  checkVMap = true,
float  maxSearchDist = DEFAULT_HEIGHT_SEARCH 
) const
1195{
1196 // find raw .map surface under Z coordinates
1197 float mapHeight = VMAP_INVALID_HEIGHT_VALUE;
1198 float gridHeight = GetGridHeight(x, y);
1199 if (G3D::fuzzyGe(z, gridHeight - GROUND_HEIGHT_TOLERANCE))
1200 mapHeight = gridHeight;
1201
1202 float vmapHeight = VMAP_INVALID_HEIGHT_VALUE;
1203 if (checkVMap)
1204 {
1206 vmapHeight = vmgr->getHeight(GetId(), x, y, z, maxSearchDist); // look from a bit higher pos to find the floor
1207 }
1208
1209 // mapHeight set for any above raw ground Z or <= INVALID_HEIGHT
1210 // vmapheight set for any under Z value or <= INVALID_HEIGHT
1211 if (vmapHeight > INVALID_HEIGHT)
1212 {
1213 if (mapHeight > INVALID_HEIGHT)
1214 {
1215 // we have mapheight and vmapheight and must select more appropriate
1216
1217 // we are already under the surface or vmap height above map heigt
1218 // or if the distance of the vmap height is less the land height distance
1219 if (vmapHeight > mapHeight || std::fabs(mapHeight - z) > std::fabs(vmapHeight - z))
1220 return vmapHeight;
1221 else
1222 return mapHeight; // better use .map surface height
1223 }
1224 else
1225 return vmapHeight; // we have only vmapHeight (if have)
1226 }
1227
1228 return mapHeight; // explicitly use map data
1229}
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(), spell_svalna_revive_champion::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
1647{
1648 float h1, h2;
1649 h1 = GetHeight(x, y, z, vmap, maxSearchDist);
1650 h2 = _dynamicTree.getHeight(x, y, z, maxSearchDist, phasemask);
1651 return std::max<float>(h1, h2);
1652}
float GetHeight(float x, float y, float z, bool checkVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
Definition Map.cpp:1194

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

◆ GetId()

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

References i_mapEntry, and MapEntry::MapID.

Referenced by Group::_cancelHomebindIfInstance(), AddObjectToRemoveList(), AddObjectToSwitchList(), InstanceMap::AddPlayerToMap(), WorldState::BuffAdalsSongOfBattle(), WorldState::BuffMagtheridonTeam(), spell_gen_consumption::CalculateDamage(), 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(), WorldState::DispelAdalsSongOfBattle(), WorldState::DispelMagtheridonTeam(), CreatureAI::DoZoneInCombat(), GetAreaInfo(), GetDebugInfo(), GetFullTerrainStatusForPosition(), GetHeight(), GetLiquidData(), GetMapDifficulty(), debug_commandscript::HandleDebugObjectCountMap(), spell_valkyr_touch_aura::HandleEffectPeriodic(), 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(), InstanceScript::IsTwoFactionInstance(), GridObjectLoader::LoadAllCellsInGrid(), LoadCorpseData(), GridTerrainLoader::LoadMap(), GridTerrainLoader::LoadMMap(), LoadRespawnTimes(), GridTerrainLoader::LoadVMap(), LogEncounterFinished(), AchievementCriteriaData::Meets(), MotionMaster::MoveFall(), lfg::LFGPlayerScript::OnPlayerMapChanged(), InstanceMap::PermBindAllPlayers(), RemoveAllPlayers(), RemoveCreatureRespawnTime(), RemoveGORespawnTime(), InstanceMap::Reset(), Player::RewardReputation(), SaveCreatureRespawnTime(), SaveGORespawnTime(), InstanceMap::SendResetWarnings(), World::SetInitialWorldSettings(), WorldObject::SetMap(), Player::SetMover(), SummonCreatureGroup(), MotionTransport::TeleportTransport(), UnloadGrid(), GridTerrainUnloader::UnloadTerrain(), Update(), UpdateEncounterState(), and ~Map().

◆ GetInstanceId()

◆ GetInstanceResetPeriod()

time_t Map::GetInstanceResetPeriod ( ) const
inline

◆ GetLinkedRespawnTime()

time_t Map::GetLinkedRespawnTime ( ObjectGuid  guid) const
2766{
2767 ObjectGuid linkedGuid = sObjectMgr->GetLinkedRespawnGuid(guid);
2768 switch (linkedGuid.GetHigh())
2769 {
2770 case HighGuid::Unit:
2771 return GetCreatureRespawnTime(linkedGuid.GetCounter());
2773 return GetGORespawnTime(linkedGuid.GetCounter());
2774 default:
2775 break;
2776 }
2777
2778 return time_t(0);
2779}
#define sObjectMgr
Definition ObjectMgr.h:1636
time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:420
time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:429
Definition ObjectGuid.h:118
HighGuid GetHigh() const
Definition ObjectGuid.h:143

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

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

◆ GetLiquidData()

LiquidData const Map::GetLiquidData ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight,
uint8  ReqLiquidType 
)
1356{
1357 LiquidData liquidData;
1358
1360 float liquid_level = INVALID_HEIGHT;
1361 float ground_level = INVALID_HEIGHT;
1362 uint32 liquid_type = 0;
1363 uint32 mogpFlags = 0;
1364 bool useGridLiquid = true;
1365 if (vmgr->GetLiquidLevel(GetId(), x, y, z, ReqLiquidType, liquid_level, ground_level, liquid_type, mogpFlags))
1366 {
1367 useGridLiquid = !IsInWMOInterior(mogpFlags);
1368 LOG_DEBUG("maps", "GetLiquidStatus(): vmap liquid level: {} ground: {} type: {}", liquid_level, ground_level, liquid_type);
1369 // Check water level and ground level
1370 if (liquid_level > ground_level && G3D::fuzzyGe(z, ground_level - GROUND_HEIGHT_TOLERANCE))
1371 {
1372 // hardcoded in client like this
1373 if (GetId() == 530 && liquid_type == 2)
1374 liquid_type = 15;
1375
1376 uint32 liquidFlagType = 0;
1377 if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(liquid_type))
1378 liquidFlagType = liq->Type;
1379
1380 if (liquid_type && liquid_type < 21)
1381 {
1382 if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(GetAreaId(phaseMask, x, y, z)))
1383 {
1384 uint32 overrideLiquid = area->LiquidTypeOverride[liquidFlagType];
1385 if (!overrideLiquid && area->zone)
1386 {
1387 area = sAreaTableStore.LookupEntry(area->zone);
1388 if (area)
1389 overrideLiquid = area->LiquidTypeOverride[liquidFlagType];
1390 }
1391
1392 if (LiquidTypeEntry const* liq = sLiquidTypeStore.LookupEntry(overrideLiquid))
1393 {
1394 liquid_type = overrideLiquid;
1395 liquidFlagType = liq->Type;
1396 }
1397 }
1398 }
1399
1400 liquidData.Level = liquid_level;
1401 liquidData.DepthLevel = ground_level;
1402 liquidData.Entry = liquid_type;
1403 liquidData.Flags = 1 << liquidFlagType;
1404 }
1405
1406 float delta = liquid_level - z;
1407
1408 // Get position delta
1409 if (delta > collisionHeight)
1410 liquidData.Status = LIQUID_MAP_UNDER_WATER;
1411 else if (delta > 0.0f)
1412 liquidData.Status = LIQUID_MAP_IN_WATER;
1413 else if (delta > -0.1f)
1414 liquidData.Status = LIQUID_MAP_WATER_WALK;
1415 else
1416 liquidData.Status = LIQUID_MAP_ABOVE_WATER;
1417 }
1418
1419 if (useGridLiquid)
1420 {
1421 if (GridTerrainData* gmap = const_cast<Map*>(this)->GetGridTerrainData(x, y))
1422 {
1423 LiquidData const& map_data = gmap->GetLiquidData(x, y, z, collisionHeight, ReqLiquidType);
1424 // Not override LIQUID_MAP_ABOVE_WATER with LIQUID_MAP_NO_WATER:
1425 if (map_data.Status != LIQUID_MAP_NO_WATER && (map_data.Level > ground_level))
1426 {
1427 // hardcoded in client like this
1428 uint32 liquidEntry = map_data.Entry;
1429 if (GetId() == 530 && liquidEntry == 2)
1430 liquidEntry = 15;
1431
1432 liquidData = map_data;
1433 liquidData.Entry = liquidEntry;
1434 }
1435 }
1436 }
1437
1438 return liquidData;
1439}
uint32 GetAreaId(uint32 phaseMask, float x, float y, float z) const
Definition Map.cpp:1301
virtual bool GetLiquidLevel(uint32 pMapId, float x, float y, float z, uint8 ReqLiquidType, float &level, float &floor, uint32 &type, uint32 &mogpFlags) const =0

References VMAP::VMapFactory::createOrGetVMapMgr(), LiquidData::DepthLevel, LiquidData::Entry, LiquidData::Flags, GetAreaId(), GetGridTerrainData(), 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().

◆ GetLoadedGridsCount()

uint32 Map::GetLoadedGridsCount ( )
3259{
3261}
uint32 GetLoadedGridsCount()
Definition MapGridManager.cpp:93

References _mapGridManager, and MapGridManager::GetLoadedGridsCount().

Referenced by debug_commandscript::HandleDebugMapDataCommand().

◆ GetMapDifficulty()

MapDifficulty const * Map::GetMapDifficulty ( ) const
2394{
2396}
MapDifficulty const * GetMapDifficultyData(uint32 mapId, Difficulty difficulty)
Definition DBCStores.cpp:761

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

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

◆ GetMapGrid()

MapGridType * Map::GetMapGrid ( uint16 const  x,
uint16 const  y 
)
private

◆ GetMapName()

char const * Map::GetMapName ( ) const

◆ GetMinHeight()

float Map::GetMinHeight ( float  x,
float  y 
) const
1240{
1241 if (GridTerrainData const* grid = const_cast<Map*>(this)->GetGridTerrainData(x, y))
1242 return grid->getMinHeight(x, y);
1243
1244 return MIN_HEIGHT;
1245}
#define MIN_HEIGHT
Definition GridTerrainData.h:29

References GetGridTerrainData(), and MIN_HEIGHT.

Referenced by WorldSession::HandleMovementOpcodes().

◆ GetMMapLock()

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

References MMapLock.

◆ 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 
)
1633{
1634 G3D::Vector3 startPos(x1, y1, z1);
1635 G3D::Vector3 dstPos(x2, y2, z2);
1636
1637 G3D::Vector3 resultPos;
1638 bool result = _dynamicTree.GetObjectHitPos(phasemask, startPos, dstPos, resultPos, modifyDist);
1639
1640 rx = resultPos.x;
1641 ry = resultPos.y;
1642 rz = resultPos.z;
1643 return result;
1644}
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
231{ return m_parentMap; }

References m_parentMap.

Referenced by GridTerrainLoader::LoadMap().

◆ GetPet()

Pet * Map::GetPet ( ObjectGuid const  guid)
2509{
2510 return _objectsStore.Find<Pet>(guid);
2511}
Definition Pet.h:41

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

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

◆ GetPlayers()

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

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(), 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::DoSendNotifyToInstance(), ScriptedAI::DoTeleportAll(), boss_icehowl::boss_icehowlAI::DoTrampleIfValid(), 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(), spell_teron_gorefiend_shadowy_construct::HandleEffectApply(), spell_valkyr_touch_aura::HandleEffectPeriodic(), spell_yogg_saron_brain_link_aura::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_ahune::JustDied(), boss_four_horsemen::boss_four_horsemenAI::JustDied(), boss_devourer_of_souls::boss_devourer_of_soulsAI::JustEngagedWith(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), boss_gothik::boss_gothikAI::JustSummoned(), LogEncounterFinished(), WorldSession::LogoutPlayer(), npc_image_of_medivh::npc_image_of_medivhAI::NextStep(), PlayDirectSoundToMap(), 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(), ScriptedAI::SelectTargetFromPlayerList(), CreatureTextMgr::SendChatPacket(), CreatureTextMgr::SendNonChatPacket(), SendPacketToPlayers(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::SendUpdateWorldState(), 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_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_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::Update(), instance_vault_of_archavon::instance_vault_of_archavon_InstanceMapScript::Update(), boss_chromaggus::boss_chromaggusAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::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::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(), 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)

◆ GetTransportForPos()

Transport * Map::GetTransportForPos ( uint32  phase,
float  x,
float  y,
float  z,
WorldObject worldobject = nullptr 
)
1168{
1169 G3D::Vector3 v(x, y, z + 2.0f);
1170 G3D::Ray r(v, G3D::Vector3(0, 0, -1));
1171 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
1172 if ((*itr)->IsInWorld() && (*itr)->GetExactDistSq(x, y, z) < 75.0f * 75.0f && (*itr)->m_model)
1173 {
1174 float dist = 30.0f;
1175 bool hit = (*itr)->m_model->intersectRay(r, dist, false, phase, VMAP::ModelIgnoreFlags::Nothing);
1176 if (hit)
1177 return *itr;
1178 }
1179
1180 if (worldobject)
1181 if (GameObject* staticTrans = worldobject->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_TRANSPORT, 75.0f))
1182 if (staticTrans->m_model)
1183 {
1184 float dist = 10.0f;
1185 bool hit = staticTrans->m_model->intersectRay(r, dist, false, phase, VMAP::ModelIgnoreFlags::Nothing);
1186 if (hit)
1187 if (GetHeight(phase, x, y, z, true, 30.0f) < (v.z - dist + 1.0f))
1188 return staticTrans->ToTransport();
1189 }
1190
1191 return nullptr;
1192}
@ GAMEOBJECT_TYPE_TRANSPORT
Definition SharedDefines.h:1571
phase
Definition boss_skadi.cpp:103
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
Definition Object.cpp:2477

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
1585{
1586 if (GridTerrainData* gmap = const_cast<Map*>(this)->GetGridTerrainData(x, y))
1587 return gmap->getLiquidLevel(x, y);
1588
1589 return INVALID_HEIGHT;
1590}

References GetGridTerrainData(), and INVALID_HEIGHT.

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
1147{
1148 // we need ground level (including grid height version) for proper return water level in point
1149 float ground_z = GetHeight(phasemask, x, y, z + Z_OFFSET_FIND_HEIGHT, true, 50.0f);
1150 if (ground)
1151 *ground = ground_z;
1152
1153 LiquidData const& liquidData = const_cast<Map*>(this)->GetLiquidData(phasemask, x, y, ground_z, collisionHeight, MAP_ALL_LIQUIDS);
1154 switch (liquidData.Status)
1155 {
1157 return std::max<float>(liquidData.Level, ground_z);
1159 return ground_z;
1160 default:
1161 return liquidData.Level;
1162 }
1163
1165}
#define MAP_ALL_LIQUIDS
Definition GridTerrainData.h:40
constexpr float Z_OFFSET_FIND_HEIGHT
Definition SharedDefines.h:27
LiquidData const GetLiquidData(uint32 phaseMask, float x, float y, float z, float collisionHeight, uint8 ReqLiquidType)
Definition Map.cpp:1355

References 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
1348{
1349 areaid = zoneid = GetAreaId(phaseMask, x, y, z);
1350 if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaid))
1351 if (area->zone)
1352 zoneid = area->zone;
1353}

References GetAreaId(), and sAreaTableStore.

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

◆ GetZoneId()

uint32 Map::GetZoneId ( uint32  phaseMask,
float  x,
float  y,
float  z 
) const
1338{
1339 uint32 areaId = GetAreaId(phaseMask, x, y, z);
1340 if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId))
1341 if (area->zone)
1342 return area->zone;
1343
1344 return areaId;
1345}

References GetAreaId(), and sAreaTableStore.

Referenced by MapMgr::GetZoneId().

◆ HandleDelayedVisibility()

void Map::HandleDelayedVisibility ( )
732{
734 return;
735 for (std::unordered_set<Unit*>::iterator itr = i_objectsForDelayedVisibility.begin(); itr != i_objectsForDelayedVisibility.end(); ++itr)
736 (*itr)->ExecuteDelayedUnitRelocationEvent();
738}
std::unordered_set< Unit * > i_objectsForDelayedVisibility
Definition Map.h:236

References i_objectsForDelayedVisibility.

Referenced by Update().

◆ HasEnoughWater() [1/2]

bool Map::HasEnoughWater ( WorldObject const *  searcher,
float  x,
float  y,
float  z 
) const
1667{
1668 LiquidData const& liquidData = const_cast<Map*>(this)->GetLiquidData(
1669 searcher->GetPhaseMask(), x, y, z, searcher->GetCollisionHeight(), MAP_ALL_LIQUIDS);
1670
1671 if ((liquidData.Status & MAP_LIQUID_STATUS_SWIMMING) == 0)
1672 return false;
1673
1674 float minHeightInWater = searcher->GetMinHeightInWater();
1675 return liquidData.Level > INVALID_HEIGHT &&
1676 liquidData.Level > liquidData.DepthLevel &&
1677 liquidData.Level - liquidData.DepthLevel >= minHeightInWater;
1678}
#define MAP_LIQUID_STATUS_SWIMMING
Definition GridTerrainData.h:31

References LiquidData::DepthLevel, WorldObject::GetCollisionHeight(), GetLiquidData(), WorldObject::GetMinHeightInWater(), WorldObject::GetPhaseMask(), INVALID_HEIGHT, LiquidData::Level, MAP_ALL_LIQUIDS, MAP_LIQUID_STATUS_SWIMMING, and LiquidData::Status.

Referenced by CanReachPositionAndGetValidCoords().

◆ HasEnoughWater() [2/2]

bool Map::HasEnoughWater ( WorldObject const *  searcher,
LiquidData const &  liquidData 
) const

◆ HavePlayers()

◆ InitializeObject() [1/3]

template<>
void Map::InitializeObject ( Creature )
383{
384 //obj->_moveState = MAP_OBJECT_CELL_MOVE_NONE;
385}

◆ InitializeObject() [2/3]

template<>
void Map::InitializeObject ( GameObject )
389{
390 //obj->_moveState = MAP_OBJECT_CELL_MOVE_NONE;
391}

◆ InitializeObject() [3/3]

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

Referenced by AddToMap().

◆ InitVisibilityDistance()

void Map::InitVisibilityDistance ( )
virtual

Reimplemented in InstanceMap, BattlegroundMap, and MapInstanced.

99{
100 //init visibility for continents
102
103 switch (GetId())
104 {
105 case 609: // Scarlet Enclave (DK starting zone)
106 m_VisibleDistance = 125.0f;
107 break;
108 case 25: // Scott Test (box map)
109 m_VisibleDistance = 200.0f;
110 break;
111 }
112}
static float GetMaxVisibleDistanceOnContinents()
Definition World.h:253

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

Referenced by MapInstanced::InitVisibilityDistance(), and Map().

◆ InsertGameObjectModel()

void Map::InsertGameObjectModel ( const GameObjectModel model)
inline
408{ _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

◆ IsBattleArena()

◆ IsBattleground()

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

References i_mapEntry, and MapEntry::IsBattleground().

Referenced by SpellMgr::GetSpellIdForDifficulty(), and AuraEffect::HandleAuraDummy().

◆ IsBattlegroundOrArena()

◆ isCellMarked()

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

References marked_cells.

Referenced by VisitNearbyCellsOf().

◆ isCellMarkedLarge()

bool Map::isCellMarkedLarge ( uint32  pCellId)
inline
321{ 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:579

References marked_cells_large.

Referenced by VisitNearbyCellsOf(), and VisitNearbyCellsOfPlayer().

◆ IsDungeon()

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

References i_mapEntry, and MapEntry::IsDungeon().

Referenced by Group::_cancelHomebindIfInstance(), Group::_homebindIfInstance(), InstanceSaveMgr::_ResetOrWarnAll(), InstanceMap::AddPlayerToMap(), GameObject::AddToSkillupList(), Spell::CheckCast(), 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(), Player::SetEntryPoint(), Creature::SetLootRecipient(), lfg::LFGMgr::TeleportPlayer(), ToInstanceMap(), ToInstanceMap(), and AchievementMgr::UpdateAchievementCriteria().

◆ IsGridCreated() [1/2]

bool Map::IsGridCreated ( float  x,
float  y 
) const
inline
215 {
217 }
bool IsGridCreated(GridCoord const &gridCoord) const
Definition Map.cpp:296

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

◆ IsGridCreated() [2/2]

bool Map::IsGridCreated ( GridCoord const &  gridCoord) const
297{
298 return _mapGridManager.IsGridCreated(gridCoord.x_coord, gridCoord.y_coord);
299}
bool IsGridCreated(uint16 const x, uint16 const y) const
Definition MapGridManager.cpp:64

References _mapGridManager, MapGridManager::IsGridCreated(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by IsGridCreated().

◆ IsGridLoaded() [1/2]

bool Map::IsGridLoaded ( float  x,
float  y 
) const
inline
210 {
212 }

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

◆ IsGridLoaded() [2/2]

◆ IsHeroic()

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

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

Referenced by spell_svala_ritual_strike_aura::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::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_tomb(), 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_aura::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
1593{
1594 if (!sWorld->getBoolConfig(CONFIG_VMAP_BLIZZLIKE_PVP_LOS))
1595 {
1597 {
1598 ignoreFlags = VMAP::ModelIgnoreFlags::Nothing;
1599 }
1600 }
1601
1602 if (!sWorld->getBoolConfig(CONFIG_VMAP_BLIZZLIKE_LOS_OPEN_WORLD))
1603 {
1604 if (IsWorldMap())
1605 {
1606 ignoreFlags = VMAP::ModelIgnoreFlags::Nothing;
1607 }
1608 }
1609
1610 if ((checks & LINEOFSIGHT_CHECK_VMAP) && !VMAP::VMapFactory::createOrGetVMapMgr()->isInLineOfSight(GetId(), x1, y1, z1, x2, y2, z2, ignoreFlags))
1611 {
1612 return false;
1613 }
1614
1615 if (sWorld->getBoolConfig(CONFIG_CHECK_GOBJECT_LOS) && (checks & LINEOFSIGHT_CHECK_GOBJECT_ALL))
1616 {
1617 ignoreFlags = VMAP::ModelIgnoreFlags::Nothing;
1618 if (!(checks & LINEOFSIGHT_CHECK_GOBJECT_M2))
1619 {
1620 ignoreFlags = VMAP::ModelIgnoreFlags::M2;
1621 }
1622
1623 if (!_dynamicTree.isInLineOfSight(x1, y1, z1, x2, y2, z2, phasemask, ignoreFlags))
1624 {
1625 return false;
1626 }
1627 }
1628
1629 return true;
1630}
@ CONFIG_CHECK_GOBJECT_LOS
Definition IWorld.h:152
@ CONFIG_VMAP_BLIZZLIKE_LOS_OPEN_WORLD
Definition IWorld.h:174
@ CONFIG_VMAP_BLIZZLIKE_PVP_LOS
Definition IWorld.h:173
@ LINEOFSIGHT_CHECK_GOBJECT_M2
Definition Map.h:102
@ LINEOFSIGHT_CHECK_VMAP
Definition Map.h:100
@ LINEOFSIGHT_CHECK_GOBJECT_ALL
Definition Map.h:104
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 IsWorldMap() const
Definition Map.h:304
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:1592

References _dynamicTree, CONFIG_CHECK_GOBJECT_LOS, CONFIG_VMAP_BLIZZLIKE_LOS_OPEN_WORLD, CONFIG_VMAP_BLIZZLIKE_PVP_LOS, VMAP::VMapFactory::createOrGetVMapMgr(), GetId(), IsBattlegroundOrArena(), isInLineOfSight(), DynamicMapTree::isInLineOfSight(), IsWorldMap(), 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::MoveInLineOfSight(), spell_blood_council_summon_shadow_resonance::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
296{ return i_mapEntry && i_mapEntry->IsNonRaidDungeon(); }
bool IsNonRaidDungeon() const
Definition DBCStructure.h:1351

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:269

References DUNGEON_DIFFICULTY_NORMAL, i_spawnMode, and IsRaid().

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

◆ IsRegularDifficulty()

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

References GetDifficulty(), and REGULAR_DIFFICULTY.

◆ IsUnderWater()

bool Map::IsUnderWater ( uint32  phaseMask,
float  x,
float  y,
float  z,
float  collisionHeight 
) const
1661{
1662 LiquidData const& liquidData = const_cast<Map*>(this)->GetLiquidData(phaseMask, x, y, z, collisionHeight, MAP_LIQUID_TYPE_WATER | MAP_LIQUID_TYPE_OCEAN);
1663 return liquidData.Status == LIQUID_MAP_UNDER_WATER;
1664}
#define MAP_LIQUID_TYPE_WATER
Definition GridTerrainData.h:35
#define MAP_LIQUID_TYPE_OCEAN
Definition GridTerrainData.h:36

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

Referenced by WorldSession::HandleMovementOpcodes().

◆ IsWorldMap()

bool Map::IsWorldMap ( ) const
inline
304{ return i_mapEntry && i_mapEntry->IsWorldMap(); }
bool IsWorldMap() const
Definition DBCStructure.h:1357

References i_mapEntry, and MapEntry::IsWorldMap().

Referenced by isInLineOfSight().

◆ LoadAllGrids()

void Map::LoadAllGrids ( )
307{
308 for (uint32 cellX = 0; cellX < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellX++)
309 for (uint32 cellY = 0; cellY < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellY++)
311}
#define TOTAL_NUMBER_OF_CELLS_PER_MAP
Definition GridDefines.h:47
#define CENTER_GRID_CELL_ID
Definition GridDefines.h:44
#define SIZE_OF_GRID_CELL
Definition GridDefines.h:42
void LoadGrid(float x, float y)
Definition Map.cpp:301

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

Referenced by OnCreateMap(), and World::SetInitialWorldSettings().

◆ LoadCorpseData()

void Map::LoadCorpseData ( )
3199{
3201 stmt->SetData(0, GetId());
3202 stmt->SetData(1, GetInstanceId());
3203
3204 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
3205 // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ?
3206 PreparedQueryResult result = CharacterDatabase.Query(stmt);
3207 if (!result)
3208 return;
3209
3210 do
3211 {
3212 Field* fields = result->Fetch();
3213 CorpseType type = CorpseType(fields[13].Get<uint8>());
3214 uint32 guid = fields[16].Get<uint32>();
3215 if (type >= MAX_CORPSE_TYPE || type == CORPSE_BONES)
3216 {
3217 LOG_ERROR("maps", "Corpse (guid: {}) have wrong corpse type ({}), not loading.", guid, type);
3218 continue;
3219 }
3220
3221 Corpse* corpse = new Corpse(type);
3222
3223 if (!corpse->LoadCorpseFromDB(GenerateLowGuid<HighGuid::Corpse>(), fields))
3224 {
3225 delete corpse;
3226 continue;
3227 }
3228
3229 AddCorpse(corpse);
3230
3231 corpse->UpdatePositionData();
3232 } while (result->NextRow());
3233}
@ CHAR_SEL_CORPSES
Definition CharacterDatabase.h:246
CorpseType
Definition Corpse.h:27
#define MAX_CORPSE_TYPE
Definition Corpse.h:32
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field *fields)
Definition Corpse.cpp:131
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112

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().

◆ LoadGrid()

◆ LoadGridsInRange()

void Map::LoadGridsInRange ( Position const &  center,
float  radius 
)
314{
316 return;
317
318 float const x = center.GetPositionX();
319 float const y = center.GetPositionY();
320
321 CellCoord cellCoord(Acore::ComputeCellCoord(x, y));
322 if (!cellCoord.IsCoordValid())
323 return;
324
325 if (radius > SIZE_OF_GRIDS)
326 radius = SIZE_OF_GRIDS;
327
328 CellArea area = Cell::CalculateCellArea(x, y, radius);
329 if (!area)
330 return;
331
332 for (uint32 x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x)
333 {
334 for (uint32 y = area.low_bound.y_coord; y <= area.high_bound.y_coord; ++y)
335 {
336 CellCoord cellCoord(x, y);
337 Cell cell(cellCoord);
338 EnsureGridLoaded(cell);
339 }
340 }
341}
#define SIZE_OF_GRIDS
Definition MapDefines.h:26
bool IsGridsFullyLoaded() const
Definition MapGridManager.cpp:126
Definition Cell.h:28
CellCoord high_bound
Definition Cell.h:41
CellCoord low_bound
Definition Cell.h:40
static CellArea CalculateCellArea(float x, float y, float radius)
Definition CellImpl.h:42

References _mapGridManager, Cell::CalculateCellArea(), Acore::ComputeCellCoord(), EnsureGridLoaded(), Position::GetPositionX(), Position::GetPositionY(), CellArea::high_bound, CoordPair< LIMIT >::IsCoordValid(), MapGridManager::IsGridsFullyLoaded(), CellArea::low_bound, SIZE_OF_GRIDS, CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by AddPlayerToMap(), and Unit::ExecuteDelayedUnitRelocationEvent().

◆ LoadRespawnTimes()

void Map::LoadRespawnTimes ( )
2602{
2604 stmt->SetData(0, GetId());
2605 stmt->SetData(1, GetInstanceId());
2606 if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
2607 {
2608 do
2609 {
2610 Field* fields = result->Fetch();
2611 ObjectGuid::LowType lowguid = fields[0].Get<uint32>();
2612 uint32 respawnTime = fields[1].Get<uint32>();
2613
2614 _creatureRespawnTimes[lowguid] = time_t(respawnTime);
2615 } while (result->NextRow());
2616 }
2617
2618 stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GO_RESPAWNS);
2619 stmt->SetData(0, GetId());
2620 stmt->SetData(1, GetInstanceId());
2621 if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
2622 {
2623 do
2624 {
2625 Field* fields = result->Fetch();
2626 ObjectGuid::LowType lowguid = fields[0].Get<uint32>();
2627 uint32 respawnTime = fields[1].Get<uint32>();
2628
2629 _goRespawnTimes[lowguid] = time_t(respawnTime);
2630 } while (result->NextRow());
2631 }
2632}
@ CHAR_SEL_CREATURE_RESPAWNS
Definition CharacterDatabase.h:252
@ CHAR_SEL_GO_RESPAWNS
Definition CharacterDatabase.h:257

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

Referenced by MapMgr::CreateBaseMap().

◆ LogEncounterFinished()

void Map::LogEncounterFinished ( EncounterCreditType  type,
uint32  creditEntry 
)
2721{
2722 if (!IsRaid() || !GetEntry() || GetEntry()->Expansion() < 2) // only for wotlk raids, because logs take up tons of mysql memory
2723 return;
2724 InstanceMap* map = ToInstanceMap();
2725 if (!map)
2726 return;
2727 std::string playersInfo;
2728 char buffer[16384], buffer2[255];
2729 Map::PlayerList const& pl = map->GetPlayers();
2730 for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
2731 if (Player* p = itr->GetSource())
2732 {
2733 std::string auraStr;
2734 const Unit::AuraApplicationMap& a = p->GetAppliedAuras();
2735 for (auto iterator = a.begin(); iterator != a.end(); ++iterator)
2736 {
2737 snprintf(buffer2, 255, "%u(%u) ", iterator->first, iterator->second->GetEffectMask());
2738 auraStr += buffer2;
2739 }
2740
2741 snprintf(buffer, 16384, "%s (%s, acc: %u, ip: %s, guild: %u), xyz: (%.1f, %.1f, %.1f), auras: %s\n",
2742 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());
2743 playersInfo += buffer;
2744 }
2745 CleanStringForMysqlQuery(playersInfo);
2746 CharacterDatabase.Execute("INSERT INTO log_encounter VALUES(NOW(), {}, {}, {}, {}, '{}')", GetId(), (uint32)GetDifficulty(), type, creditEntry, playersInfo);
2747}
void CleanStringForMysqlQuery(std::string &str)
Definition Common.cpp:61
LinkedListHead::Iterator< GridReference< MapGridType > > iterator
Definition GridRefMgr.h:30
Definition Map.h:652
Definition MapRefMgr.h:26
InstanceMap * ToInstanceMap()
Definition Map.h:393
std::multimap< uint32, AuraApplication * > AuraApplicationMap
Definition Unit.h:645

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

Referenced by UpdateEncounterState().

◆ markCell()

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

References marked_cells.

Referenced by VisitNearbyCellsOf().

◆ markCellLarge()

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

References marked_cells_large.

Referenced by VisitNearbyCellsOf(), and VisitNearbyCellsOfPlayer().

◆ MoveAllCreaturesInMoveList()

void Map::MoveAllCreaturesInMoveList ( )
968{
969 for (std::vector<Creature*>::iterator itr = _creaturesToMove.begin(); itr != _creaturesToMove.end(); ++itr)
970 {
971 Creature* c = *itr;
972 if (c->FindMap() != this)
973 continue;
974
976 {
978 continue;
979 }
980
982 if (!c->IsInWorld())
983 continue;
984
985 Cell const& old_cell = c->GetCurrentCell();
986 Cell new_cell(c->GetPositionX(), c->GetPositionY());
987
988 c->RemoveFromGrid();
989 if (old_cell.DiffGrid(new_cell))
990 EnsureGridLoaded(new_cell);
991 AddToGrid(c, new_cell);
992 }
993 _creaturesToMove.clear();
994}
void RemoveFromGrid()
Definition Object.h:356
Map * FindMap() const
Definition Object.h:537

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 ( )
1026{
1027 for (std::vector<DynamicObject*>::iterator itr = _dynamicObjectsToMove.begin(); itr != _dynamicObjectsToMove.end(); ++itr)
1028 {
1029 DynamicObject* dynObj = *itr;
1030 if (dynObj->FindMap() != this)
1031 continue;
1032
1034 {
1036 continue;
1037 }
1038
1040 if (!dynObj->IsInWorld())
1041 continue;
1042
1043 Cell const& old_cell = dynObj->GetCurrentCell();
1044 Cell new_cell(dynObj->GetPositionX(), dynObj->GetPositionY());
1045
1046 dynObj->RemoveFromGrid();
1047 if (old_cell.DiffGrid(new_cell))
1048 EnsureGridLoaded(new_cell);
1049 AddToGrid(dynObj, new_cell);
1050 }
1051 _dynamicObjectsToMove.clear();
1052}

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 ( )
997{
998 for (std::vector<GameObject*>::iterator itr = _gameObjectsToMove.begin(); itr != _gameObjectsToMove.end(); ++itr)
999 {
1000 GameObject* go = *itr;
1001 if (go->FindMap() != this)
1002 continue;
1003
1005 {
1007 continue;
1008 }
1009
1011 if (!go->IsInWorld())
1012 continue;
1013
1014 Cell const& old_cell = go->GetCurrentCell();
1015 Cell new_cell(go->GetPositionX(), go->GetPositionY());
1016
1017 go->RemoveFromGrid();
1018 if (old_cell.DiffGrid(new_cell))
1019 EnsureGridLoaded(new_cell);
1020 AddToGrid(go, new_cell);
1021 }
1022 _gameObjectsToMove.clear();
1023}

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().

◆ OnCreateMap()

void Map::OnCreateMap ( )
90{
91 // Instances load all grids by default (both base map and child maps)
92 if (GetInstanceId())
94
95 sScriptMgr->OnCreateMap(this);
96}
void LoadAllGrids()
Definition Map.cpp:306

References GetInstanceId(), LoadAllGrids(), and sScriptMgr.

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

◆ PlayDirectSoundToMap()

void Map::PlayDirectSoundToMap ( uint32  soundId,
uint32  zoneId = 0 
)
2929{
2930 Map::PlayerList const& players = GetPlayers();
2931 if (!players.IsEmpty())
2932 {
2934 data << uint32(soundId);
2935
2936 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2937 if (Player* player = itr->GetSource())
2938 if (!zoneId || player->GetZoneId() == zoneId)
2939 player->SendDirectMessage(&data);
2940 }
2941}
@ SMSG_PLAY_SOUND
Definition Opcodes.h:752

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

Referenced by instance_naxxramas::Update().

◆ PlayerRelocation()

void Map::PlayerRelocation ( Player player,
float  x,
float  y,
float  z,
float  o 
)
844{
845 Cell old_cell(player->GetPositionX(), player->GetPositionY());
846 Cell new_cell(x, y);
847
848 if (old_cell.DiffGrid(new_cell) || old_cell.DiffCell(new_cell))
849 {
850 player->RemoveFromGrid();
851
852 if (old_cell.DiffGrid(new_cell))
853 EnsureGridLoaded(new_cell);
854
855 AddToGrid(player, new_cell);
856 }
857
858 player->Relocate(x, y, z, o);
859 if (player->IsVehicle())
861 player->UpdatePositionData();
862 player->UpdateObjectVisibility(false);
863}

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 ( )
1861{
1862 while (!i_objectsToSwitch.empty())
1863 {
1864 std::map<WorldObject*, bool>::iterator itr = i_objectsToSwitch.begin();
1865 WorldObject* obj = itr->first;
1866 bool on = itr->second;
1867 i_objectsToSwitch.erase(itr);
1868
1869 if (!obj->IsPermanentWorldObject())
1870 {
1871 switch (obj->GetTypeId())
1872 {
1873 case TYPEID_UNIT:
1874 SwitchGridContainers<Creature>(obj->ToCreature(), on);
1875 break;
1876 case TYPEID_GAMEOBJECT:
1877 SwitchGridContainers<GameObject>(obj->ToGameObject(), on);
1878 break;
1879 default:
1880 break;
1881 }
1882 }
1883 }
1884
1885 //LOG_DEBUG("maps", "Object remover 1 check.");
1886 while (!i_objectsToRemove.empty())
1887 {
1888 std::unordered_set<WorldObject*>::iterator itr = i_objectsToRemove.begin();
1889 WorldObject* obj = *itr;
1890 i_objectsToRemove.erase(itr);
1891
1892 switch (obj->GetTypeId())
1893 {
1894 case TYPEID_CORPSE:
1895 {
1896 Corpse* corpse = ObjectAccessor::GetCorpse(*obj, obj->GetGUID());
1897 if (!corpse)
1898 LOG_ERROR("maps", "Tried to delete corpse/bones {} that is not in map.", obj->GetGUID().ToString());
1899 else
1900 RemoveFromMap(corpse, true);
1901 break;
1902 }
1904 RemoveFromMap((DynamicObject*)obj, true);
1905 break;
1906 case TYPEID_GAMEOBJECT:
1907 if (MotionTransport* transport = obj->ToGameObject()->ToMotionTransport())
1908 RemoveFromMap(transport, true);
1909 else
1910 RemoveFromMap(obj->ToGameObject(), true);
1911 break;
1912 case TYPEID_UNIT:
1913 // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
1914 // make sure that like sources auras/etc removed before destructor start
1916 RemoveFromMap(obj->ToCreature(), true);
1917 break;
1918 default:
1919 LOG_ERROR("maps", "Non-grid object (TypeId: {}) is in grid object remove list, ignored.", obj->GetTypeId());
1920 break;
1921 }
1922 }
1923
1924 //LOG_DEBUG("maps", "Object remover 2 check.");
1925}
@ TYPEID_DYNAMICOBJECT
Definition ObjectGuid.h:38
@ TYPEID_GAMEOBJECT
Definition ObjectGuid.h:37
@ TYPEID_UNIT
Definition ObjectGuid.h:35
@ TYPEID_CORPSE
Definition ObjectGuid.h:39
MotionTransport * ToMotionTransport()
Definition GameObject.h:326
void RemoveFromMap(T *, bool)
Definition Map.cpp:782
void CleanupsBeforeDelete(bool finalCleanup=true) override
Definition Unit.cpp:15823
bool IsPermanentWorldObject() const
Definition Object.h:586
Corpse * GetCorpse(WorldObject const &u, ObjectGuid const guid)
Definition ObjectAccessor.cpp:179

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 MapGridManager::UnloadGrid().

◆ RemoveAllPlayers()

void Map::RemoveAllPlayers ( )
virtual

Reimplemented in BattlegroundMap.

1064{
1065 if (HavePlayers())
1066 {
1067 for (MapRefMgr::iterator itr = m_mapRefMgr.begin(); itr != m_mapRefMgr.end(); ++itr)
1068 {
1069 Player* player = itr->GetSource();
1070 if (!player->IsBeingTeleportedFar())
1071 {
1072 // this is happening for bg
1073 LOG_ERROR("maps", "Map::UnloadAll: player {} is still in map {} during unload, this should not happen!", player->GetName(), GetId());
1074 player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
1075 }
1076 }
1077 }
1078}
float m_homebindZ
Definition Player.h:2381
bool IsBeingTeleportedFar() const
Definition Player.h:2100
uint32 m_homebindMapId
Definition Player.h:2377
float m_homebindY
Definition Player.h:2380
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1338
float m_homebindX
Definition Player.h:2379
std::string const & GetName() const
Definition Object.h:463

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

◆ RemoveCorpse()

void Map::RemoveCorpse ( Corpse corpse)
2793{
2794 ASSERT(corpse);
2795
2796 corpse->DestroyForNearbyPlayers();
2797 if (corpse->IsInGrid())
2798 RemoveFromMap(corpse, false);
2799 else
2800 {
2801 corpse->RemoveFromWorld();
2802 corpse->ResetMap();
2803 }
2804
2805 _corpsesByCell[corpse->GetCellCoord().GetId()].erase(corpse);
2806 if (corpse->GetType() != CORPSE_BONES)
2807 _corpsesByPlayer.erase(corpse->GetOwnerGUID());
2808 else
2809 _corpseBones.erase(corpse);
2810}
void RemoveFromWorld() override
Definition Corpse.cpp:52
bool IsInGrid() const
Definition Object.h:354
void DestroyForNearbyPlayers()
Definition Object.cpp:2955

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)
2557{
2558 _creatureRespawnTimes.erase(spawnId);
2559
2561 stmt->SetData(0, spawnId);
2562 stmt->SetData(1, GetId());
2563 stmt->SetData(2, GetInstanceId());
2564 CharacterDatabase.Execute(stmt);
2565}
@ CHAR_DEL_CREATURE_RESPAWN
Definition CharacterDatabase.h:254

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

◆ RemoveFromActive() [1/4]

template<>
void Map::RemoveFromActive ( Creature c)
1974{
1976}
void RemoveFromActiveHelper(WorldObject *obj)
Definition Map.h:597

References RemoveFromActiveHelper().

◆ RemoveFromActive() [2/4]

template<>
void Map::RemoveFromActive ( DynamicObject obj)
1980{
1982}

References RemoveFromActiveHelper().

◆ RemoveFromActive() [3/4]

template<>
void Map::RemoveFromActive ( GameObject obj)
1986{
1988}

References RemoveFromActiveHelper().

◆ RemoveFromActive() [4/4]

template<class T >
void Map::RemoveFromActive ( T *  obj)

◆ RemoveFromActiveHelper()

void Map::RemoveFromActiveHelper ( WorldObject obj)
inlineprivate
598 {
599 // Map::Update for active object in proccess
601 {
602 ActiveNonPlayers::iterator itr = m_activeNonPlayers.find(obj);
603 if (itr == m_activeNonPlayers.end())
604 return;
605 if (itr == m_activeNonPlayersIter)
607 m_activeNonPlayers.erase(itr);
608 }
609 else
610 m_activeNonPlayers.erase(obj);
611 }

References m_activeNonPlayers, and m_activeNonPlayersIter.

Referenced by RemoveFromActive(), RemoveFromActive(), RemoveFromActive(), and RemoveFromActive().

◆ RemoveFromMap() [1/2]

template<>
void Map::RemoveFromMap ( MotionTransport obj,
bool  remove 
)
803{
804 obj->RemoveFromWorld();
805 if (obj->isActiveObject())
806 RemoveFromActive(obj);
807
808 Map::PlayerList const& players = GetPlayers();
809 if (!players.IsEmpty())
810 {
811 UpdateData data;
812 obj->BuildOutOfRangeUpdateBlock(&data);
813 WorldPacket packet;
814 data.BuildPacket(packet);
815 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
816 if (itr->GetSource()->GetTransport() != obj)
817 itr->GetSource()->SendDirectMessage(&packet);
818 }
819
821 {
822 TransportsContainer::iterator itr = _transports.find(obj);
823 if (itr == _transports.end())
824 return;
825 if (itr == _transportsUpdateIter)
827 _transports.erase(itr);
828 }
829 else
830 _transports.erase(obj);
831
832 obj->ResetMap();
833
834 if (remove)
835 {
836 // if option set then object already saved at this moment
837 if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
838 obj->SaveRespawnTime();
839 DeleteFromWorld(obj);
840 }
841}
@ CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY
Definition IWorld.h:91
void RemoveFromWorld() override
Definition GameObject.cpp:168
void SaveRespawnTime() override
Definition GameObject.h:243
void RemoveFromActive(T *obj)
Definition Map.cpp:1967
void DeleteFromWorld(T *)
Definition Map.cpp:253
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
Definition Object.cpp:269

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 
)
783{
784 bool inWorld = obj->IsInWorld() && obj->GetTypeId() >= TYPEID_UNIT && obj->GetTypeId() <= TYPEID_GAMEOBJECT;
785 obj->RemoveFromWorld();
786
787 if (obj->isActiveObject())
788 RemoveFromActive(obj);
789
790 if (!inWorld) // pussywizard: if was in world, RemoveFromWorld() called DestroyForNearbyPlayers()
791 obj->DestroyForNearbyPlayers(); // pussywizard: previous player->UpdateObjectVisibility()
792
793 obj->RemoveFromGrid();
794
795 obj->ResetMap();
796
797 if (remove)
798 DeleteFromWorld(obj);
799}

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
407{ _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)
2591{
2592 _goRespawnTimes.erase(spawnId);
2593
2595 stmt->SetData(0, spawnId);
2596 stmt->SetData(1, GetId());
2597 stmt->SetData(2, GetInstanceId());
2598 CharacterDatabase.Execute(stmt);
2599}
@ CHAR_DEL_GO_RESPAWN
Definition CharacterDatabase.h:259

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 ( )
2866{
2867 time_t now = GameTime::GetGameTime().count();
2868
2869 std::vector<ObjectGuid> corpses;
2870 corpses.reserve(_corpsesByPlayer.size());
2871
2872 for (auto const& p : _corpsesByPlayer)
2873 if (p.second->IsExpired(now))
2874 corpses.push_back(p.first);
2875
2876 for (ObjectGuid const& ownerGuid : corpses)
2877 ConvertCorpseToBones(ownerGuid);
2878
2879 std::vector<Corpse*> expiredBones;
2880 for (Corpse* bones : _corpseBones)
2881 if (bones->IsExpired(now))
2882 expiredBones.push_back(bones);
2883
2884 for (Corpse* bones : expiredBones)
2885 {
2886 RemoveCorpse(bones);
2887 delete bones;
2888 }
2889}
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.

753{
754 // Before leaving map, update zone/area for stats
755 player->UpdateZone(MAP_INVALID_ZONE, 0);
756 player->getHostileRefMgr().deleteReferences(true); // pussywizard: multithreading crashfix
757
758 bool inWorld = player->IsInWorld();
759 player->RemoveFromWorld();
760 SendRemoveTransports(player);
761
762 if (!inWorld) // pussywizard: if was in world, RemoveFromWorld() called DestroyForNearbyPlayers()
763 player->DestroyForNearbyPlayers(); // pussywizard: previous player->UpdateObjectVisibility(true)
764
765 if (player->IsInGrid())
766 player->RemoveFromGrid();
767 else
768 ASSERT(remove); //maybe deleted in logoutplayer when player is not in a map
769
770 sScriptMgr->OnPlayerLeaveMap(this, player);
771 if (remove)
772 {
773 DeleteFromWorld(player);
774 }
775}
#define MAP_INVALID_ZONE
Definition Map.cpp:47
void deleteReferences(bool removeFromMap=false)
Definition HostileRefMgr.cpp:125
void SendRemoveTransports(Player *player)
Definition Map.cpp:1733
void UpdateZone(uint32 newZone, uint32 newArea, bool force=false)
Definition PlayerUpdates.cpp:1252
void RemoveFromWorld() override
Definition Player.cpp:1718
HostileRefMgr & getHostileRefMgr()
Definition Unit.h:916

References ASSERT, DeleteFromWorld(), HostileRefMgr::deleteReferences(), WorldObject::DestroyForNearbyPlayers(), Unit::getHostileRefMgr(), GridObject< T >::IsInGrid(), Object::IsInWorld(), MAP_INVALID_ZONE, GridObject< T >::RemoveFromGrid(), Player::RemoveFromWorld(), SendRemoveTransports(), sScriptMgr, and Player::UpdateZone().

Referenced by WorldSession::HandleMoveWorldportAck(), WorldSession::HandleSetRaidDifficultyOpcode(), InstanceMap::RemovePlayerFromMap(), BattlegroundMap::RemovePlayerFromMap(), and Player::TeleportTo().

◆ RemoveUpdateObject()

void Map::RemoveUpdateObject ( Object obj)
inline
499 {
500 _updateObjects.erase(obj);
501 }

References _updateObjects.

Referenced by DeleteFromWorld(), and WorldObject::RemoveFromObjectUpdate().

◆ RemoveWorldObject()

void Map::RemoveWorldObject ( WorldObject obj)
inline

◆ resetMarkedCells()

void Map::resetMarkedCells ( )
inline
317{ marked_cells.reset(); }

References marked_cells.

Referenced by Update().

◆ resetMarkedCellsLarge()

void Map::resetMarkedCellsLarge ( )
inline
320{ marked_cells_large.reset(); }

References marked_cells_large.

Referenced by Update().

◆ SaveCreatureRespawnTime()

void Map::SaveCreatureRespawnTime ( ObjectGuid::LowType  dbGuid,
time_t &  respawnTime 
)
2534{
2535 if (!respawnTime)
2536 {
2537 // Delete only
2539 return;
2540 }
2541
2542 time_t now = GameTime::GetGameTime().count();
2543 if (GetInstanceResetPeriod() > 0 && respawnTime - now + 5 >= GetInstanceResetPeriod())
2544 respawnTime = now + YEAR;
2545
2546 _creatureRespawnTimes[spawnId] = respawnTime;
2547
2549 stmt->SetData(0, spawnId);
2550 stmt->SetData(1, uint32(respawnTime));
2551 stmt->SetData(2, GetId());
2552 stmt->SetData(3, GetInstanceId());
2553 CharacterDatabase.Execute(stmt);
2554}
@ CHAR_REP_CREATURE_RESPAWN
Definition CharacterDatabase.h:253
constexpr auto YEAR
Definition Common.h:52
time_t GetInstanceResetPeriod() const
Definition Map.h:444
void RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2556

References _creatureRespawnTimes, CHAR_REP_CREATURE_RESPAWN, CharacterDatabase, GameTime::GetGameTime(), GetId(), GetInstanceId(), GetInstanceResetPeriod(), RemoveCreatureRespawnTime(), PreparedStatementBase::SetData(), and YEAR.

Referenced by Creature::SaveRespawnTime().

◆ SaveGORespawnTime()

void Map::SaveGORespawnTime ( ObjectGuid::LowType  dbGuid,
time_t &  respawnTime 
)
2568{
2569 if (!respawnTime)
2570 {
2571 // Delete only
2572 RemoveGORespawnTime(spawnId);
2573 return;
2574 }
2575
2576 time_t now = GameTime::GetGameTime().count();
2577 if (GetInstanceResetPeriod() > 0 && respawnTime - now + 5 >= GetInstanceResetPeriod())
2578 respawnTime = now + YEAR;
2579
2580 _goRespawnTimes[spawnId] = respawnTime;
2581
2583 stmt->SetData(0, spawnId);
2584 stmt->SetData(1, uint32(respawnTime));
2585 stmt->SetData(2, GetId());
2586 stmt->SetData(3, GetInstanceId());
2587 CharacterDatabase.Execute(stmt);
2588}
@ CHAR_REP_GO_RESPAWN
Definition CharacterDatabase.h:258
void RemoveGORespawnTime(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2590

References _goRespawnTimes, CHAR_REP_GO_RESPAWN, CharacterDatabase, GameTime::GetGameTime(), GetId(), GetInstanceId(), GetInstanceResetPeriod(), RemoveGORespawnTime(), PreparedStatementBase::SetData(), and YEAR.

Referenced by GameObject::SaveRespawnTime().

◆ ScheduleCreatureRespawn()

void Map::ScheduleCreatureRespawn ( ObjectGuid  creatureGuid,
Milliseconds  respawnTimer,
Position  pos = Position() 
)
2892{
2893 _creatureRespawnScheduler.Schedule(respawnTimer, [this, creatureGuid, pos](TaskContext)
2894 {
2895 if (Creature* creature = GetCreature(creatureGuid))
2896 creature->Respawn();
2897 else
2898 SummonCreature(creatureGuid.GetEntry(), pos);
2899 });
2900}
TaskScheduler _creatureRespawnScheduler
Definition Map.h:449
Creature * GetCreature(ObjectGuid const guid)
Definition Map.cpp:2498
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, uint32 duration=0, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, bool visibleBySummonerOnly=false)
Definition Object.cpp:2174
uint32 GetEntry() const
Definition ObjectGuid.h:144
Definition TaskScheduler.h:421
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
Definition TaskScheduler.h:232

References _creatureRespawnScheduler, GetCreature(), ObjectGuid::GetEntry(), TaskScheduler::Schedule(), and SummonCreature().

Referenced by Creature::DespawnOnEvade(), and Creature::ForcedDespawn().

◆ ScriptCommandStart()

void Map::ScriptCommandStart ( ScriptInfo const &  script,
uint32  delay,
Object source,
Object target 
)
  • If effects should be immediate, launch the script execution
70{
71 // NOTE: script record _must_ exist until command executed
72
73 // prepare static data
74 ObjectGuid sourceGUID = source ? source->GetGUID() : ObjectGuid::Empty;
75 ObjectGuid targetGUID = target ? target->GetGUID() : ObjectGuid::Empty;
76 ObjectGuid ownerGUID = (source && source->IsItem()) ? ((Item*)source)->GetOwnerGUID() : ObjectGuid::Empty;
77
78 ScriptAction sa;
79 sa.sourceGUID = sourceGUID;
80 sa.targetGUID = targetGUID;
81 sa.ownerGUID = ownerGUID;
82
83 sa.script = &script;
84 m_scriptSchedule.insert(ScriptScheduleMap::value_type(time_t(GameTime::GetGameTime().count() + delay), sa));
85
86 sScriptMgr->IncreaseScheduledScriptsCount();
87
89 if (delay == 0 && !i_scriptLock)
90 {
91 i_scriptLock = true;
93 i_scriptLock = false;
94 }
95}
Definition Item.h:220
void ScriptsProcess()
Process queued scripts.
Definition MapScripts.cpp:277
static ObjectGuid const Empty
Definition ObjectGuid.h:120
bool IsItem() const
Definition Object.h:224
Definition Map.h:79
ObjectGuid targetGUID
Definition Map.h:81
ObjectGuid ownerGUID
Definition Map.h:82
ObjectGuid sourceGUID
Definition Map.h:80
ScriptInfo const * script
Definition Map.h:83

References ObjectGuid::Empty, GameTime::GetGameTime(), Object::GetGUID(), i_scriptLock, Object::IsItem(), m_scriptSchedule, ScriptAction::ownerGUID, ScriptAction::script, ScriptsProcess(), ScriptAction::sourceGUID, sScriptMgr, and ScriptAction::targetGUID.

◆ ScriptsProcess()

void Map::ScriptsProcess ( )
private

Process queued scripts.

  • Process overdue queued scripts
Todo:
: Allow gameobjects to be targets and casters
278{
279 if (m_scriptSchedule.empty())
280 return;
281
283 ScriptScheduleMap::iterator iter = m_scriptSchedule.begin();
284 // ok as multimap is a *sorted* associative container
285 while (!m_scriptSchedule.empty() && (iter->first <= GameTime::GetGameTime().count()))
286 {
287 ScriptAction const& step = iter->second;
288
289 Object* source = nullptr;
290 if (step.sourceGUID)
291 {
292 switch (step.sourceGUID.GetHigh())
293 {
294 case HighGuid::Item: // as well as HIGHGUID_CONTAINER
295 if (Player* player = ObjectAccessor::GetPlayer(this, step.ownerGUID))
296 source = player->GetItemByGuid(step.sourceGUID);
297 break;
298 case HighGuid::Unit:
300 source = GetCreature(step.sourceGUID);
301 break;
302 case HighGuid::Pet:
303 source = GetPet(step.sourceGUID);
304 break;
305 case HighGuid::Player:
307 break;
310 source = GetGameObject(step.sourceGUID);
311 break;
312 case HighGuid::Corpse:
313 source = GetCorpse(step.sourceGUID);
314 break;
316 source = GetTransport(step.sourceGUID);
317 break;
318 default:
319 LOG_ERROR("maps.script", "{} source with unsupported high guid ({}).",
320 step.script->GetDebugInfo(), step.sourceGUID.ToString());
321 break;
322 }
323 }
324
325 WorldObject* target = nullptr;
326 if (step.targetGUID)
327 {
328 switch (step.targetGUID.GetHigh())
329 {
330 case HighGuid::Unit:
332 target = GetCreature(step.targetGUID);
333 break;
334 case HighGuid::Pet:
335 target = GetPet(step.targetGUID);
336 break;
337 case HighGuid::Player: // empty GUID case also
339 break;
342 target = GetGameObject(step.targetGUID);
343 break;
344 case HighGuid::Corpse:
345 target = GetCorpse(step.targetGUID);
346 break;
348 target = GetTransport(step.targetGUID);
349 break;
350 default:
351 LOG_ERROR("maps.script", "{} target with unsupported high guid ({}).",
352 step.script->GetDebugInfo(), step.targetGUID.ToString());
353 break;
354 }
355 }
356
357 switch (step.script->command)
358 {
360 {
362 {
363 LOG_ERROR("maps.script", "{} invalid chat type ({}) specified, skipping.", step.script->GetDebugInfo(), step.script->Talk.ChatType);
364 break;
365 }
366
368 {
369 source = _GetScriptPlayerSourceOrTarget(source, target, step.script);
370 }
371 else
372 {
373 source = _GetScriptCreatureSourceOrTarget(source, target, step.script);
374 }
375
376 if (source)
377 {
378 Unit* sourceUnit = source->ToUnit();
379 if (!sourceUnit)
380 {
381 LOG_ERROR("scripts", "{} source object ({}) is not an unit, skipping.", step.script->GetDebugInfo(), source->GetGUID().ToString());
382 break;
383 }
384
385 switch (step.script->Talk.ChatType)
386 {
387 case CHAT_TYPE_SAY:
388 sourceUnit->Say(step.script->Talk.TextID, target);
389 break;
390 case CHAT_TYPE_YELL:
391 sourceUnit->Yell(step.script->Talk.TextID, target);
392 break;
395 sourceUnit->TextEmote(step.script->Talk.TextID, target, step.script->Talk.ChatType == CHAT_TYPE_BOSS_EMOTE);
396 break;
399 {
400 Player* receiver = target ? target->ToPlayer() : nullptr;
401 if (!receiver)
402 LOG_ERROR("scripts", "{} attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo());
403 else
404 sourceUnit->Whisper(step.script->Talk.TextID, receiver, step.script->Talk.ChatType == CHAT_MSG_RAID_BOSS_WHISPER);
405 break;
406 }
407 default:
408 break; // must be already checked at load
409 }
410 }
411 break;
412 }
414 // Source or target must be Creature.
415 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
416 {
418 cSource->SetUInt32Value(UNIT_NPC_EMOTESTATE, step.script->Emote.EmoteID);
419 else
420 cSource->HandleEmoteCommand(step.script->Emote.EmoteID);
421 }
422 break;
423
425 // Source or target must be Creature.
426 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
427 {
428 // Validate field number.
429 if (step.script->FieldSet.FieldID <= OBJECT_FIELD_ENTRY || step.script->FieldSet.FieldID >= cSource->GetValuesCount())
430 LOG_ERROR("maps.script", "{} wrong field {} (max count: {}) in object ({}) specified, skipping.",
431 step.script->GetDebugInfo(), step.script->FieldSet.FieldID, cSource->GetValuesCount(), cSource->GetGUID().ToString());
432 else
433 cSource->SetUInt32Value(step.script->FieldSet.FieldID, step.script->FieldSet.FieldValue);
434 }
435 break;
436
438 // Source or target must be Creature.
439 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
440 {
441 Unit* unit = (Unit*)cSource;
442 if (step.script->MoveTo.TravelTime != 0)
443 {
444 float speed = unit->GetDistance(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ) / ((float)step.script->MoveTo.TravelTime * 0.001f);
445 unit->MonsterMoveWithSpeed(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, speed);
446 }
447 else
449 }
450 break;
451
453 // Source or target must be Creature.
454 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
455 {
456 // Validate field number.
457 if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount())
458 LOG_ERROR("maps.script", "{} wrong field {} (max count: {}) in object ({}) specified, skipping.",
459 step.script->GetDebugInfo(), step.script->FlagToggle.FieldID, cSource->GetValuesCount(), cSource->GetGUID().ToString());
460 else
461 cSource->SetFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue);
462 }
463 break;
464
466 // Source or target must be Creature.
467 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
468 {
469 // Validate field number.
470 if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount())
471 LOG_ERROR("maps.script", "{} wrong field {} (max count: {}) in object ({}) specified, skipping.",
472 step.script->GetDebugInfo(), step.script->FlagToggle.FieldID, cSource->GetValuesCount(), cSource->GetGUID().ToString());
473 else
474 cSource->RemoveFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue);
475 }
476 break;
477
480 {
481 // Source or target must be Creature.
482 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script, true))
483 cSource->NearTeleportTo(step.script->TeleportTo.DestX, step.script->TeleportTo.DestY, step.script->TeleportTo.DestZ, step.script->TeleportTo.Orientation);
484 }
485 else
486 {
487 // Source or target must be Player.
488 if (Player* player = _GetScriptPlayerSourceOrTarget(source, target, step.script))
489 player->TeleportTo(step.script->TeleportTo.MapID, step.script->TeleportTo.DestX, step.script->TeleportTo.DestY, step.script->TeleportTo.DestZ, step.script->TeleportTo.Orientation);
490 }
491 break;
492
494 {
495 if (!source)
496 {
497 LOG_ERROR("maps.script", "{} source object is nullptr.", step.script->GetDebugInfo());
498 break;
499 }
500 if (!target)
501 {
502 LOG_ERROR("maps.script", "{} target object is nullptr.", step.script->GetDebugInfo());
503 break;
504 }
505
506 // when script called for item spell casting then target == (unit or GO) and source is player
507 WorldObject* worldObject;
508 Player* player = target->ToPlayer();
509 if (player)
510 {
511 if (!source->IsCreature() && !source->IsGameObject() && !source->IsPlayer())
512 {
513 LOG_ERROR("maps.script", "{} source is not unit, gameobject or player ({}), skipping.", step.script->GetDebugInfo(), source->GetGUID().ToString());
514 break;
515 }
516 worldObject = dynamic_cast<WorldObject*>(source);
517 }
518 else
519 {
520 player = source->ToPlayer();
521 if (player)
522 {
523 if (!target->IsCreature() && !target->IsGameObject() && !target->IsPlayer())
524 {
525 LOG_ERROR("maps.script", "{} target is not unit, gameobject or player ({}), skipping.", step.script->GetDebugInfo(), target->GetGUID().ToString());
526 break;
527 }
528 worldObject = dynamic_cast<WorldObject*>(target);
529 }
530 else
531 {
532 LOG_ERROR("maps.script", "{} neither source nor target is player (source: {}; target: {}), skipping.",
533 step.script->GetDebugInfo(), source->GetGUID().ToString(), target->GetGUID().ToString());
534 break;
535 }
536 }
537
538 // quest id and flags checked at script loading
539 if ((!worldObject->IsCreature() || ((Unit*)worldObject)->IsAlive()) &&
540 (step.script->QuestExplored.Distance == 0 || worldObject->IsWithinDistInMap(player, float(step.script->QuestExplored.Distance))))
541 player->GroupEventHappens(step.script->QuestExplored.QuestID, worldObject);
542 else
543 player->FailQuest(step.script->QuestExplored.QuestID);
544
545 break;
546 }
547
549 // Source or target must be Player.
550 if (Player* player = _GetScriptPlayerSourceOrTarget(source, target, step.script))
551 {
554 else
556 }
557 break;
558
561 {
562 LOG_ERROR("maps.script", "{} gameobject guid (datalong) is not specified.", step.script->GetDebugInfo());
563 break;
564 }
565
566 // Source or target must be WorldObject.
567 if (WorldObject* pSummoner = _GetScriptWorldObject(source, true, step.script))
568 {
570 if (!pGO)
571 {
572 LOG_ERROR("maps.script", "{} gameobject was not found (guid: {}).", step.script->GetDebugInfo(), step.script->RespawnGameobject.GOGuid);
573 break;
574 }
575
580 {
581 LOG_ERROR("maps.script", "{} can not be used with gameobject of type {} (guid: {}).",
583 break;
584 }
585
586 // Check that GO is not spawned
587 if (!pGO->isSpawned())
588 {
589 int32 nTimeToDespawn = std::max(5, int32(step.script->RespawnGameobject.DespawnDelay));
591 pGO->SetRespawnTime(nTimeToDespawn);
592
593 pGO->GetMap()->AddToMap(pGO);
594 }
595 }
596 break;
597
599 {
600 // Source must be WorldObject.
601 if (WorldObject* pSummoner = _GetScriptWorldObject(source, true, step.script))
602 {
604 LOG_ERROR("maps.script", "{} creature entry (datalong) is not specified.", step.script->GetDebugInfo());
605 else
606 {
608
609 float x = step.script->TempSummonCreature.PosX;
610 float y = step.script->TempSummonCreature.PosY;
611 float z = step.script->TempSummonCreature.PosZ;
612 float o = step.script->TempSummonCreature.Orientation;
613
615 if (Unit* trigger = pSummoner->SummonTrigger(x, y, z, o, 1))
616 if (trigger->FindNearestCreature(entry, 60.0f))
617 break;
618
619 if (!pSummoner->SummonCreature(entry, x, y, z, o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, step.script->TempSummonCreature.DespawnDelay))
620 LOG_ERROR("maps.script", "{} creature was not spawned (entry: {}).", step.script->GetDebugInfo(), step.script->TempSummonCreature.CreatureEntry);
621 }
622 }
623 break;
624 }
625
628 _ScriptProcessDoor(source, target, step.script);
629 break;
630
632 // Source must be Unit.
633 if (Unit* unit = _GetScriptUnit(source, true, step.script))
634 {
635 // Target must be GameObject.
636 if (!target)
637 {
638 LOG_ERROR("maps.script", "{} target object is nullptr.", step.script->GetDebugInfo());
639 break;
640 }
641
642 if (!target->IsGameObject())
643 {
644 LOG_ERROR("maps.script", "{} target object is not gameobject ({}), skipping.", step.script->GetDebugInfo(), target->GetGUID().ToString());
645 break;
646 }
647
648 if (GameObject* pGO = target->ToGameObject())
649 pGO->Use(unit);
650 }
651 break;
652
654 {
655 // Source (datalong2 != 0) or target (datalong2 == 0) must be Unit.
656 bool bReverse = step.script->RemoveAura.Flags & SF_REMOVEAURA_REVERSE;
657 if (Unit* unit = _GetScriptUnit(bReverse ? source : target, bReverse, step.script))
658 unit->RemoveAurasDueToSpell(step.script->RemoveAura.SpellID);
659 break;
660 }
661
663 {
665 if (!source && !target)
666 {
667 LOG_ERROR("maps.script", "{} source and target objects are nullptr.", step.script->GetDebugInfo());
668 break;
669 }
670
671 Unit* uSource = nullptr;
672 Unit* uTarget = nullptr;
673 // source/target cast spell at target/source (script->datalong2: 0: s->t 1: s->s 2: t->t 3: t->s
674 switch (step.script->CastSpell.Flags)
675 {
676 case SF_CASTSPELL_SOURCE_TO_TARGET: // source -> target
677 uSource = source ? source->ToUnit() : nullptr;
678 uTarget = target ? target->ToUnit() : nullptr;
679 break;
680 case SF_CASTSPELL_SOURCE_TO_SOURCE: // source -> source
681 uSource = source ? source->ToUnit() : nullptr;
682 uTarget = uSource;
683 break;
684 case SF_CASTSPELL_TARGET_TO_TARGET: // target -> target
685 uSource = target ? target->ToUnit() : nullptr;
686 uTarget = uSource;
687 break;
688 case SF_CASTSPELL_TARGET_TO_SOURCE: // target -> source
689 uSource = target ? target->ToUnit() : nullptr;
690 uTarget = source ? source->ToUnit() : nullptr;
691 break;
692 case SF_CASTSPELL_SEARCH_CREATURE: // source -> creature with entry
693 uSource = source ? source->ToUnit() : nullptr;
694 uTarget = uSource ? GetClosestCreatureWithEntry(uSource, std::abs(step.script->CastSpell.CreatureEntry), step.script->CastSpell.SearchRadius) : nullptr;
695 break;
696 }
697
698 if (!uSource || !uSource->IsUnit())
699 {
700 LOG_ERROR("maps.script", "{} no source unit found for spell {}", step.script->GetDebugInfo(), step.script->CastSpell.SpellID);
701 break;
702 }
703
704 if (!uTarget || !uTarget->IsUnit())
705 {
706 LOG_ERROR("maps.script", "{} no target unit found for spell {}", step.script->GetDebugInfo(), step.script->CastSpell.SpellID);
707 break;
708 }
709
710 bool triggered = (step.script->CastSpell.Flags != 4) ?
712 step.script->CastSpell.CreatureEntry < 0;
713 uSource->CastSpell(uTarget, step.script->CastSpell.SpellID, triggered);
714 break;
715 }
716
718 // Source must be WorldObject.
719 if (WorldObject* object = _GetScriptWorldObject(source, true, step.script))
720 {
721 // Playsound.Flags bitmask: 0/1=anyone/target
722 Player* player = nullptr;
724 {
725 // Target must be Player.
726 player = _GetScriptPlayer(target, false, step.script);
727 if (!target)
728 break;
729 }
730
731 // Playsound.Flags bitmask: 0/2/4=without/with distance dependent/radius
733 object->PlayRadiusSound(step.script->Playsound.SoundID, step.script->Playsound.Radius);
735 object->PlayDistanceSound(step.script->Playsound.SoundID, player);
736 else
737 object->PlayDirectSound(step.script->Playsound.SoundID, player);
738 }
739 break;
740
742 // Target or source must be Player.
743 if (Player* pReceiver = _GetScriptPlayerSourceOrTarget(source, target, step.script))
744 {
745 ItemPosCountVec dest;
746 InventoryResult msg = pReceiver->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, step.script->CreateItem.ItemEntry, step.script->CreateItem.Amount);
747 if (msg == EQUIP_ERR_OK)
748 {
749 if (Item* item = pReceiver->StoreNewItem(dest, step.script->CreateItem.ItemEntry, true))
750 pReceiver->SendNewItem(item, step.script->CreateItem.Amount, false, true);
751 }
752 else
753 pReceiver->SendEquipError(msg, nullptr, nullptr, step.script->CreateItem.ItemEntry);
754 }
755 break;
756
758 // Target or source must be Creature.
759 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script, true))
760 cSource->DespawnOrUnsummon(step.script->DespawnSelf.DespawnDelay);
761 break;
762
764 // Source must be Unit.
765 if (Unit* unit = _GetScriptUnit(source, true, step.script))
766 {
767 if (!sWaypointMgr->GetPath(step.script->LoadPath.PathID))
768 LOG_ERROR("maps.script", "{} source object has an invalid path ({}), skipping.", step.script->GetDebugInfo(), step.script->LoadPath.PathID);
769 else
771 }
772 break;
773
775 {
777 {
778 LOG_ERROR("maps.script", "{} creature entry is not specified, skipping.", step.script->GetDebugInfo());
779 break;
780 }
781 if (!step.script->CallScript.ScriptID)
782 {
783 LOG_ERROR("maps.script", "{} script id is not specified, skipping.", step.script->GetDebugInfo());
784 break;
785 }
786
787 Creature* cTarget = nullptr;
788 auto creatureBounds = _creatureBySpawnIdStore.equal_range(step.script->CallScript.CreatureEntry);
789 if (creatureBounds.first != creatureBounds.second)
790 {
791 // Prefer alive (last respawned) creature
792 auto creatureItr = std::find_if(creatureBounds.first, creatureBounds.second, [](Map::CreatureBySpawnIdContainer::value_type const& pair)
793 {
794 return pair.second->IsAlive();
795 });
796 cTarget = creatureItr != creatureBounds.second ? creatureItr->second : creatureBounds.first->second;
797 }
798
799 if (!cTarget)
800 {
801 LOG_ERROR("maps.script", "{} target was not found (entry: {})", step.script->GetDebugInfo(), step.script->CallScript.CreatureEntry);
802 break;
803 }
804
805 //Lets choose our ScriptMap map
807 //if no scriptmap present...
808 if (!datamap)
809 {
810 LOG_ERROR("maps.script", "{} unknown scriptmap ({}) specified, skipping.", step.script->GetDebugInfo(), step.script->CallScript.ScriptType);
811 break;
812 }
813
814 // Insert script into schedule but do not start it
815 ScriptsStart(*datamap, step.script->CallScript.ScriptID, cTarget, nullptr);
816 break;
817 }
818
820 // Source or target must be Creature.
821 if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
822 {
823 if (cSource->isDead())
824 LOG_ERROR("maps.script", "{} creature is already dead ({})", step.script->GetDebugInfo(), cSource->GetGUID().ToString());
825 else
826 {
827 cSource->setDeathState(DeathState::JustDied);
828 if (step.script->Kill.RemoveCorpse == 1)
829 cSource->RemoveCorpse();
830 }
831 }
832 break;
833
835 // Source must be Unit.
836 if (Unit* sourceUnit = _GetScriptUnit(source, true, step.script))
837 {
839 {
840 // Target must be Unit.
841 Unit* targetUnit = _GetScriptUnit(target, false, step.script);
842 if (!targetUnit)
843 break;
844
845 sourceUnit->SetFacingToObject(targetUnit);
846 }
847 else
848 sourceUnit->SetFacingTo(step.script->Orientation.Orientation);
849 }
850 break;
851
853 // Source must be Creature.
854 if (Creature* cSource = _GetScriptCreature(source, true, step.script))
855 cSource->LoadEquipment(step.script->Equip.EquipmentID);
856 break;
857
859 // Source must be Creature.
860 if (Creature* cSource = _GetScriptCreature(source, true, step.script))
861 cSource->SetDisplayId(step.script->Model.ModelID);
862 break;
863
865 // Source must be Player.
866 if (Player* player = _GetScriptPlayer(source, true, step.script))
868 break;
869
871 // Source must be Player.
872 if (Player* player = _GetScriptPlayer(source, true, step.script))
873 player->SendMovieStart(step.script->PlayMovie.MovieID);
874 break;
875
877 // Source must be Creature.
878 if (Creature* cSource = _GetScriptCreature(source, true, step.script))
879 {
880 if (!cSource->IsAlive())
881 return;
882
883 cSource->GetMotionMaster()->MovementExpired();
884 cSource->GetMotionMaster()->MoveIdle();
885
886 switch (step.script->Movement.MovementType)
887 {
889 cSource->GetMotionMaster()->MoveRandom((float)step.script->Movement.MovementDistance);
890 break;
892 cSource->GetMotionMaster()->MovePath(step.script->Movement.Path, false);
893 break;
894 }
895 }
896 break;
897
898 default:
899 LOG_ERROR("maps.script", "Unknown script command {}.", step.script->GetDebugInfo());
900 break;
901 }
902
903 m_scriptSchedule.erase(iter);
904 iter = m_scriptSchedule.begin();
905 sScriptMgr->DecreaseScheduledScriptCount();
906 }
907}
@ CHAT_TYPE_SAY
Definition CreatureData.h:421
@ CHAT_TYPE_TEXT_EMOTE
Definition CreatureData.h:423
@ CHAT_TYPE_BOSS_EMOTE
Definition CreatureData.h:424
@ CHAT_TYPE_WHISPER
Definition CreatureData.h:425
@ CHAT_TYPE_YELL
Definition CreatureData.h:422
@ GO_READY
Definition GameObject.h:111
InventoryResult
Definition Item.h:46
@ EQUIP_ERR_OK
Definition Item.h:47
@ NULL_BAG
Definition Item.h:40
@ NULL_SLOT
Definition Item.h:41
@ WAYPOINT_MOTION_TYPE
Definition MotionMaster.h:41
@ RANDOM_MOTION_TYPE
Definition MotionMaster.h:40
ScriptMapMap * GetScriptsMapByType(ScriptsType type)
Definition ObjectMgr.cpp:83
@ SF_CASTSPELL_SOURCE_TO_SOURCE
Definition ObjectMgr.h:174
@ SF_CASTSPELL_SOURCE_TO_TARGET
Definition ObjectMgr.h:173
@ SF_CASTSPELL_TRIGGERED
Definition ObjectMgr.h:178
@ SF_CASTSPELL_TARGET_TO_SOURCE
Definition ObjectMgr.h:176
@ SF_REMOVEAURA_REVERSE
Definition ObjectMgr.h:170
@ SF_PLAYSOUND_DISTANCE_SOUND
Definition ObjectMgr.h:182
@ SF_TALK_USE_PLAYER
Definition ObjectMgr.h:158
@ SF_TELEPORT_USE_CREATURE
Definition ObjectMgr.h:164
@ SF_KILLCREDIT_REWARD_GROUP
Definition ObjectMgr.h:167
@ SF_PLAYSOUND_TARGET_PLAYER
Definition ObjectMgr.h:181
@ SF_CASTSPELL_TARGET_TO_TARGET
Definition ObjectMgr.h:175
@ SF_EMOTE_USE_STATE
Definition ObjectMgr.h:161
@ SF_CASTSPELL_SEARCH_CREATURE
Definition ObjectMgr.h:177
@ SF_PLAYSOUND_DISTANCE_RADIUS
Definition ObjectMgr.h:183
@ SF_ORIENTATION_FACE_TARGET
Definition ObjectMgr.h:186
@ SCRIPT_COMMAND_EMOTE
Definition ObjectMgr.h:93
@ SCRIPT_COMMAND_CREATE_ITEM
Definition ObjectMgr.h:109
@ SCRIPT_COMMAND_DESPAWN_SELF
Definition ObjectMgr.h:110
@ SCRIPT_COMMAND_CAST_SPELL
Definition ObjectMgr.h:107
@ SCRIPT_COMMAND_RESPAWN_GAMEOBJECT
Definition ObjectMgr.h:101
@ SCRIPT_COMMAND_QUEST_EXPLORED
Definition ObjectMgr.h:99
@ SCRIPT_COMMAND_ACTIVATE_OBJECT
Definition ObjectMgr.h:105
@ SCRIPT_COMMAND_TALK
Definition ObjectMgr.h:92
@ SCRIPT_COMMAND_EQUIP
Definition ObjectMgr.h:118
@ SCRIPT_COMMAND_FIELD_SET
Definition ObjectMgr.h:94
@ SCRIPT_COMMAND_PLAYMOVIE
Definition ObjectMgr.h:121
@ SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT
Definition ObjectMgr.h:113
@ SCRIPT_COMMAND_TELEPORT_TO
Definition ObjectMgr.h:98
@ SCRIPT_COMMAND_MOVE_TO
Definition ObjectMgr.h:95
@ SCRIPT_COMMAND_FLAG_SET
Definition ObjectMgr.h:96
@ SCRIPT_COMMAND_TEMP_SUMMON_CREATURE
Definition ObjectMgr.h:102
@ SCRIPT_COMMAND_MOVEMENT
Definition ObjectMgr.h:122
@ SCRIPT_COMMAND_KILL_CREDIT
Definition ObjectMgr.h:100
@ SCRIPT_COMMAND_KILL
Definition ObjectMgr.h:114
@ SCRIPT_COMMAND_LOAD_PATH
Definition ObjectMgr.h:112
@ SCRIPT_COMMAND_ORIENTATION
Definition ObjectMgr.h:117
@ SCRIPT_COMMAND_PLAY_SOUND
Definition ObjectMgr.h:108
@ SCRIPT_COMMAND_MODEL
Definition ObjectMgr.h:119
@ SCRIPT_COMMAND_CLOSE_GOSSIP
Definition ObjectMgr.h:120
@ SCRIPT_COMMAND_REMOVE_AURA
Definition ObjectMgr.h:106
@ SCRIPT_COMMAND_FLAG_REMOVE
Definition ObjectMgr.h:97
std::map< uint32, ScriptMap > ScriptMapMap
Definition ObjectMgr.h:386
ScriptsType
Definition ObjectMgr.h:145
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:46
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:776
Creature * GetClosestCreatureWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool alive)
Definition ScriptedCreature.cpp:865
@ GAMEOBJECT_TYPE_TRAP
Definition SharedDefines.h:1566
@ GAMEOBJECT_TYPE_FISHINGNODE
Definition SharedDefines.h:1577
@ CHAT_MSG_RAID_BOSS_WHISPER
Definition SharedDefines.h:3194
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
@ OBJECT_FIELD_ENTRY
Definition UpdateFields.h:27
#define sWaypointMgr
Definition WaypointMgr.h:78
bool isSpawned() const
Definition GameObject.h:189
void SetLootState(LootState s, Unit *unit=nullptr)
Definition GameObject.cpp:2427
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1288
void Use(Unit *user)
Definition GameObject.cpp:1464
static T * Find(ObjectGuid guid)
Definition ObjectAccessor.cpp:53
Corpse * GetCorpse(ObjectGuid const guid)
Definition Map.cpp:2493
void ScriptsStart(std::map< uint32, std::multimap< uint32, ScriptInfo > > const &scripts, uint32 id, Object *source, Object *target)
Put scripts in the execution queue.
Definition MapScripts.cpp:31
Creature * _GetScriptCreature(Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
Definition MapScripts.cpp:186
Creature * _GetScriptCreatureSourceOrTarget(Object *source, Object *target, const ScriptInfo *scriptInfo, bool bReverse=false) const
Definition MapScripts.cpp:120
WorldObject * _GetScriptWorldObject(Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
Definition MapScripts.cpp:201
Player * _GetScriptPlayerSourceOrTarget(Object *source, Object *target, const ScriptInfo *scriptInfo) const
Definition MapScripts.cpp:98
Pet * GetPet(ObjectGuid const guid)
Definition Map.cpp:2508
void _ScriptProcessDoor(Object *source, Object *target, const ScriptInfo *scriptInfo) const
Definition MapScripts.cpp:217
Player * _GetScriptPlayer(Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
Definition MapScripts.cpp:171
Unit * _GetScriptUnit(Object *obj, bool isSource, const ScriptInfo *scriptInfo) const
Definition MapScripts.cpp:153
Transport * GetTransport(ObjectGuid const guid)
Definition Map.cpp:2513
void MovePath(uint32 path_id, bool repeatable)
Move the unit following a specific path. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:852
Definition Object.h:103
bool IsPlayer() const
Definition Object.h:200
void SendCloseGossip()
Definition GossipDef.cpp:239
void KilledMonsterCredit(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition PlayerQuest.cpp:1927
void GroupEventHappens(uint32 questId, WorldObject const *pEventObject)
Definition PlayerQuest.cpp:1818
void SendMovieStart(uint32 MovieId)
Definition Player.cpp:5749
void FailQuest(uint32 quest_id)
Definition PlayerQuest.cpp:886
PlayerMenu * PlayerTalkClass
Definition Player.h:2247
void RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject *pRewardSource)
Definition Player.cpp:12792
void SetFacingTo(float ori)
Definition Unit.cpp:20581
virtual void Say(std::string_view text, Language language, WorldObject const *target=nullptr)
Definition Unit.cpp:21189
virtual void Yell(std::string_view text, Language language, WorldObject const *target=nullptr)
Definition Unit.cpp:21194
MotionMaster * GetMotionMaster()
Definition Unit.h:1673
void SetFacingToObject(WorldObject *object)
Definition Unit.cpp:20591
void MonsterMoveWithSpeed(float x, float y, float z, float speed)
Definition Unit.cpp:529
virtual void TextEmote(std::string_view text, WorldObject const *target=nullptr, bool isBossEmote=false)
Definition Unit.cpp:21199
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1178
void NearTeleportTo(Position &pos, bool casting=false, bool vehicleTeleport=false, bool withPet=false, bool removeTransport=false)
Definition Unit.cpp:20031
virtual void Whisper(std::string_view text, Language language, Player *target, bool isBossWhisper=false)
Definition Unit.cpp:21204
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=true) const
Definition Object.cpp:1332
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1256
Creature * SummonTrigger(float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
Definition Object.cpp:2417
Player * GetPlayer(Map const *, ObjectGuid const guid)
Definition ObjectAccessor.cpp:220
Definition ChatCommandTags.h:253
float Orientation
Definition ObjectMgr.h:250
struct ScriptInfo::@266::@277 RespawnGameobject
uint32 Flags
Definition ObjectMgr.h:207
uint32 FieldID
Definition ObjectMgr.h:219
uint32 QuestID
Definition ObjectMgr.h:255
float SearchRadius
Definition ObjectMgr.h:304
int32 TextID
Definition ObjectMgr.h:208
uint32 MovementType
Definition ObjectMgr.h:376
uint32 MovementDistance
Definition ObjectMgr.h:377
struct ScriptInfo::@266::@281 CastSpell
struct ScriptInfo::@266::@273 FlagToggle
float DestX
Definition ObjectMgr.h:229
uint32 ItemEntry
Definition ObjectMgr.h:316
uint32 ChatType
Definition ObjectMgr.h:206
uint32 SoundID
Definition ObjectMgr.h:309
uint32 CheckIfExists
Definition ObjectMgr.h:275
struct ScriptInfo::@266::@269 Talk
struct ScriptInfo::@266::@284 DespawnSelf
struct ScriptInfo::@266::@291 PlayMovie
struct ScriptInfo::@266::@270 Emote
struct ScriptInfo::@266::@280 RemoveAura
struct ScriptInfo::@266::@289 Equip
uint32 ScriptID
Definition ObjectMgr.h:334
struct ScriptInfo::@266::@274 TeleportTo
uint32 ModelID
Definition ObjectMgr.h:364
uint32 FieldValue
Definition ObjectMgr.h:220
float PosY
Definition ObjectMgr.h:278
float DestY
Definition ObjectMgr.h:230
uint32 PathID
Definition ObjectMgr.h:327
struct ScriptInfo::@266::@275 QuestExplored
uint32 MapID
Definition ObjectMgr.h:243
uint32 IsRepeatable
Definition ObjectMgr.h:328
int32 Path
Definition ObjectMgr.h:378
struct ScriptInfo::@266::@292 Movement
int32 RemoveCorpse
Definition ObjectMgr.h:342
float PosZ
Definition ObjectMgr.h:279
struct ScriptInfo::@266::@283 CreateItem
uint32 ScriptType
Definition ObjectMgr.h:335
struct ScriptInfo::@266::@285 LoadPath
struct ScriptInfo::@266::@286 CallScript
struct ScriptInfo::@266::@272 MoveTo
uint32 DespawnDelay
Definition ObjectMgr.h:268
float PosX
Definition ObjectMgr.h:277
int32 Radius
Definition ObjectMgr.h:311
uint32 TravelTime
Definition ObjectMgr.h:226
uint32 Distance
Definition ObjectMgr.h:256
struct ScriptInfo::@266::@276 KillCredit
uint32 SpellID
Definition ObjectMgr.h:294
float DestZ
Definition ObjectMgr.h:231
struct ScriptInfo::@266::@282 Playsound
uint32 MovieID
Definition ObjectMgr.h:371
struct ScriptInfo::@266::@290 Model
uint32 EquipmentID
Definition ObjectMgr.h:359
struct ScriptInfo::@266::@271 FieldSet
struct ScriptInfo::@266::@287 Kill
uint32 CreatureEntry
Definition ObjectMgr.h:261
uint32 Amount
Definition ObjectMgr.h:317
struct ScriptInfo::@266::@278 TempSummonCreature
uint32 EmoteID
Definition ObjectMgr.h:213

References _creatureBySpawnIdStore, _FindGameObject(), _GetScriptCreature(), _GetScriptCreatureSourceOrTarget(), _GetScriptPlayer(), _GetScriptPlayerSourceOrTarget(), _GetScriptUnit(), _GetScriptWorldObject(), _ScriptProcessDoor(), AddToMap(), ScriptInfo::Amount, ScriptInfo::CallScript, Unit::CastSpell(), ScriptInfo::CastSpell, CHAT_MSG_RAID_BOSS_WHISPER, CHAT_TYPE_BOSS_EMOTE, CHAT_TYPE_SAY, CHAT_TYPE_TEXT_EMOTE, CHAT_TYPE_WHISPER, CHAT_TYPE_YELL, ScriptInfo::ChatType, ScriptInfo::CheckIfExists, ScriptInfo::command, Corpse, ScriptInfo::CreateItem, ScriptInfo::CreatureEntry, ScriptInfo::DespawnDelay, ScriptInfo::DespawnSelf, ScriptInfo::DestX, ScriptInfo::DestY, ScriptInfo::DestZ, ScriptInfo::Distance, ScriptInfo::Emote, ScriptInfo::EmoteID, ScriptInfo::Equip, EQUIP_ERR_OK, ScriptInfo::EquipmentID, Player::FailQuest(), ScriptInfo::FieldID, ScriptInfo::FieldSet, ScriptInfo::FieldValue, HashMapHolder< T >::Find(), ScriptInfo::Flags, ScriptInfo::FlagToggle, GameObject, GAMEOBJECT_TYPE_BUTTON, GAMEOBJECT_TYPE_DOOR, GAMEOBJECT_TYPE_FISHINGNODE, GAMEOBJECT_TYPE_TRAP, GetClosestCreatureWithEntry(), GetCorpse(), GetCreature(), ScriptInfo::GetDebugInfo(), WorldObject::GetDistance(), GetGameObject(), GameTime::GetGameTime(), GameObject::GetGoType(), Object::GetGUID(), ObjectGuid::GetHigh(), WorldObject::GetMap(), Position::GetOrientation(), GetPet(), ObjectAccessor::GetPlayer(), GetScriptsMapByType(), GetTransport(), GO_READY, ScriptInfo::GOGuid, Player::GroupEventHappens(), Object::IsCreature(), Object::IsGameObject(), Object::IsPlayer(), ScriptInfo::IsRepeatable, GameObject::isSpawned(), Object::IsUnit(), WorldObject::IsWithinDistInMap(), Item, ScriptInfo::ItemEntry, JustDied, ScriptInfo::Kill, ScriptInfo::KillCredit, ScriptInfo::LoadPath, LOG_ERROR, m_scriptSchedule, ScriptInfo::MapID, Mo_Transport, ScriptInfo::Model, ScriptInfo::ModelID, Unit::MonsterMoveWithSpeed(), ScriptInfo::Movement, ScriptInfo::MovementDistance, ScriptInfo::MovementType, ScriptInfo::MoveTo, ScriptInfo::MovieID, Unit::NearTeleportTo(), NULL_BAG, NULL_SLOT, OBJECT_FIELD_ENTRY, ScriptInfo::Orientation, ScriptAction::ownerGUID, ScriptInfo::Path, ScriptInfo::PathID, Pet, Player, ScriptInfo::PlayMovie, ScriptInfo::Playsound, ScriptInfo::PosX, ScriptInfo::PosY, ScriptInfo::PosZ, ScriptInfo::QuestExplored, ScriptInfo::QuestID, ScriptInfo::Radius, RANDOM_MOTION_TYPE, ScriptInfo::RemoveAura, ScriptInfo::RemoveCorpse, ScriptInfo::RespawnGameobject, Unit::Say(), ScriptAction::script, SCRIPT_COMMAND_ACTIVATE_OBJECT, SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT, SCRIPT_COMMAND_CAST_SPELL, SCRIPT_COMMAND_CLOSE_DOOR, SCRIPT_COMMAND_CLOSE_GOSSIP, SCRIPT_COMMAND_CREATE_ITEM, SCRIPT_COMMAND_DESPAWN_SELF, SCRIPT_COMMAND_EMOTE, SCRIPT_COMMAND_EQUIP, SCRIPT_COMMAND_FIELD_SET, SCRIPT_COMMAND_FLAG_REMOVE, SCRIPT_COMMAND_FLAG_SET, SCRIPT_COMMAND_KILL, SCRIPT_COMMAND_KILL_CREDIT, SCRIPT_COMMAND_LOAD_PATH, SCRIPT_COMMAND_MODEL, SCRIPT_COMMAND_MOVE_TO, SCRIPT_COMMAND_MOVEMENT, SCRIPT_COMMAND_OPEN_DOOR, SCRIPT_COMMAND_ORIENTATION, SCRIPT_COMMAND_PLAY_SOUND, SCRIPT_COMMAND_PLAYMOVIE, SCRIPT_COMMAND_QUEST_EXPLORED, SCRIPT_COMMAND_REMOVE_AURA, SCRIPT_COMMAND_RESPAWN_GAMEOBJECT, SCRIPT_COMMAND_TALK, SCRIPT_COMMAND_TELEPORT_TO, SCRIPT_COMMAND_TEMP_SUMMON_CREATURE, ScriptInfo::ScriptID, ScriptsStart(), ScriptInfo::ScriptType, ScriptInfo::SearchRadius, GameObject::SetLootState(), GameObject::SetRespawnTime(), SF_CASTSPELL_SEARCH_CREATURE, SF_CASTSPELL_SOURCE_TO_SOURCE, SF_CASTSPELL_SOURCE_TO_TARGET, SF_CASTSPELL_TARGET_TO_SOURCE, SF_CASTSPELL_TARGET_TO_TARGET, SF_CASTSPELL_TRIGGERED, SF_EMOTE_USE_STATE, SF_KILLCREDIT_REWARD_GROUP, SF_ORIENTATION_FACE_TARGET, SF_PLAYSOUND_DISTANCE_RADIUS, SF_PLAYSOUND_DISTANCE_SOUND, SF_PLAYSOUND_TARGET_PLAYER, SF_REMOVEAURA_REVERSE, SF_TALK_USE_PLAYER, SF_TELEPORT_USE_CREATURE, ScriptInfo::SoundID, ScriptAction::sourceGUID, ScriptInfo::SpellID, sScriptMgr, WorldObject::SummonTrigger(), sWaypointMgr, ScriptInfo::Talk, ScriptAction::targetGUID, ScriptInfo::TeleportTo, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, ScriptInfo::TempSummonCreature, Unit::TextEmote(), ScriptInfo::TextID, Object::ToGameObject(), Object::ToPlayer(), ObjectGuid::ToString(), Object::ToUnit(), Transport, ScriptInfo::TravelTime, Unit, UNIT_NPC_EMOTESTATE, Vehicle, WAYPOINT_MOTION_TYPE, Unit::Whisper(), and Unit::Yell().

Referenced by ScriptCommandStart(), ScriptsStart(), and Update().

◆ ScriptsStart()

void Map::ScriptsStart ( std::map< uint32, std::multimap< uint32, ScriptInfo > > const &  scripts,
uint32  id,
Object source,
Object target 
)

Put scripts in the execution queue.

  • Find the script map
  • Schedule script execution for all scripts in the script map
  • If one of the effects should be immediate, launch the script execution
32{
34 ScriptMapMap::const_iterator s = scripts.find(id);
35 if (s == scripts.end())
36 return;
37
38 // prepare static data
39 ObjectGuid sourceGUID = source ? source->GetGUID() : ObjectGuid::Empty; //some script commands doesn't have source
40 ObjectGuid targetGUID = target ? target->GetGUID() : ObjectGuid::Empty;
41 ObjectGuid ownerGUID = (source && source->IsItem()) ? ((Item*)source)->GetOwnerGUID() : ObjectGuid::Empty;
42
44 ScriptMap const* s2 = &(s->second);
45 bool immedScript = false;
46 for (ScriptMap::const_iterator iter = s2->begin(); iter != s2->end(); ++iter)
47 {
48 ScriptAction sa;
49 sa.sourceGUID = sourceGUID;
50 sa.targetGUID = targetGUID;
51 sa.ownerGUID = ownerGUID;
52
53 sa.script = &iter->second;
54 m_scriptSchedule.insert(ScriptScheduleMap::value_type(time_t(GameTime::GetGameTime().count() + iter->first), sa));
55 if (iter->first == 0)
56 immedScript = true;
57
58 sScriptMgr->IncreaseScheduledScriptsCount();
59 }
61 if (/*start &&*/ immedScript && !i_scriptLock)
62 {
63 i_scriptLock = true;
65 i_scriptLock = false;
66 }
67}
std::multimap< uint32, ScriptInfo > ScriptMap
Definition ObjectMgr.h:385

References ObjectGuid::Empty, GameTime::GetGameTime(), Object::GetGUID(), i_scriptLock, Object::IsItem(), m_scriptSchedule, ScriptAction::ownerGUID, ScriptAction::script, ScriptsProcess(), ScriptAction::sourceGUID, sScriptMgr, and ScriptAction::targetGUID.

Referenced by MotionTransport::DoEventIfAny(), FlightPathMovementGenerator::DoEventIfAny(), WorldSession::DoLootRelease(), Spell::EffectDummy(), Spell::EffectScriptEffect(), Spell::EffectSendEvent(), WaypointMovementGenerator< Creature >::OnArrived(), ScriptsProcess(), and GameObject::Use().

◆ SendInitSelf()

void Map::SendInitSelf ( Player player)
1686{
1687 LOG_DEBUG("maps", "Creating player data for himself {}", player->GetGUID().ToString());
1688
1689 WorldPacket packet;
1690 UpdateData data;
1691
1692 // attach to player data current transport data
1693 if (Transport* transport = player->GetTransport())
1694 transport->BuildCreateUpdateBlockForPlayer(&data, player);
1695
1696 // build data for self presence in world at own client (one time for map)
1697 player->BuildCreateUpdateBlockForPlayer(&data, player);
1698
1699 // build and send self update packet before sending to player his own auras
1700 data.BuildPacket(packet);
1701 player->SendDirectMessage(&packet);
1702
1703 // send to player his own auras (this is needed here for timely initialization of some fields on client)
1704 player->GetAurasForTarget(player, true);
1705
1706 // clean buffers for further work
1707 packet.clear();
1708 data.Clear();
1709
1710 // build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map
1711 if (Transport* transport = player->GetTransport())
1712 for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr)
1713 if (player != (*itr) && player->HaveAtClient(*itr))
1714 (*itr)->BuildCreateUpdateBlockForPlayer(&data, player);
1715
1716 data.BuildPacket(packet);
1717 player->SendDirectMessage(&packet);
1718}
void clear()
Definition ByteBuffer.h:122
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5733
bool HaveAtClient(WorldObject const *u) const
Definition Player.cpp:11473
void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) override
Definition Player.cpp:3837
void GetAurasForTarget(Unit *target, bool force=false)
Definition Player.cpp:12121
void Clear()
Definition UpdateData.cpp:71
Transport * GetTransport() const
Definition Object.h:597

References Player::BuildCreateUpdateBlockForPlayer(), UpdateData::BuildPacket(), UpdateData::Clear(), ByteBuffer::clear(), Player::GetAurasForTarget(), Object::GetGUID(), WorldObject::GetTransport(), Player::HaveAtClient(), LOG_DEBUG, Player::SendDirectMessage(), and ObjectGuid::ToString().

Referenced by AddPlayerToMap(), and WorldSession::HandlePlayerLoginToCharInWorld().

◆ SendInitTransports()

void Map::SendInitTransports ( Player player)
1721{
1722 // Hack to send out transports
1723 UpdateData transData;
1724 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
1725 if (*itr != player->GetTransport())
1726 (*itr)->BuildCreateUpdateBlockForPlayer(&transData, player);
1727
1728 WorldPacket packet;
1729 transData.BuildPacket(packet);
1730 player->GetSession()->SendPacket(&packet);
1731}
WorldSession * GetSession() const
Definition Player.h:2005
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:226

References _transports, UpdateData::BuildPacket(), Player::GetSession(), WorldObject::GetTransport(), and WorldSession::SendPacket().

Referenced by AddPlayerToMap(), and WorldSession::HandlePlayerLoginToCharInWorld().

◆ SendObjectUpdates()

void Map::SendObjectUpdates ( )
private
1759{
1760 UpdateDataMapType update_players;
1761 UpdatePlayerSet player_set;
1762
1763 while (!_updateObjects.empty())
1764 {
1765 Object* obj = *_updateObjects.begin();
1766 ASSERT(obj->IsInWorld());
1767
1768 _updateObjects.erase(_updateObjects.begin());
1769 obj->BuildUpdate(update_players, player_set);
1770 }
1771
1772 WorldPacket packet; // here we allocate a std::vector with a size of 0x10000
1773 for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter)
1774 {
1775 iter->second.BuildPacket(packet);
1776 iter->first->GetSession()->SendPacket(&packet);
1777 packet.clear(); // clean the string
1778 }
1779}
GuidUnorderedSet UpdatePlayerSet
Definition Object.h:98
std::unordered_map< Player *, UpdateData > UpdateDataMapType
Definition Object.h:97
virtual void BuildUpdate(UpdateDataMapType &, UpdatePlayerSet &)
Definition Object.h:191

References _updateObjects, ASSERT, Object::BuildUpdate(), ByteBuffer::clear(), and Object::IsInWorld().

Referenced by Update().

◆ SendRemoveTransports()

void Map::SendRemoveTransports ( Player player)
1734{
1735 // Hack to send out transports
1736 UpdateData transData;
1737 for (TransportsContainer::const_iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
1738 if (*itr != player->GetTransport())
1739 (*itr)->BuildOutOfRangeUpdateBlock(&transData);
1740
1741 // pussywizard: remove static transports from client
1742 for (GuidUnorderedSet::const_iterator it = player->m_clientGUIDs.begin(); it != player->m_clientGUIDs.end(); )
1743 {
1744 if ((*it).IsTransport())
1745 {
1746 transData.AddOutOfRangeGUID(*it);
1747 it = player->m_clientGUIDs.erase(it);
1748 }
1749 else
1750 ++it;
1751 }
1752
1753 WorldPacket packet;
1754 transData.BuildPacket(packet);
1755 player->GetSession()->SendPacket(&packet);
1756}
void AddOutOfRangeGUID(ObjectGuid guid)
Definition UpdateData.cpp:31

References _transports, UpdateData::AddOutOfRangeGUID(), UpdateData::BuildPacket(), Player::GetSession(), WorldObject::GetTransport(), Player::m_clientGUIDs, and WorldSession::SendPacket().

Referenced by RemovePlayerFromMap().

◆ SendToPlayers()

void Map::SendToPlayers ( WorldPacket const *  data) const
1937{
1938 for (MapRefMgr::const_iterator itr = m_mapRefMgr.begin(); itr != m_mapRefMgr.end(); ++itr)
1939 itr->GetSource()->GetSession()->SendPacket(data);
1940}

References MapRefMgr::begin(), MapRefMgr::end(), and m_mapRefMgr.

Referenced by boss_ossirian::JustEngagedWith(), and InstanceScript::SendEncounterUnit().

◆ SendZoneDynamicInfo()

void Map::SendZoneDynamicInfo ( Player player)
2903{
2904 uint32 zoneId = player->GetZoneId();
2905 ZoneDynamicInfoMap::const_iterator itr = _zoneDynamicInfo.find(zoneId);
2906 if (itr == _zoneDynamicInfo.end())
2907 return;
2908
2909 if (uint32 music = itr->second.MusicId)
2910 player->SendDirectMessage(WorldPackets::Misc::PlayMusic(music).Write());
2911
2912 if (WeatherState weatherId = itr->second.WeatherId)
2913 {
2914 WorldPackets::Misc::Weather weather(weatherId, itr->second.WeatherGrade);
2915 player->SendDirectMessage(weather.Write());
2916 }
2917
2918 if (uint32 overrideLight = itr->second.OverrideLightId)
2919 {
2920 WorldPacket data(SMSG_OVERRIDE_LIGHT, 4 + 4 + 1);
2921 data << uint32(_defaultLight);
2922 data << uint32(overrideLight);
2923 data << uint32(itr->second.LightFadeInTime);
2924 player->SendDirectMessage(&data);
2925 }
2926}
ZoneDynamicInfoMap _zoneDynamicInfo
Definition Map.h:618
uint32 GetZoneId() const
Definition Object.cpp:3148
Definition MiscPackets.h:58
Definition MiscPackets.h:32
@ SMSG_OVERRIDE_LIGHT
Definition Opcodes.h:1072
WeatherState
Definition Weather.h:45

References _defaultLight, _zoneDynamicInfo, WorldObject::GetZoneId(), Player::SendDirectMessage(), SMSG_OVERRIDE_LIGHT, and WorldPackets::Misc::Weather::Write().

Referenced by AddPlayerToMap(), and WorldSession::HandlePlayerLoginToCharInWorld().

◆ SetVisibilityRange()

◆ SetZoneMusic()

void Map::SetZoneMusic ( uint32  zoneId,
uint32  musicId 
)

◆ SetZoneOverrideLight()

void Map::SetZoneOverrideLight ( uint32  zoneId,
uint32  lightId,
Milliseconds  fadeInTime 
)
2985{
2986 if (_zoneDynamicInfo.find(zoneId) == _zoneDynamicInfo.end())
2987 _zoneDynamicInfo.insert(ZoneDynamicInfoMap::value_type(zoneId, ZoneDynamicInfo()));
2988
2989 ZoneDynamicInfo& info = _zoneDynamicInfo[zoneId];
2990 info.OverrideLightId = lightId;
2991 info.LightFadeInTime = static_cast<uint32>(fadeInTime.count());
2992 Map::PlayerList const& players = GetPlayers();
2993
2994 if (!players.IsEmpty())
2995 {
2996 WorldPacket data(SMSG_OVERRIDE_LIGHT, 4 + 4 + 4);
2997 data << uint32(_defaultLight);
2998 data << uint32(lightId);
2999 data << uint32(static_cast<uint32>(fadeInTime.count()));
3000
3001 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
3002 if (Player* player = itr->GetSource())
3003 if (player->GetZoneId() == zoneId)
3004 player->SendDirectMessage(&data);
3005 }
3006}
uint32 LightFadeInTime
Definition Map.h:136
uint32 OverrideLightId
Definition Map.h:135

References _defaultLight, _zoneDynamicInfo, MapRefMgr::begin(), MapRefMgr::end(), GetPlayers(), LinkedListHead::IsEmpty(), ZoneDynamicInfo::LightFadeInTime, ZoneDynamicInfo::OverrideLightId, and SMSG_OVERRIDE_LIGHT.

Referenced by boss_the_lich_king::boss_the_lich_kingAI::DoAction(), boss_malygos::boss_malygosAI::EnterEvadeMode(), boss_malygos::boss_malygosAI::MovementInform(), boss_the_lich_king::boss_the_lich_kingAI::SpellHitTarget(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), and boss_malygos::boss_malygosAI::UpdateAI().

◆ SetZoneWeather()

void Map::SetZoneWeather ( uint32  zoneId,
WeatherState  weatherId,
float  weatherGrade 
)
2964{
2965 if (_zoneDynamicInfo.find(zoneId) == _zoneDynamicInfo.end())
2966 _zoneDynamicInfo.insert(ZoneDynamicInfoMap::value_type(zoneId, ZoneDynamicInfo()));
2967
2968 ZoneDynamicInfo& info = _zoneDynamicInfo[zoneId];
2969 info.WeatherId = weatherId;
2970 info.WeatherGrade = weatherGrade;
2971 Map::PlayerList const& players = GetPlayers();
2972
2973 if (!players.IsEmpty())
2974 {
2975 WorldPackets::Misc::Weather weather(weatherId, weatherGrade);
2976
2977 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2978 if (Player* player = itr->GetSource())
2979 if (player->GetZoneId() == zoneId)
2980 player->SendDirectMessage(weather.Write());
2981 }
2982}
WeatherState WeatherId
Definition Map.h:133
float WeatherGrade
Definition Map.h:134

References _zoneDynamicInfo, MapRefMgr::begin(), MapRefMgr::end(), GetPlayers(), LinkedListHead::IsEmpty(), ZoneDynamicInfo::WeatherGrade, ZoneDynamicInfo::WeatherId, and WorldPackets::Misc::Weather::Write().

Referenced by boss_the_lich_king::boss_the_lich_kingAI::DoAction(), boss_akilzon::SetWeather(), boss_the_lich_king::boss_the_lich_kingAI::SpellHitTarget(), and npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI().

◆ SummonCreature()

TempSummon * Map::SummonCreature ( uint32  entry,
Position const &  pos,
SummonPropertiesEntry const *  properties = nullptr,
uint32  duration = 0,
WorldObject summoner = nullptr,
uint32  spellId = 0,
uint32  vehId = 0,
bool  visibleBySummonerOnly = false 
)
2175{
2176 uint32 mask = UNIT_MASK_SUMMON;
2177 if (properties)
2178 {
2179 switch (properties->Category)
2180 {
2182 mask = UNIT_MASK_GUARDIAN;
2183 break;
2185 mask = UNIT_MASK_PUPPET;
2186 break;
2188 mask = UNIT_MASK_MINION;
2189 break;
2193 {
2194 switch (properties->Type)
2195 {
2196 case SUMMON_TYPE_MINION:
2199 mask = UNIT_MASK_GUARDIAN;
2200 break;
2201 case SUMMON_TYPE_TOTEM:
2203 mask = UNIT_MASK_TOTEM;
2204 break;
2207 mask = UNIT_MASK_SUMMON;
2208 break;
2210 case SUMMON_TYPE_JEEVES:
2211 mask = UNIT_MASK_MINION;
2212 break;
2213 default:
2214 if (properties->Flags & 512) // Mirror Image, Summon Gargoyle
2215 mask = UNIT_MASK_GUARDIAN;
2216 break;
2217 }
2218 break;
2219 }
2220 default:
2221 return nullptr;
2222 }
2223 }
2224
2226 if (summoner)
2227 phase = summoner->GetPhaseMask();
2228
2229 TempSummon* summon = nullptr;
2230 switch (mask)
2231 {
2232 case UNIT_MASK_SUMMON:
2233 summon = new TempSummon(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty, false);
2234 break;
2235 case UNIT_MASK_GUARDIAN:
2236 summon = new Guardian(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty, false);
2237 break;
2238 case UNIT_MASK_PUPPET:
2239 summon = new Puppet(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
2240 break;
2241 case UNIT_MASK_TOTEM:
2242 summon = new Totem(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
2243 break;
2244 case UNIT_MASK_MINION:
2245 summon = new Minion(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty, false);
2246 break;
2247 default:
2248 return nullptr;
2249 }
2250
2251 EnsureGridLoaded(Cell(pos.GetPositionX(), pos.GetPositionY()));
2252 if (!summon->Create(GenerateLowGuid<HighGuid::Unit>(), this, phase, entry, vehId, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()))
2253 {
2254 delete summon;
2255 return nullptr;
2256 }
2257
2258 summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId);
2259
2260 summon->SetHomePosition(pos);
2261
2262 summon->InitStats(duration);
2263
2264 summon->SetVisibleBySummonerOnly(visibleBySummonerOnly);
2265
2266 bool summonerHasTransport = summoner && summoner->GetTransport();
2267 bool summonerIsVehicle = summoner && summoner->IsUnit() && summoner->ToUnit()->IsVehicle();
2268 bool checkTransport = summon->GetOwnerGUID().IsPlayer() || (summonerHasTransport && !summonerIsVehicle);
2269 if (!AddToMap(summon->ToCreature(), checkTransport))
2270 {
2271 delete summon;
2272 return nullptr;
2273 }
2274
2275 summon->InitSummon();
2276
2277 // call MoveInLineOfSight for nearby creatures
2278 Acore::AIRelocationNotifier notifier(*summon);
2279 Cell::VisitAllObjects(summon, notifier, GetVisibilityRange());
2280
2281 return summon;
2282}
@ PHASEMASK_NORMAL
Definition Object.h:60
@ SUMMON_TYPE_VEHICLE2
Definition SharedDefines.h:3304
@ SUMMON_TYPE_LIGHTWELL
Definition SharedDefines.h:3305
@ SUMMON_TYPE_MINION
Definition SharedDefines.h:3297
@ SUMMON_TYPE_GUARDIAN
Definition SharedDefines.h:3296
@ SUMMON_TYPE_JEEVES
Definition SharedDefines.h:3306
@ SUMMON_TYPE_TOTEM
Definition SharedDefines.h:3298
@ SUMMON_TYPE_VEHICLE
Definition SharedDefines.h:3303
@ SUMMON_TYPE_MINIPET
Definition SharedDefines.h:3299
@ SUMMON_TYPE_GUARDIAN2
Definition SharedDefines.h:3300
@ SUMMON_CATEGORY_PET
Definition SharedDefines.h:3285
@ SUMMON_CATEGORY_VEHICLE
Definition SharedDefines.h:3287
@ SUMMON_CATEGORY_ALLY
Definition SharedDefines.h:3284
@ SUMMON_CATEGORY_PUPPET
Definition SharedDefines.h:3286
@ SUMMON_CATEGORY_WILD
Definition SharedDefines.h:3283
@ SUMMON_CATEGORY_UNK
Definition SharedDefines.h:3288
@ UNIT_MASK_PUPPET
Definition UnitDefines.h:162
@ UNIT_MASK_TOTEM
Definition UnitDefines.h:159
@ UNIT_MASK_SUMMON
Definition UnitDefines.h:156
@ UNIT_MASK_GUARDIAN
Definition UnitDefines.h:158
@ UNIT_MASK_MINION
Definition UnitDefines.h:157
@ UNIT_CREATED_BY_SPELL
Definition UpdateFields.h:138
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:340
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehId, float x, float y, float z, float ang, const CreatureData *data=nullptr)
Definition Creature.cpp:1131
Definition TemporarySummon.h:96
float GetVisibilityRange() const
Definition Map.h:195
Definition TemporarySummon.h:77
bool IsPlayer() const
Definition ObjectGuid.h:168
Definition TemporarySummon.h:115
Definition TemporarySummon.h:40
virtual void InitSummon()
Definition TemporarySummon.cpp:252
virtual void InitStats(uint32 lifetime)
Definition TemporarySummon.cpp:200
void SetVisibleBySummonerOnly(bool visibleBySummonerOnly)
Definition TemporarySummon.h:61
Definition Totem.h:51
ObjectGuid GetOwnerGUID() const
Definition Unit.h:684
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:21372
Definition GridNotifiers.h:91
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:185

References AddToMap(), SummonPropertiesEntry::Category, Creature::Create(), ObjectGuid::Empty, EnsureGridLoaded(), SummonPropertiesEntry::Flags, Object::GetGUID(), Position::GetOrientation(), Unit::GetOwnerGUID(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::GetTransport(), GetVisibilityRange(), TempSummon::InitStats(), TempSummon::InitSummon(), ObjectGuid::IsPlayer(), Object::IsUnit(), Unit::IsVehicle(), PHASEMASK_NORMAL, Creature::SetHomePosition(), Unit::SetUInt32Value(), TempSummon::SetVisibleBySummonerOnly(), SUMMON_CATEGORY_ALLY, SUMMON_CATEGORY_PET, SUMMON_CATEGORY_PUPPET, SUMMON_CATEGORY_UNK, SUMMON_CATEGORY_VEHICLE, SUMMON_CATEGORY_WILD, SUMMON_TYPE_GUARDIAN, SUMMON_TYPE_GUARDIAN2, SUMMON_TYPE_JEEVES, SUMMON_TYPE_LIGHTWELL, SUMMON_TYPE_MINION, SUMMON_TYPE_MINIPET, SUMMON_TYPE_TOTEM, SUMMON_TYPE_VEHICLE, SUMMON_TYPE_VEHICLE2, Object::ToCreature(), Object::ToUnit(), SummonPropertiesEntry::Type, UNIT_CREATED_BY_SPELL, UNIT_MASK_GUARDIAN, UNIT_MASK_MINION, UNIT_MASK_PUPPET, UNIT_MASK_SUMMON, UNIT_MASK_TOTEM, and Cell::VisitAllObjects().

Referenced by instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::ChromieWhisper(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::DoSummonGrandChampion(), Spell::EffectSummonType(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::HandleOutro(), spell_temple_of_atal_hakkar_awaken_the_soulflayer::HandleSendEvent(), spell_halion_damage_aoe_summon::HandleSummon(), spell_putricide_mutated_transformation::HandleSummon(), spell_wintergrasp_create_vehicle::HandleSummon(), boss_varos::boss_varosAI::JustDied(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::OnPlayerEnter(), instance_ulduar::instance_ulduar_InstanceMapScript::OnPlayerEnter(), at_tyrannus_event_starter::OnTrigger(), instance_karazhan::instance_karazhan_InstanceMapScript::OnUnitDeath(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), spell_halion_twilight_phasing::Phase(), instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::ProcessEvent(), instance_sethekk_halls::instance_sethekk_halls_InstanceMapScript::ProcessEvent(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::ProcessEvent(), instance_stratholme::instance_stratholme_InstanceMapScript::ProcessSlaughterEvent(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::ReplaceMoiraIfSaved(), boss_ossirian::Reset(), ScheduleCreatureRespawn(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::ScheduleNextPortal(), instance_gundrak::instance_gundrak_InstanceMapScript::SetBossState(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::SetBossState(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::SetData(), instance_scholomance::instance_scholomance_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_pit_of_saron::instance_pit_of_saron_InstanceScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::SetData(), instance_violet_hold::instance_violet_hold_InstanceMapScript::SetData(), instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounterVehicles(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::SpawnPyramidWave(), SummonCreatureGroup(), Spell::SummonGuardian(), instance_zulaman::instance_zulaman_InstanceMapScript::SummonHostage(), instance_molten_core::instance_molten_core_InstanceMapScript::SummonMajordomoExecutus(), instance_blackrock_spire::instance_blackrock_spireMapScript::SummonSolakarWave(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::Update(), 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_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::Update(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_brann_bronzebeard_algalon::npc_brann_bronzebeard_algalonAI::UpdateAI(), and instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::UpdateEventState().

◆ SummonCreatureGroup()

void Map::SummonCreatureGroup ( uint8  group,
std::list< TempSummon * > *  list = nullptr 
)

Summons group of creatures.

Parameters
groupId of group to summon.
listList to store pointers to summoned creatures.
2292{
2293 std::vector<TempSummonData> const* data = sObjectMgr->GetSummonGroup(GetId(), SUMMONER_TYPE_MAP, group);
2294 if (!data)
2295 return;
2296
2297 for (std::vector<TempSummonData>::const_iterator itr = data->begin(); itr != data->end(); ++itr)
2298 if (TempSummon* summon = SummonCreature(itr->entry, itr->pos, nullptr, itr->time))
2299 if (list)
2300 list->push_back(summon);
2301}
@ SUMMONER_TYPE_MAP
Definition TemporarySummon.h:27

References GetId(), sObjectMgr, SummonCreature(), and SUMMONER_TYPE_MAP.

Referenced by at_ancient_leaf::OnTrigger(), and instance_hyjal::instance_mount_hyjal_InstanceMapScript::ScheduleWaves().

◆ SummonGameObject() [1/2]

GameObject * Map::SummonGameObject ( uint32  entry,
float  x,
float  y,
float  z,
float  ang,
float  rotation0,
float  rotation1,
float  rotation2,
float  rotation3,
uint32  respawnTime,
bool  checkTransport = true 
)
2316{
2317 GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry);
2318 if (!goinfo)
2319 {
2320 LOG_ERROR("sql.sql", "Gameobject template {} not found in database!", entry);
2321 return nullptr;
2322 }
2323
2324 GameObject* go = sObjectMgr->IsGameObjectStaticTransport(entry) ? new StaticTransport() : new GameObject();
2325 if (!go->Create(GenerateLowGuid<HighGuid::GameObject>(), entry, this, PHASEMASK_NORMAL, x, y, z, ang, G3D::Quat(rotation0, rotation1, rotation2, rotation3), 100, GO_STATE_READY))
2326 {
2327 delete go;
2328 return nullptr;
2329 }
2330
2331 // Xinef: if gameobject is temporary, set custom spellid
2332 if (respawnTime)
2333 go->SetSpellId(1);
2334
2335 go->SetRespawnTime(respawnTime);
2336 go->SetSpawnedByDefault(false);
2337 AddToMap(go, checkTransport);
2338 return go;
2339}
virtual bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map *map, uint32 phaseMask, float x, float y, float z, float ang, G3D::Quat const &rotation, uint32 animprogress, GOState go_state, uint32 artKit=0)
Definition GameObject.cpp:254
void SetSpawnedByDefault(bool b)
Definition GameObject.h:196
void SetSpellId(uint32 id)
Definition GameObject.h:176
Definition Transport.h:113
Definition GameObjectData.h:31

References AddToMap(), GameObject::Create(), GO_STATE_READY, LOG_ERROR, PHASEMASK_NORMAL, GameObject::SetRespawnTime(), GameObject::SetSpawnedByDefault(), GameObject::SetSpellId(), and sObjectMgr.

Referenced by instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnGameObjectCreate(), SummonGameObject(), and instance_sunken_temple::instance_sunken_temple_InstanceMapScript::Update().

◆ SummonGameObject() [2/2]

GameObject * Map::SummonGameObject ( 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 
)
2342{
2343 return SummonGameObject(entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime, checkTransport);
2344}
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true)
Definition Object.cpp:2315

References Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), and SummonGameObject().

◆ SwitchGridContainers() [1/3]

template<>
void Map::SwitchGridContainers ( Creature obj,
bool  on 
)
184{
187 if (!p.IsCoordValid())
188 {
189 LOG_ERROR("maps", "Map::SwitchGridContainers: Object {} has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
190 obj->GetGUID().ToString(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
191 return;
192 }
193
194 Cell cell(p);
195 if (!IsGridLoaded(GridCoord(cell.data.Part.grid_x, cell.data.Part.grid_y)))
196 return;
197
198 LOG_DEBUG("maps", "Switch object {} from grid[{}, {}] {}", obj->GetGUID().ToString(), cell.GridX(), cell.GridY(), on);
199 MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
200 ASSERT(grid);
201
202 obj->RemoveFromGrid(); //This step is not really necessary but we want to do ASSERT in remove/add
203
204 if (on)
205 {
206 grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
207 AddWorldObject(obj);
208 }
209 else
210 {
211 grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
213 }
214
215 obj->m_isTempWorldObject = on;
216}
bool m_isTempWorldObject
Definition Creature.h:379
void AddWorldObject(WorldObject *obj)
Definition Map.h:327
void RemoveWorldObject(WorldObject *obj)
Definition Map.h:328

References MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddWorldObject(), AddWorldObject(), ASSERT, Cell::CellX(), Cell::CellY(), Acore::ComputeCellCoord(), Cell::data, Object::GetGUID(), GetMapGrid(), Position::GetPositionX(), Position::GetPositionY(), Cell::grid_x, Cell::grid_y, Cell::GridX(), Cell::GridY(), CoordPair< LIMIT >::IsCoordValid(), IsGridLoaded(), WorldObject::IsPermanentWorldObject(), LOG_DEBUG, LOG_ERROR, Creature::m_isTempWorldObject, Cell::Part, GridObject< T >::RemoveFromGrid(), RemoveWorldObject(), ObjectGuid::ToString(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

◆ SwitchGridContainers() [2/3]

template<>
void Map::SwitchGridContainers ( GameObject obj,
bool  on 
)
220{
223 if (!p.IsCoordValid())
224 {
225 LOG_ERROR("maps", "Map::SwitchGridContainers: Object {} has invalid coordinates X:{} Y:{} grid cell [{}:{}]",
226 obj->GetGUID().ToString(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
227 return;
228 }
229
230 Cell cell(p);
231 if (!IsGridLoaded(GridCoord(cell.data.Part.grid_x, cell.data.Part.grid_y)))
232 return;
233
234 //LOG_DEBUG(LOG_FILTER_MAPS, "Switch object {} from grid[{}, {}] {}", obj->GetGUID().ToString(), cell.data.Part.grid_x, cell.data.Part.grid_y, on);
235 MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
236 ASSERT(grid);
237
238 obj->RemoveFromGrid(); //This step is not really necessary but we want to do ASSERT in remove/add
239
240 if (on)
241 {
242 grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
243 AddWorldObject(obj);
244 }
245 else
246 {
247 grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
249 }
250}

References MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddGridObject(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::AddWorldObject(), AddWorldObject(), ASSERT, Cell::CellX(), Cell::CellY(), Acore::ComputeCellCoord(), Cell::data, Object::GetGUID(), GetMapGrid(), Position::GetPositionX(), Position::GetPositionY(), Cell::grid_x, Cell::grid_y, Cell::GridX(), Cell::GridY(), CoordPair< LIMIT >::IsCoordValid(), IsGridLoaded(), WorldObject::IsPermanentWorldObject(), LOG_ERROR, Cell::Part, GridObject< T >::RemoveFromGrid(), RemoveWorldObject(), ObjectGuid::ToString(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

◆ SwitchGridContainers() [3/3]

template<class T >
void Map::SwitchGridContainers ( T *  obj,
bool  on 
)
179{
180}

◆ ToBattlegroundMap() [1/2]

◆ ToBattlegroundMap() [2/2]

BattlegroundMap const * Map::ToBattlegroundMap ( ) const
inline
397{ if (IsBattlegroundOrArena()) return reinterpret_cast<BattlegroundMap const*>(this); return nullptr; }

References IsBattlegroundOrArena().

◆ ToInstanceMap() [1/2]

◆ ToInstanceMap() [2/2]

InstanceMap const * Map::ToInstanceMap ( ) const
inline
394{ if (IsDungeon()) return (const InstanceMap*)((InstanceMap*)this); else return nullptr; }

References IsDungeon().

◆ ToMapInstanced() [1/2]

MapInstanced * Map::ToMapInstanced ( )
inline
390{ if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); else return nullptr; }
Definition MapInstanced.h:26
bool Instanceable() const
Definition Map.h:294

References Instanceable().

Referenced by MapMgr::DoForAllMaps(), and MapMgr::DoForAllMapsWithMapId().

◆ ToMapInstanced() [2/2]

MapInstanced const * Map::ToMapInstanced ( ) const
inline
391{ if (Instanceable()) return (const MapInstanced*)((MapInstanced*)this); else return nullptr; }

References Instanceable().

◆ UnloadAll()

void Map::UnloadAll ( )
virtual

Reimplemented in InstanceMap, and MapInstanced.

1081{
1082 // clear all delayed moves, useless anyway do this moves before map unload.
1083 _creaturesToMove.clear();
1084 _gameObjectsToMove.clear();
1085
1087 {
1088 MapGridType& grid(*i->GetSource());
1089 ++i;
1090 UnloadGrid(grid); // deletes the grid and removes it from the GridRefMgr
1091 }
1092
1093 // pussywizard: crashfix, some npc can be left on transport (not a default passenger)
1094 if (!AllTransportsEmpty())
1096
1097 for (TransportsContainer::iterator itr = _transports.begin(); itr != _transports.end();)
1098 {
1099 MotionTransport* transport = *itr;
1100 ++itr;
1101
1102 transport->RemoveFromWorld();
1103 delete transport;
1104 }
1105
1106 _transports.clear();
1107
1108 for (auto& cellCorpsePair : _corpsesByCell)
1109 {
1110 for (Corpse* corpse : cellCorpsePair.second)
1111 {
1112 corpse->RemoveFromWorld();
1113 corpse->ResetMap();
1114 delete corpse;
1115 }
1116 }
1117
1118 _corpsesByCell.clear();
1119 _corpsesByPlayer.clear();
1120 _corpseBones.clear();
1121}
Definition GridRefMgr.h:28
iterator end()
Definition GridRefMgr.h:36
void AllTransportsRemovePassengers()
Definition Map.cpp:2758
bool UnloadGrid(MapGridType &grid)
Definition Map.cpp:1054
bool AllTransportsEmpty() const
Definition Map.cpp:2749

References _corpseBones, _corpsesByCell, _corpsesByPlayer, _creaturesToMove, _gameObjectsToMove, _transports, AllTransportsEmpty(), AllTransportsRemovePassengers(), GridRefMgr< OBJECT >::end(), GameObject::RemoveFromWorld(), and UnloadGrid().

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

◆ UnloadGrid()

bool Map::UnloadGrid ( MapGridType grid)
1055{
1056 _mapGridManager.UnloadGrid(grid.GetX(), grid.GetY());
1057
1058 ASSERT(i_objectsToRemove.empty());
1059 LOG_DEBUG("maps", "Unloading grid[{}, {}] for map {} finished", grid.GetX(), grid.GetY(), GetId());
1060 return true;
1061}
void UnloadGrid(uint16 const x, uint16 const y)
Definition MapGridManager.cpp:38
uint16 GetX() const
Definition MapGrid.h:42
uint16 GetY() const
Definition MapGrid.h:43

References _mapGridManager, ASSERT, GetId(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetX(), MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::GetY(), i_objectsToRemove, LOG_DEBUG, and MapGridManager::UnloadGrid().

Referenced by UnloadAll().

◆ Update()

void Map::Update ( const uint32  t_diff,
const uint32  s_diff,
bool  thread = true 
)
virtual

update active cells around players and active objects

  • Process necessary scripts

Reimplemented in InstanceMap, and MapInstanced.

587{
588 if (t_diff)
589 _dynamicTree.update(t_diff);
590
591 // Update world sessions and players
593 {
594 Player* player = m_mapRefIter->GetSource();
595 if (player && player->IsInWorld())
596 {
597 // Update session
598 WorldSession* session = player->GetSession();
599 MapSessionFilter updater(session);
600 session->Update(s_diff, updater);
601
602 // update players at tick
603 if (!t_diff)
604 player->Update(s_diff);
605 }
606 }
607
609
610 if (!t_diff)
611 {
613 return;
614 }
615
619
620 // Prepare object updaters
621 Acore::ObjectUpdater updater(t_diff, false);
622
623 // For creature
625
626 // For pets
628
629 // For large creatures
630 Acore::ObjectUpdater largeObjectUpdater(t_diff, true);
631 TypeContainerVisitor<Acore::ObjectUpdater, GridTypeMapContainer> grid_large_object_update(largeObjectUpdater);
632 TypeContainerVisitor<Acore::ObjectUpdater, WorldTypeMapContainer> world_large_object_update(largeObjectUpdater);
633
634 // pussywizard: container for far creatures in combat with players
635 std::vector<Creature*> updateList;
636 updateList.reserve(10);
637
638 // Update non-player active objects
640 {
643
644 if (obj && obj->IsInWorld())
645 VisitNearbyCellsOf(obj, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update);
646 }
647
648 // Update players and their associated objects
650 {
651 Player* player = m_mapRefIter->GetSource();
652
653 if (!player || !player->IsInWorld())
654 continue;
655
656 player->Update(s_diff);
657 VisitNearbyCellsOfPlayer(player, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update);
658
659 // If player is using far sight, update viewpoint
660 if (WorldObject* viewPoint = player->GetViewpoint())
661 {
662 if (Creature* viewCreature = viewPoint->ToCreature())
663 {
664 VisitNearbyCellsOf(viewCreature, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update);
665 }
666 else if (DynamicObject* viewObject = viewPoint->ToDynObject())
667 {
668 VisitNearbyCellsOf(viewObject, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update);
669 }
670 }
671
672 // handle updates for creatures in combat with player and are more than X yards away
673 if (player->IsInCombat())
674 {
675 updateList.clear();
676 float rangeSq = player->GetGridActivationRange() - 1.0f;
677 rangeSq *= rangeSq;
678
679 HostileReference* ref = player->getHostileRefMgr().getFirst();
680 while (ref)
681 {
682 if (Unit* unit = ref->GetSource()->GetOwner())
683 if (Creature* cre = unit->ToCreature())
684 if (cre->FindMap() == player->FindMap() && cre->GetExactDist2dSq(player) > rangeSq)
685 updateList.push_back(cre);
686 ref = ref->next();
687 }
688
689 for (Creature* cre : updateList)
690 VisitNearbyCellsOf(cre, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update);
691 }
692 }
693
694 // Update transports - pussywizard: transports updated after VisitNearbyCellsOf, grids around are loaded, everything ok
696 {
699
700 if (transport->IsInWorld())
701 transport->Update(t_diff);
702 }
703
705
707 if (!m_scriptSchedule.empty())
708 {
709 i_scriptLock = true;
711 i_scriptLock = false;
712 }
713
717
719
720 sScriptMgr->OnMapUpdate(this, t_diff);
721
722 METRIC_VALUE("map_creatures", uint64(GetObjectsStore().Size<Creature>()),
723 METRIC_TAG("map_id", std::to_string(GetId())),
724 METRIC_TAG("map_instanceid", std::to_string(GetInstanceId())));
725
726 METRIC_VALUE("map_gameobjects", uint64(GetObjectsStore().Size<GameObject>()),
727 METRIC_TAG("map_id", std::to_string(GetId())),
728 METRIC_TAG("map_instanceid", std::to_string(GetInstanceId())));
729}
std::uint64_t uint64
Definition Define.h:106
#define METRIC_VALUE(category, value,...)
Definition Metric.h:193
#define METRIC_TAG(name, value)
Definition Metric.h:159
void update(uint32 diff)
Definition DynamicTree.cpp:142
HostileReference * getFirst()
Definition HostileRefMgr.h:59
Definition ThreatMgr.h:48
HostileReference * next()
Definition ThreatMgr.h:115
Definition WorldSession.h:244
void HandleDelayedVisibility()
Definition Map.cpp:731
MapStoredObjectTypesContainer & GetObjectsStore()
Definition Map.h:364
void MoveAllGameObjectsInMoveList()
Definition Map.cpp:996
void VisitNearbyCellsOfPlayer(Player *player, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &gridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &worldVisitor, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &largeGridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &largeWorldVisitor)
Definition Map.cpp:495
void resetMarkedCellsLarge()
Definition Map.h:320
void resetMarkedCells()
Definition Map.h:317
void MoveAllDynamicObjectsInMoveList()
Definition Map.cpp:1025
void VisitNearbyCellsOf(WorldObject *obj, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &gridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &worldVisitor, TypeContainerVisitor< Acore::ObjectUpdater, GridTypeMapContainer > &largeGridVisitor, TypeContainerVisitor< Acore::ObjectUpdater, WorldTypeMapContainer > &largeWorldVisitor)
Definition Map.cpp:530
void MoveAllCreaturesInMoveList()
Definition Map.cpp:967
MapRefMgr::iterator m_mapRefIter
Definition Map.h:554
void SendObjectUpdates()
Definition Map.cpp:1758
void Update(uint32 diff) override
Definition Transport.cpp:138
DynamicObject * ToDynObject()
Definition Object.h:221
void Update(uint32 time) override
Definition PlayerUpdates.cpp:53
WorldObject * GetViewpoint() const
Definition Player.cpp:13270
FROM * GetSource() const
Definition Reference.h:97
TaskScheduler & Update(success_t const &callback=EmptyCallback)
Definition TaskScheduler.cpp:27
Unit * GetOwner() const
Definition ThreatMgr.h:236
Definition TypeContainerVisitor.h:84
bool IsInCombat() const
Definition Unit.h:893
float GetGridActivationRange() const
Definition Object.cpp:1634
Player session in the World.
Definition WorldSession.h:330
bool Update(uint32 diff, PacketFilter &updater)
Update the WorldSession (triggered by World update)
Definition WorldSession.cpp:301
Definition GridNotifiers.h:158

References _creatureRespawnScheduler, _dynamicTree, _transports, _transportsUpdateIter, MapRefMgr::begin(), MapRefMgr::end(), WorldObject::FindMap(), HostileRefMgr::getFirst(), WorldObject::GetGridActivationRange(), Unit::getHostileRefMgr(), GetId(), GetInstanceId(), GetObjectsStore(), ThreatMgr::GetOwner(), Player::GetSession(), Reference< TO, FROM >::GetSource(), Player::GetViewpoint(), HandleDelayedVisibility(), i_scriptLock, Unit::IsInCombat(), Object::IsInWorld(), m_activeNonPlayers, m_activeNonPlayersIter, m_mapRefIter, m_mapRefMgr, m_scriptSchedule, METRIC_TAG, METRIC_VALUE, MoveAllCreaturesInMoveList(), MoveAllDynamicObjectsInMoveList(), MoveAllGameObjectsInMoveList(), HostileReference::next(), resetMarkedCells(), resetMarkedCellsLarge(), ScriptsProcess(), SendObjectUpdates(), sScriptMgr, Object::ToCreature(), Object::ToDynObject(), TaskScheduler::Update(), DynamicMapTree::update(), MotionTransport::Update(), WorldSession::Update(), Player::Update(), VisitNearbyCellsOf(), and VisitNearbyCellsOfPlayer().

Referenced by MapUpdateRequest::call(), InstanceMap::Update(), and MapInstanced::Update().

◆ UpdateEncounterState()

void Map::UpdateEncounterState ( EncounterCreditType  type,
uint32  creditEntry,
Unit source 
)
2656{
2657 Difficulty difficulty_fixed = (IsSharedDifficultyMap(GetId()) ? Difficulty(GetDifficulty() % 2) : GetDifficulty());
2658 DungeonEncounterList const* encounters;
2659 // 631 : ICC - 724 : Ruby Sanctum --- For heroic difficulties, for some reason, we don't have an encounter list, so we get the encounter list from normal diff. We shouldn't change difficulty_fixed variable.
2660 if ((GetId() == 631 || GetId() == 724) && IsHeroic())
2661 {
2662 encounters = sObjectMgr->GetDungeonEncounterList(GetId(), !Is25ManRaid() ? RAID_DIFFICULTY_10MAN_NORMAL : RAID_DIFFICULTY_25MAN_NORMAL);
2663 }
2664 else
2665 {
2666 encounters = sObjectMgr->GetDungeonEncounterList(GetId(), difficulty_fixed);
2667 }
2668
2669 if (!encounters)
2670 {
2671 return;
2672 }
2673
2674 uint32 dungeonId = 0;
2675 bool updated = false;
2676
2677 for (DungeonEncounterList::const_iterator itr = encounters->begin(); itr != encounters->end(); ++itr)
2678 {
2679 DungeonEncounter const* encounter = *itr;
2680 if (encounter->creditType == type && encounter->creditEntry == creditEntry)
2681 {
2682 if (source)
2683 if (InstanceScript* instanceScript = source->GetInstanceScript())
2684 {
2685 uint32 prevMask = instanceScript->GetCompletedEncounterMask();
2686 instanceScript->SetCompletedEncountersMask((1 << encounter->dbcEntry->encounterIndex) | instanceScript->GetCompletedEncounterMask(), true);
2687 if (prevMask != instanceScript->GetCompletedEncounterMask())
2688 updated = true;
2689 }
2690
2691 if (encounter->lastEncounterDungeon)
2692 {
2693 dungeonId = encounter->lastEncounterDungeon;
2694 break;
2695 }
2696 }
2697 }
2698
2699 // pussywizard:
2700 LogEncounterFinished(type, creditEntry);
2701
2702 sScriptMgr->OnAfterUpdateEncounterState(this, type, creditEntry, source, difficulty_fixed, encounters, dungeonId, updated);
2703
2704 if (dungeonId)
2705 {
2706 Map::PlayerList const& players = GetPlayers();
2707 for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
2708 {
2709 if (Player* player = i->GetSource())
2710 if (Group* grp = player->GetGroup())
2711 if (grp->isLFGGroup())
2712 {
2713 sLFGMgr->FinishDungeon(grp->GetGUID(), dungeonId, this);
2714 return;
2715 }
2716 }
2717 }
2718}
@ RAID_DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:273
@ RAID_DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:274
bool IsSharedDifficultyMap(uint32 mapid)
Definition DBCStores.cpp:829
#define sLFGMgr
Definition LFGMgr.h:641
std::list< DungeonEncounter const * > DungeonEncounterList
Definition ObjectMgr.h:711
Definition Group.h:169
Definition InstanceScript.h:143
bool Is25ManRaid() const
Definition Map.h:300
void LogEncounterFinished(EncounterCreditType type, uint32 creditEntry)
Definition Map.cpp:2720
bool IsHeroic() const
Definition Map.h:299
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1203
uint32 encounterIndex
Definition DBCStructure.h:870
Definition ObjectMgr.h:701
DungeonEncounterEntry const * dbcEntry
Definition ObjectMgr.h:705
EncounterCreditType creditType
Definition ObjectMgr.h:706
uint32 lastEncounterDungeon
Definition ObjectMgr.h:708
uint32 creditEntry
Definition ObjectMgr.h:707

References MapRefMgr::begin(), DungeonEncounter::creditEntry, DungeonEncounter::creditType, DungeonEncounter::dbcEntry, DungeonEncounterEntry::encounterIndex, MapRefMgr::end(), GetDifficulty(), GetId(), WorldObject::GetInstanceScript(), GetPlayers(), Is25ManRaid(), IsHeroic(), IsSharedDifficultyMap(), DungeonEncounter::lastEncounterDungeon, LogEncounterFinished(), RAID_DIFFICULTY_10MAN_NORMAL, RAID_DIFFICULTY_25MAN_NORMAL, sLFGMgr, sObjectMgr, and sScriptMgr.

Referenced by boss_eadric::boss_eadricAI::DamageTaken(), boss_illidari_council::DoAction(), Spell::finish(), instance_karazhan::instance_karazhan_InstanceMapScript::SetBossState(), boss_majordomo::boss_majordomoAI::SummonedCreatureDies(), and npc_grimstone::npc_grimstoneAI::WaypointReached().

◆ UpdateIteratorBack()

void Map::UpdateIteratorBack ( Player player)
2528{
2529 if (m_mapRefIter == player->GetMapRef())
2531}
MapReference const * nocheck_prev() const
Definition MapReference.h:49
MapReference & GetMapRef()
Definition Player.h:2499

References Player::GetMapRef(), m_mapRefIter, and MapReference::nocheck_prev().

Referenced by Player::ResetMap().

◆ UpdatePlayerZoneStats()

void Map::UpdatePlayerZoneStats ( uint32  oldZone,
uint32  newZone 
)
570{
571 // Nothing to do if no change
572 if (oldZone == newZone)
573 return;
574
575 if (oldZone != MAP_INVALID_ZONE)
576 {
577 uint32& oldZoneCount = _zonePlayerCountMap[oldZone];
578 if (!oldZoneCount)
579 LOG_ERROR("maps", "A player left zone {} (went to {}) - but there were no players in the zone!", oldZone, newZone);
580 else
581 --oldZoneCount;
582 }
583 ++_zonePlayerCountMap[newZone];
584}

References _zonePlayerCountMap, LOG_ERROR, and MAP_INVALID_ZONE.

Referenced by Player::UpdateZone().

◆ Visit()

template<class T , class CONTAINER >
void Map::Visit ( const Cell cell,
TypeContainerVisitor< T, CONTAINER > &  visitor 
)
inline
707{
708 uint32 const grid_x = cell.GridX();
709 uint32 const grid_y = cell.GridY();
710
711 // If grid is not loaded, nothing to visit.
712 if (!IsGridLoaded(GridCoord(grid_x, grid_y)))
713 return;
714
715 GetMapGrid(grid_x, grid_y)->VisitCell(cell.CellX(), cell.CellY(), visitor);
716}
void VisitCell(uint16 const x, uint16 const y, TypeContainerVisitor< T, TypeMapContainer< TT > > &visitor)
Definition MapGrid.h:86
uint32 GridX() const
Definition Cell.h:71
uint32 GridY() const
Definition Cell.h:72
uint32 CellX() const
Definition Cell.h:69
uint32 CellY() const
Definition Cell.h:70

References Cell::CellX(), Cell::CellY(), GetMapGrid(), Cell::GridX(), Cell::GridY(), IsGridLoaded(), and MapGrid< WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES >::VisitCell().

Referenced by Cell::Visit(), Cell::VisitCircle(), VisitNearbyCellsOf(), and VisitNearbyCellsOfPlayer().

◆ VisitNearbyCellsOf()

534{
535 // Check for valid position
536 if (!obj->IsPositionValid())
537 return;
538
539 // Update mobs/objects in ALL visible cells around object!
541
542 for (uint32 x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x)
543 {
544 for (uint32 y = area.low_bound.y_coord; y <= area.high_bound.y_coord; ++y)
545 {
546 // marked cells are those that have been visited
547 // don't visit the same cell twice
548 uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x;
549 if (isCellMarked(cell_id))
550 continue;
551
552 markCell(cell_id);
553 CellCoord pair(x, y);
554 Cell cell(pair);
555
556 Visit(cell, gridVisitor);
557 Visit(cell, worldVisitor);
558
559 if (!isCellMarkedLarge(cell_id))
560 {
561 markCellLarge(cell_id);
562 Visit(cell, largeGridVisitor);
563 Visit(cell, largeWorldVisitor);
564 }
565 }
566 }
567}
bool isCellMarkedLarge(uint32 pCellId)
Definition Map.h:321
bool isCellMarked(uint32 pCellId)
Definition Map.h:318
void Visit(const Cell &cell, TypeContainerVisitor< T, CONTAINER > &visitor)
Definition Map.h:706
void markCell(uint32 pCellId)
Definition Map.h:319
void markCellLarge(uint32 pCellId)
Definition Map.h:322
bool IsPositionValid() const
Definition Position.cpp:176

References Cell::CalculateCellArea(), WorldObject::GetGridActivationRange(), Position::GetPositionX(), Position::GetPositionY(), CellArea::high_bound, isCellMarked(), isCellMarkedLarge(), Position::IsPositionValid(), CellArea::low_bound, markCell(), markCellLarge(), TOTAL_NUMBER_OF_CELLS_PER_MAP, Visit(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by Update(), and VisitNearbyCellsOfPlayer().

◆ VisitNearbyCellsOfPlayer()

499{
500 // check for valid position
501 if (!player->IsPositionValid())
502 return;
503
504 // check normal grid activation range of the player
505 VisitNearbyCellsOf(player, gridVisitor, worldVisitor, largeGridVisitor, largeWorldVisitor);
506
507 // check maximum visibility distance for large creatures
509
510 for (uint32 x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x)
511 {
512 for (uint32 y = area.low_bound.y_coord; y <= area.high_bound.y_coord; ++y)
513 {
514 // marked cells are those that have been visited
515 // don't visit the same cell twice
516 uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x;
517 if (isCellMarkedLarge(cell_id))
518 continue;
519
520 markCellLarge(cell_id);
521 CellCoord pair(x, y);
522 Cell cell(pair);
523
524 Visit(cell, largeGridVisitor);
525 Visit(cell, largeWorldVisitor);
526 }
527 }
528}

References Cell::CalculateCellArea(), Position::GetPositionX(), Position::GetPositionY(), CellArea::high_bound, isCellMarkedLarge(), Position::IsPositionValid(), CellArea::low_bound, markCellLarge(), MAX_VISIBILITY_DISTANCE, TOTAL_NUMBER_OF_CELLS_PER_MAP, Visit(), VisitNearbyCellsOf(), CoordPair< LIMIT >::x_coord, and CoordPair< LIMIT >::y_coord.

Referenced by Update().

Friends And Related Symbol Documentation

◆ GridObjectLoader

friend class GridObjectLoader
friend

◆ MapReference

friend class MapReference
friend

Member Data Documentation

◆ _corpseBones

std::unordered_set<Corpse*> Map::_corpseBones
private

◆ _corpsesByCell

std::unordered_map<uint32, std::unordered_set<Corpse*> > Map::_corpsesByCell
private

◆ _corpsesByPlayer

std::unordered_map<ObjectGuid, Corpse*> Map::_corpsesByPlayer
private

◆ _creatureBySpawnIdStore

CreatureBySpawnIdContainer Map::_creatureBySpawnIdStore
private

◆ _creatureRespawnScheduler

TaskScheduler Map::_creatureRespawnScheduler

Referenced by ScheduleCreatureRespawn(), and Update().

◆ _creatureRespawnTimes

std::unordered_map<ObjectGuid::LowType , time_t> Map::_creatureRespawnTimes
private

◆ _creaturesToMove

std::vector<Creature*> Map::_creaturesToMove
private

◆ _defaultLight

uint32 Map::_defaultLight
private

◆ _dynamicObjectsToMove

std::vector<DynamicObject*> Map::_dynamicObjectsToMove
private

◆ _dynamicTree

◆ _gameobjectBySpawnIdStore

GameObjectBySpawnIdContainer Map::_gameobjectBySpawnIdStore
private

◆ _gameObjectsToMove

std::vector<GameObject*> Map::_gameObjectsToMove
private

◆ _goRespawnTimes

std::unordered_map<ObjectGuid::LowType , time_t> Map::_goRespawnTimes
private

◆ _guidGenerators

std::map<HighGuid, std::unique_ptr<ObjectGuidGeneratorBase> > Map::_guidGenerators
private

◆ _instanceResetPeriod

time_t Map::_instanceResetPeriod
protected

◆ _mapGridManager

◆ _objectsStore

◆ _transports

◆ _transportsUpdateIter

TransportsContainer::iterator Map::_transportsUpdateIter
protected

◆ _updateObjects

std::unordered_set<Object*> Map::_updateObjects
private

◆ _zoneDynamicInfo

◆ _zonePlayerCountMap

std::unordered_map<uint32, uint32> Map::_zonePlayerCountMap
private

◆ CreatureGroupHolder

◆ CustomData

DataMap Map::CustomData

◆ i_InstanceId

uint32 Map::i_InstanceId
protected

Referenced by GetInstanceId(), and ~Map().

◆ i_mapEntry

◆ i_objectsForDelayedVisibility

std::unordered_set<Unit*> Map::i_objectsForDelayedVisibility

◆ i_objectsToRemove

std::unordered_set<WorldObject*> Map::i_objectsToRemove
private

◆ i_objectsToSwitch

std::map<WorldObject*, bool> Map::i_objectsToSwitch
private

◆ i_scriptLock

bool Map::i_scriptLock
private

◆ i_spawnMode

uint8 Map::i_spawnMode
protected

◆ i_worldObjects

std::unordered_set<WorldObject*> Map::i_worldObjects
private

◆ Lock

std::mutex Map::Lock
protected

◆ m_activeNonPlayers

ActiveNonPlayers Map::m_activeNonPlayers
protected

◆ m_activeNonPlayersIter

ActiveNonPlayers::iterator Map::m_activeNonPlayersIter
protected

Referenced by RemoveFromActiveHelper(), and Update().

◆ m_mapRefIter

MapRefMgr::iterator Map::m_mapRefIter
protected

Referenced by Update(), and UpdateIteratorBack().

◆ m_mapRefMgr

◆ m_parentMap

Map* Map::m_parentMap
private

Referenced by GetParent(), and Map().

◆ m_scriptSchedule

ScriptScheduleMap Map::m_scriptSchedule
private

◆ m_unloadTimer

◆ m_VisibleDistance

◆ marked_cells

std::bitset<TOTAL_NUMBER_OF_CELLS_PER_MAP * TOTAL_NUMBER_OF_CELLS_PER_MAP> Map::marked_cells
private

◆ marked_cells_large

◆ MMapLock

std::shared_mutex Map::MMapLock
protected

Referenced by GetMMapLock().


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