bool Party::canOpenCorpse(uint32_t ownerId) { if(Player* player = g_game.getPlayerByID(ownerId)) return leader->getID() == ownerId || isPlayerMember(player); return false; }
bool Party::passLeadership(Player* player) { if(!player || getLeader() == player || !isPlayerMember(player)) return false; //Remove it before to broadcast the message correctly PlayerVector::iterator it = std::find(memberList.begin(), memberList.end(), player); if(it != memberList.end()) memberList.erase(it); Player* oldLeader = getLeader(); setLeader(player); memberList.insert(memberList.begin(), oldLeader); char buffer[125]; sprintf(buffer, "%s is now the leader of the party.", player->getName().c_str()); broadcastMessage(MSG_INFO_DESCR, buffer, true); player->sendTextMessage(MSG_INFO_DESCR, "You are now the leader of the party."); updateSharedExperience(); updateIcons(oldLeader); updateIcons(player); return true; }
bool Party::passPartyLeadership(Player* player) { if(!player || getLeader() == player || !isPlayerMember(player)){ return false; } //Remove it before to broadcast the message correctly PlayerVector::iterator it = std::find(memberList.begin(), memberList.end(), player); if(it != memberList.end()){ memberList.erase(it); } std::stringstream ss; ss << player->getName() << " is now the leader of the party."; broadcastPartyMessage(MSG_INFO_DESCR, ss.str(), true); Player* oldLeader = getLeader(); setLeader(player); memberList.insert(memberList.begin(), oldLeader); updateSharedExperience(); updatePartyIcons(oldLeader); updatePartyIcons(getLeader()); updatePartyIcons(player); player->sendTextMessage(MSG_INFO_DESCR, "You are now the leader of the party."); return true; }
bool Party::canOpenCorpse(uint32_t ownerId) { Player* player = g_game.getPlayerByID(ownerId); if(!player){ return false; } if(leader->getID() == ownerId || isPlayerMember(player)){ return true; } return false; }
bool Party::leave(Player* player) { if(!player) return false; if(!isPlayerMember(player) && getLeader() != player) return false; bool missingLeader = false; if(getLeader() == player) { if(!memberList.empty()) { if(memberList.size() == 1 && inviteList.empty()) missingLeader = true; else passLeadership(memberList.front()); } else missingLeader = 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->sendClosePrivate(CHANNEL_PARTY); player->sendTextMessage(MSG_INFO_DESCR, "You have left the party."); player->sendPlayerPartyIcons(player); updateSharedExperience(); updateIcons(player); clearPlayerPoints(player); char buffer[105]; sprintf(buffer, "%s has left the party.", player->getName().c_str()); broadcastMessage(MSG_INFO_DESCR, buffer); if(missingLeader || canDisband()) disband(); return true; }
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; }