MapMgr* InstanceMgr::ClusterCreateInstance( uint32 mapid, uint32 instanceid ) { // shouldn't happen if( mapid >= NUM_MAPS ) return NULLMAPMGR; MapInfo * info = WorldMapInfoStorage.LookupEntry( mapid ); if( !info ) return NULLMAPMGR; if( !m_maps[mapid] ) { _CreateMap(mapid); if(!m_maps[mapid]) return NULLMAPMGR; } MapMgr* mgr = new MapMgr(m_maps[mapid],mapid,instanceid); if( !mgr ) return NULLMAPMGR; mgr->Init(true); Instance * pInstance = new Instance(); if( !pInstance ) { delete mgr; return NULLMAPMGR; } pInstance->m_creation = UNIXTIME; pInstance->m_creatorGroup = 0; pInstance->m_creatorGuid = 0; pInstance->m_difficulty = 0; pInstance->m_expiration = 0; pInstance->m_instanceId = mgr->GetInstanceID(); pInstance->m_isBattleground = true; pInstance->m_mapId = mapid; pInstance->m_dbcMap = dbcMap.LookupEntry(mapid); pInstance->m_mapInfo = info; pInstance->m_mapMgr = mgr; m_mapLock.Acquire(); InstanceMap * pInstanceMap = new InstanceMap; if( !pInstanceMap ) { m_mapLock.Release(); delete mgr; delete pInstance; return NULLMAPMGR; } if( m_instances[mapid] == NULL ) m_instances[mapid] = pInstanceMap; m_instances[mapid]->insert( make_pair( pInstance->m_instanceId, pInstance ) ); m_mapLock.Release(); ThreadPool.ExecuteTask(format("Map mgr - M%u|I%u", mapid, pInstance->m_instanceId).c_str(), mgr); return mgr; }
MapMgr* InstanceMgr::CreateBattlegroundInstance(uint32 mapid) { // shouldn't happen if( mapid >= NUM_MAPS ) return NULLMAPMGR; if(dbcMap.LookupEntry(mapid) == NULL) return NULLMAPMGR; if(!m_maps[mapid]) { _CreateMap(mapid); if(!m_maps[mapid]) return NULLMAPMGR; } MapMgr* ret = (new MapMgr(m_maps[mapid], mapid, GenerateInstanceID())); ret->Init(true); Instance * pInstance = new Instance(); pInstance->m_creation = UNIXTIME; pInstance->m_creatorGroup = 0; pInstance->m_creatorGuid = 0; pInstance->m_difficulty = MODE_5PLAYER_NORMAL; pInstance->m_expiration = 0; pInstance->m_instanceId = ret->GetInstanceID(); pInstance->m_isBattleground = true; pInstance->m_mapId = mapid; pInstance->m_dbcMap = dbcMap.LookupEntry(mapid); pInstance->m_mapInfo = WorldMapInfoStorage.LookupEntry(mapid); pInstance->m_mapMgr = ret; m_mapLock.Acquire(); if( m_instances[mapid] == NULL ) m_instances[mapid] = new InstanceMap; m_instances[mapid]->insert( make_pair( pInstance->m_instanceId, pInstance ) ); m_mapLock.Release(); ThreadPool.ExecuteTask(format("BattleGround Mgr - M%u|I%u", mapid, pInstance->m_instanceId).c_str(), ret); return ret; }