void Chat::removeUserFromAllChannels(const Player& player) { for (auto& it : normalChannels) { it.second.removeUser(player); } for (auto& it : partyChannels) { it.second.removeUser(player); } for (auto& it : guildChannels) { it.second.removeUser(player); } auto it = privateChannels.begin(); while (it != privateChannels.end()) { PrivateChatChannel* channel = &it->second; channel->removeInvite(player.getGUID()); channel->removeUser(player); if (channel->getOwner() == player.getGUID()) { channel->closeChannel(); it = privateChannels.erase(it); } else { ++it; } } }
void Chat::removeUserFromAllChannels(const Player& player) { for (auto& it : normalChannels) { it.second.removeUser(player); } for (const auto& it : partyChannels) { it.second->removeUser(player); } for (const auto& it : guildChannels) { it.second->removeUser(player); } for (const auto& it : privateChannels) { PrivateChatChannel* channel = it.second; channel->removeUser(player); if (channel->getOwner() == player.getGUID()) { deleteChannel(player, channel->getId()); } } }
void Chat::removeUserFromAllChannels(Player* player) { for (NormalChannelMap::iterator it = m_normalChannels.begin(), end = m_normalChannels.end(); it != end; ++it) { it->second->removeUser(player); } for (PartyChannelMap::iterator it = m_partyChannels.begin(), end = m_partyChannels.end(); it != end; ++it) { it->second->removeUser(player); } for (GuildChannelMap::iterator it = m_guildChannels.begin(), end = m_guildChannels.end(); it != end; ++it) { it->second->removeUser(player); } for (PrivateChannelMap::iterator it = m_privateChannels.begin(), end = m_privateChannels.end(); it != end; ++it) { PrivateChatChannel* channel = it->second; channel->removeUser(player); if (channel->getOwner() == player->getGUID()) { deleteChannel(player, channel->getId()); } } }
bool Party::leaveParty(Player* player) { if(!player){ return false; } if(!isPlayerMember(player) && getLeader() != player){ return false; } // Remove from chat PrivateChatChannel* pcc = static_cast<PrivateChatChannel*>(g_chat.getChannel(this)); if(pcc){ pcc->removeUser(player, true); } bool hasNoLeader = false; if(getLeader() == player){ if(!memberList.empty()){ if(memberList.size() == 1 && inviteList.empty()){ //just one member left, disband instead of passing leadership hasNoLeader = true; } else{ passPartyLeadership(memberList.front()); } } else{ hasNoLeader = true; } } //since we already passed the leadership, we remove the player from the list PlayerVector::iterator it = std::find(memberList.begin(), memberList.end(), player); if(it != memberList.end()){ memberList.erase(it); } it = std::find(inviteList.begin(), inviteList.end(), player); if(it != inviteList.end()){ inviteList.erase(it); } player->setParty(NULL); player->sendTextMessage(MSG_INFO_DESCR, "You have left the party."); player->sendPlayerPartyIcons(player); updateSharedExperience(); updatePartyIcons(player); clearPlayerPoints(player); std::stringstream ss; ss << player->getName() << " has left the party."; broadcastPartyMessage(MSG_INFO_DESCR, ss.str()); if(hasNoLeader || disbandParty()){ disband(); } return true; }