40 : _nextInstanceId(0), _scheduledScripts(0)
60 for (MapMapType::iterator iter =
i_maps.begin(); iter !=
i_maps.end(); ++iter)
61 (*iter).second->InitVisibilityDistance();
76 std::lock_guard<std::mutex> lock(
_mapsLock);
114 m = ((
MapInstanced*)m)->CreateInstanceForPlayer(
id, player, loginInstanceId);
126 return instanceId == 0 ? map :
nullptr;
128 return ((
MapInstanced*)map)->FindInstanceMap(instanceId);
144 Difficulty targetDifficulty, requestedDifficulty;
170 if (corpseMap == mapid)
174 corpseMap = corpseInstance ? corpseInstance->
Parent : 0;
180 TC_LOG_DEBUG(
"maps",
"MAP: Player '{}' has corpse in instance '{}' and can enter.", player->
GetName(), mapName);
184 TC_LOG_DEBUG(
"maps",
"Map::CanPlayerEnter - player '{}' is dead but does not have a corpse!", player->
GetName());
190 if (!loginCheck && group)
193 if (boundInstance && boundInstance->
save)
202 uint32 instanceIdToCheck = 0;
204 instanceIdToCheck = save->GetInstanceId();
212 if (!player->
Satisfy(
sObjectMgr->GetAccessRequirement(mapid, targetDifficulty), mapid,
true))
224 MapMapType::iterator iter =
i_maps.begin();
225 for (; iter !=
i_maps.end(); ++iter)
235 for (iter =
i_maps.begin(); iter !=
i_maps.end(); ++iter)
258 return mEntry ? true :
false;
268 for (
auto iter =
i_maps.begin(); iter !=
i_maps.end(); ++iter)
270 iter->second->UnloadAll();
286 std::lock_guard<std::mutex> lock(
_mapsLock);
289 for (
auto const& [_, map] :
i_maps)
301 std::lock_guard<std::mutex> lock(
_mapsLock);
304 for (
auto& [_, map] :
i_maps)
310 ret += std::accumulate(maps.begin(), maps.end(), 0u, [](
uint32 total, MapInstanced::InstancedMaps::value_type
const& value) { return total + value.second->GetPlayers().getSize(); });
343 TC_LOG_ERROR(
"maps",
"Instance ID overflow!! Can't continue, shutting down server. ");
354 if (nextFreedId == InstanceIds::npos)
362 return newInstanceId;
MapDifficulty const * GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define MAX_NUMBER_OF_GRIDS
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
InstanceGroupBind * GetBoundInstance(Player *player)
uint32 GetInstanceId() const
std::unordered_map< uint32, Trinity::unique_trackable_ptr< Map > > InstancedMaps
InstancedMaps & GetInstancedMaps()
void RegisterInstanceId(uint32 instanceId)
Map * FindBaseNonInstanceMap(uint32 mapId) const
Map * CreateMap(uint32 mapId, Player *player, uint32 loginInstanceId=0)
uint32 GetNumPlayersInInstances()
static bool ExistMapAndVMap(uint32 mapid, float x, float y)
static MapManager * instance()
Map * FindBaseMap(uint32 mapId) const
uint32 i_gridCleanUpDelay
void DoDelayedMovesAndRemoves()
Map * FindMap(uint32 mapId, uint32 instanceId) const
void InitializeVisibilityDistanceInfo()
Map * CreateBaseMap(uint32 mapId)
static bool IsValidMAP(uint32 mapid, bool startUp)
uint32 GenerateInstanceId()
void FreeInstanceId(uint32 instanceId)
InstanceIds _freeInstanceIds
Map::EnterState PlayerCannotEnter(uint32 mapid, Player *player, bool loginCheck=false)
void schedule_update(Map &map, uint32 diff)
void activate(size_t num_threads)
void SetWeakPtr(Trinity::unique_weak_ptr< Map > weakRef)
static void DeleteStateMachine()
bool Instanceable() const
static void InitStateMachine()
MapInstanced * ToMapInstanced()
static bool ExistVMap(uint32 mapid, int gx, int gy)
@ CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE
@ CANNOT_ENTER_TOO_MANY_INSTANCES
@ CANNOT_ENTER_UNSPECIFIED_REASON
@ CANNOT_ENTER_DIFFICULTY_UNAVAILABLE
@ CANNOT_ENTER_UNINSTANCED_DUNGEON
@ CANNOT_ENTER_NOT_IN_RAID
static bool ExistMap(uint32 mapid, int gx, int gy)
WorldLocation const & GetCorpseLocation() const
InstanceSave * GetInstanceSave(uint32 mapid, bool raid)
Difficulty GetDifficulty(bool isRaid) const
WorldSession * GetSession() const
bool Satisfy(AccessRequirement const *ar, uint32 target_map, bool report=false)
bool IsGameMaster() const
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
std::string const & GetName() const
LocaleConstant GetSessionDbcLocale() const
bool UpdateAndCheckInstanceCount(uint32 instanceId)
static void StopNow(uint8 exitcode)
@ CONFIG_INTERVAL_GRIDCLEAN
@ CONFIG_INTERVAL_MAPUPDATE
@ CONFIG_INSTANCE_IGNORE_RAID
GridCoord ComputeGridCoord(float x, float y)
void SetInterval(time_t interval)
time_t GetCurrent() const
void SetCurrent(time_t current)
bool Instanceable() const