void WorldLog::outLog(char const* fmt, ...) { if (LogWorld()) { SKYFIRE_GUARD(ACE_Thread_Mutex, Lock); ASSERT(i_file); va_list args; va_start(args, fmt); vfprintf(i_file, fmt, args); //fprintf(i_file, "\n"); va_end(args); fflush(i_file); } if (sLog->GetLogDB() && m_dbWorld) { va_list ap2; va_start(ap2, fmt); char nnew_str[MAX_QUERY_LEN]; vsnprintf(nnew_str, MAX_QUERY_LEN, fmt, ap2); sLog->outDB(LOG_TYPE_WORLD, nnew_str); va_end(ap2); } }
InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty) { // load/create a map SKYFIRE_GUARD(ACE_Thread_Mutex, Lock); // make sure we have a valid map id const MapEntry* entry = sMapStore.LookupEntry(GetId()); if (!entry) { sLog->outError("CreateInstance: no entry for map %d", GetId()); ASSERT(false); } const InstanceTemplate* iTemplate = sObjectMgr->GetInstanceTemplate(GetId()); if (!iTemplate) { sLog->outError("CreateInstance: no instance template for map %d", GetId()); ASSERT(false); } // some instances only have one difficulty GetDownscaledMapDifficultyData(GetId(), difficulty); sLog->outDebug(LOG_FILTER_MAPS, "MapInstanced::CreateInstance: %s map instance %d for %d created with difficulty %s", save?"":"new ", InstanceId, GetId(), difficulty?"heroic":"normal"); InstanceMap* map = new InstanceMap(GetId(), GetGridExpiry(), InstanceId, difficulty, this); ASSERT(map->IsDungeon()); bool load_data = save != NULL; map->CreateInstanceData(load_data); m_InstancedMaps[InstanceId] = map; return map; }
int MapUpdater::wait() { SKYFIRE_GUARD(ACE_Thread_Mutex, m_mutex); while (pending_requests > 0) m_condition.wait(); return 0; }
void MapUpdater::update_finished() { SKYFIRE_GUARD(ACE_Thread_Mutex, m_mutex); if (pending_requests == 0) { ACE_ERROR((LM_ERROR, ACE_TEXT("(%t)\n"), ACE_TEXT("MapUpdater::update_finished BUG, report to devs"))); return; } --pending_requests; m_condition.broadcast(); }
uint32 MapManager::GetNumInstances() { SKYFIRE_GUARD(ACE_Thread_Mutex, Lock); uint32 ret = 0; for (MapMapType::iterator itr = i_maps.begin(); itr != i_maps.end(); ++itr) { Map* map = itr->second; if (!map->Instanceable()) continue; MapInstanced::InstancedMaps &maps = ((MapInstanced*)map)->GetInstancedMaps(); for (MapInstanced::InstancedMaps::iterator mitr = maps.begin(); mitr != maps.end(); ++mitr) if (mitr->second->IsDungeon()) ret++; } return ret; }
int MapUpdater::schedule_update(Map& map, ACE_UINT32 diff) { SKYFIRE_GUARD(ACE_Thread_Mutex, m_mutex); ++pending_requests; if (m_executor.execute(new MapUpdateRequest(map, *this, diff)) == -1) { ACE_DEBUG((LM_ERROR, ACE_TEXT("(%t) \n"), ACE_TEXT("Failed to schedule Map Update"))); --pending_requests; return -1; } return 0; }
void VMapManager2::releaseModelInstance(const std::string &filename) { //! Critical section, thread safe access to iLoadedModelFiles SKYFIRE_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock); ModelFileMap::iterator model = iLoadedModelFiles.find(filename); if (model == iLoadedModelFiles.end()) { sLog->outError("VMapManager2: trying to unload non-loaded file '%s'", filename.c_str()); return; } if (model->second.decRefCount() == 0) { sLog->outDebug(LOG_FILTER_MAPS, "VMapManager2: unloading file '%s'", filename.c_str()); delete model->second.getModel(); iLoadedModelFiles.erase(model); } }
WorldModel* VMapManager2::acquireModelInstance(const std::string& basepath, const std::string& filename) { //! Critical section, thread safe access to iLoadedModelFiles SKYFIRE_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock); ModelFileMap::iterator model = iLoadedModelFiles.find(filename); if (model == iLoadedModelFiles.end()) { WorldModel* worldmodel = new WorldModel(); if (!worldmodel->readFile(basepath + filename + ".vmo")) { sLog->outError("VMapManager2: could not load '%s%s.vmo'", basepath.c_str(), filename.c_str()); delete worldmodel; return NULL; } sLog->outDebug(LOG_FILTER_MAPS, "VMapManager2: loading file '%s%s'", basepath.c_str(), filename.c_str()); model = iLoadedModelFiles.insert(std::pair<std::string, ManagedModel>(filename, ManagedModel())).first; model->second.setModel(worldmodel); } model->second.incRefCount(); return model->second.getModel(); }
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; }
BattlegroundMap* MapInstanced::CreateBattleground(uint32 InstanceId, Battleground* bg) { // load/create a map SKYFIRE_GUARD(ACE_Thread_Mutex, Lock); sLog->outDebug(LOG_FILTER_MAPS, "MapInstanced::CreateBattleground: map bg %d for %d created.", InstanceId, GetId()); PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), bg->GetMinLevel()); uint8 spawnMode; if (bracketEntry) spawnMode = bracketEntry->difficulty; else spawnMode = REGULAR_DIFFICULTY; BattlegroundMap* map = new BattlegroundMap(GetId(), GetGridExpiry(), InstanceId, this, spawnMode); ASSERT(map->IsBattlegroundOrArena()); map->SetBG(bg); bg->SetBgMap(map); m_InstancedMaps[InstanceId] = map; return map; }