Map* MapManager::CreateMap(uint32 id, Player* player) { Map* m = CreateBaseMap(id); if (m && m->Instanceable()) m = ((MapInstanced*)m)->CreateInstanceForPlayer(id, player); return m; }
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; }