bool LfgGroup::RemoveOfflinePlayers() // Return true if group is empty after check { sLfgMgr.LfgLog("Remove Offline %u, premade %u", GetId(), premadePlayers.empty() ? 0 : 1); if (m_memberSlots.empty()) { sLfgMgr.LfgLog("Group %u add to delete", GetId()); sLfgMgr.AddGroupToDelete(this); return true; } PlayerList toRemove; for(member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) { sLfgMgr.LfgLog("guid %u", citr->guid); Player *plr = sObjectMgr.GetPlayer(citr->guid); if (!plr || (!plr->GetSession() && !plr->IsBeingTeleported()) || (plr->GetGroup() && plr->GetGroup() != this && plr->GetGroup()->isLfgGroup() && ((LfgGroup*)plr->GetGroup())->IsInDungeon())) { sLfgMgr.LfgLog("Add to remove"); toRemove.insert(citr->guid); } } for(PlayerList::iterator itr = toRemove.begin(); itr != toRemove.end(); ++itr) { sLfgMgr.LfgLog("Check for premade %u", *itr); PlayerList::iterator premade = premadePlayers.find(*itr); if(premade != premadePlayers.end()) { sLfgMgr.LfgLog("premade yes"); for(PlayerList::iterator prm = premadePlayers.begin(); prm != premadePlayers.end(); ++prm) { Player *plr = sObjectMgr.GetPlayer(*prm); if(!plr || !plr->GetSession()) continue; Group* group = plr->GetGroup(); if(group) { sLfgMgr.RemoveFromQueue(plr, false); return true; } } for(PlayerList::iterator prm = premadePlayers.begin(); prm != premadePlayers.end(); ++prm) RemoveMember(*prm, 0); } } for(PlayerList::iterator itr = toRemove.begin(); itr != toRemove.end(); ++itr) { sLfgMgr.LfgLog("Remove %u", *itr); RemoveMember(*itr, 0); } toRemove.clear(); //flush empty group if (GetMembersCount() == 0) { sLfgMgr.LfgLog("Group %u add to delete 2", GetId()); sLfgMgr.AddGroupToDelete(this); return true; } return false; }
void QBSoundWin::stopAll() { //printf("stopAll\n"); QBSoundLocker locker(&mMutex); #ifdef __USE_OGG_VORBIS__ { PlayerList::iterator it = streamTrack.begin(); while(it != streamTrack.end()) { delete (*it).second; ++it; } streamTrack.clear(); } { EffectList::iterator it = sharedList().begin(); while(it != sharedList().end()) { delete (*it).second; ++it; } sharedList().clear(); } #endif return QBSound::stopAll(); }
void QBSoundMac::streamReset() { QBSoundLocker locker(&mMutex,"streamReset"); streamTrack.clear(); // PlayerList::iterator it = streamTrack.begin(); // while(it != streamTrack.end()) { // ++it; // } }
bool LfgGroup::SelectRandomDungeon() { m_originalInfo = m_dungeonInfo; m_lfgFlags |= LFG_GRP_RANDOM; LfgLocksMap *groupLocks = GetLocksList(); std::vector<LFGDungeonEntry const*> options; LFGDungeonEntry const *currentRow = NULL; //Possible dungeons LfgDungeonList* list = sLfgMgr.GetRandomOptions(m_dungeonInfo->ID); for(LfgDungeonList::iterator itr = list->begin(); itr != list->end(); ++itr) options.push_back(*itr); //And now get only without locks for(LfgLocksMap::iterator itr = groupLocks->begin(); itr != groupLocks->end(); ++itr) { for(LfgLocksList::iterator itr2 = itr->second->begin(); itr2 != itr->second->end(); ++itr2) { for(std::vector<LFGDungeonEntry const*>::iterator itrDung = options.begin(); itrDung != options.end(); ++itrDung) { if ((*itrDung)->ID != (*itr2)->dungeonInfo->ID) continue; DungeonInfo* dungeonInfo = sLfgMgr.GetDungeonInfo((*itr2)->dungeonInfo->ID); if (dungeonInfo->locked || (*itr2)->lockType != LFG_LOCKSTATUS_RAID_LOCKED) { options.erase(itrDung); break; } } } } //This should not happen if (options.empty()) { PlayerList toRemove; for(member_witerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr) { Player *plr = sObjectMgr.GetPlayer(itr->guid); if (!plr) continue; sLfgMgr.SendLfgUpdatePlayer(plr, LFG_UPDATETYPE_GROUP_DISBAND); sLog.outError("LfgMgr: Cannot find any random dungeons for player %s", plr->GetName()); plr->GetSession()->SendNotification("Cannot find any random dungeons for this group, you have to find new group. We are sorry"); toRemove.insert(plr->GetGUID()); } for(PlayerList::iterator itr = toRemove.begin(); itr != toRemove.end(); ++itr) RemoveMember(*itr, 0); toRemove.clear(); sLfgMgr.AddGroupToDelete(this); return false; } //Select dungeon, there should be also bind check uint32 tmp = time(NULL)%options.size(); m_dungeonInfo = options[tmp]; return true; }
void close_comms() { // Disconnect players for (PlayerListIterator i = playerList.begin(); i != playerList.end(); ++i) { if ((*i)->socket != NO_SOCKET) { close((*i)->socket); delete (*i); } } playerList.clear(); // Disconnect irc if (ircSocket != NO_SOCKET) { close(ircSocket); } }
void QBSoundMac::stopAll() { QBSoundLocker locker(&mMutex,"stopAll"); #ifdef __USE_OGG_VORBIS__ { PlayerList::iterator it = streamTrack.begin(); while(it != streamTrack.end()) { delete (*it).second; ++it; } streamTrack.clear(); } { EffectList::iterator it = effectTrack.begin(); while(it != effectTrack.end()) { delete (*it).second; ++it; } effectTrack.clear(); } #endif return QBSound::stopAll(); }
void QBSoundWin::streamReset() { QBSoundLocker locker(&mMutex,"streamReset"); streamTrack.clear(); }