Map* MapManager::CreateBaseMap(uint32 id) { Map* map = FindBaseMap(id); if (map == NULL) { TRINITY_GUARD(ACE_Thread_Mutex, Lock); map = FindBaseMap(id); if (map == NULL) // pussywizard: check again after acquiring mutex { MapEntry const* entry = sMapStore.LookupEntry(id); ASSERT(entry); if (entry->Instanceable()) map = new MapInstanced(id); else { map = new Map(id, 0, REGULAR_DIFFICULTY); map->LoadRespawnTimes(); } i_maps[id] = map; } } ASSERT(map); return map; }
Map* MapManager::FindBaseNonInstanceMap(uint32 mapId) const { Map* map = FindBaseMap(mapId); if (map && map->Instanceable()) return NULL; return map; }
Map* MapManager::CreateBaseMap(uint32 id) { Map* map = FindBaseMap(id); if (map == NULL) { TRINITY_GUARD(ACE_Thread_Mutex, Lock); MapEntry const* entry = sMapStore.LookupEntry(id); ASSERT(entry); if (entry->Instanceable()) map = new MapInstanced(id, i_gridCleanUpDelay); else { map = new Map(id, i_gridCleanUpDelay, 0, REGULAR_DIFFICULTY); map->LoadRespawnTimes(); } i_maps[id] = map; } ASSERT(map); return map; }
Map* MapManager::CreateBaseMap(uint32 id) { Map* map = FindBaseMap(id); if (map == nullptr) { std::lock_guard<std::mutex> lock(_mapsLock); MapEntry const* entry = sMapStore.LookupEntry(id); ASSERT(entry); if (entry->Instanceable()) map = new MapInstanced(id, i_gridCleanUpDelay); else { map = new Map(id, i_gridCleanUpDelay, 0, REGULAR_DIFFICULTY); map->LoadRespawnTimes(); map->LoadCorpseData(); } i_maps[id] = map; } ASSERT(map); return map; }
Map* MapManager::FindMap(uint32 mapid, uint32 instanceId) const { Map* map = FindBaseMap(mapid); if (!map) return NULL; if (!map->Instanceable()) return instanceId == 0 ? map : NULL; return ((MapInstanced*)map)->FindInstanceMap(instanceId); }
Map* MapManager::CreateBaseMap(uint32 id) { Map* map = FindBaseMap(id); if (!map) { MapEntry const* entry = sMapStore.AssertEntry(id); if (entry->ParentMapID != -1) { CreateBaseMap(entry->ParentMapID); // must have been created by parent map map = FindBaseMap(id); return ASSERT_NOTNULL(map); } std::lock_guard<std::mutex> lock(_mapsLock); map = CreateBaseMap_i(entry); } ASSERT(map); return map; }
Map* MapManager::CreateBaseMap(uint32 id) { Map* m = FindBaseMap(id); if (m == NULL) { SKYFIRE_GUARD(ACE_Thread_Mutex, Lock); const MapEntry* entry = sMapStore.LookupEntry(id); if (entry && entry->Instanceable()) { m = new MapInstanced(id, i_gridCleanUpDelay); } else { m = new Map(id, i_gridCleanUpDelay, 0, REGULAR_DIFFICULTY); } i_maps[id] = m; } ASSERT(m != NULL); return m; }