void Channel::KickOrBan(uint64 good, const char *badname, bool ban) { uint32 sec = 0; Player *gplr = objmgr.GetPlayer(good); if(gplr) sec = gplr->GetSession()->GetSecurity(); if(!IsOn(good)) { WorldPacket data; MakeNotOn(&data); SendToOne(&data,good); } else if(!players[good].moderator && sec < SEC_GAMEMASTER) { WorldPacket data; MakeNotModerator(&data); SendToOne(&data,good); } else { Player *bad = objmgr.GetPlayer(badname); if(bad == NULL || !IsOn(bad->GetGUID())) { WorldPacket data; MakeNotOn(&data,badname); SendToOne(&data,good); } else if(sec < SEC_GAMEMASTER && bad->GetGUID() == m_ownerGUID && good != m_ownerGUID) { WorldPacket data; MakeNotOwner(&data); SendToOne(&data,good); } else { bool changeowner = (m_ownerGUID == bad->GetGUID()); WorldPacket data; if(ban && !IsBanned(bad->GetGUID())) { banned.push_back(bad->GetGUID()); MakeBanned(&data,good,bad->GetGUID()); } else MakeKicked(&data,good,bad->GetGUID()); SendToAll(&data); players.erase(bad->GetGUID()); if(changeowner) { uint64 newowner = players.size() > 0 ? good : false; SetOwner(newowner); } } } }
void Channel::KickOrBan(Player *good, const char *badname, bool ban) { WorldPacket data; if(!IsOn(good)) { MakeNotOn(&data); SendToOne(&data,good); } else if(!players[good].moderator && good->GetSession()->GetSecurity() < 2) { MakeNotModerator(&data); SendToOne(&data,good); } else { Player *bad = objmgr.GetPlayer(badname); if(bad == NULL || !IsOn(bad)) { MakeNotOn(&data,badname); SendToOne(&data,good); } else if(good->GetSession()->GetSecurity() < 2 && bad == owner && good != owner) { MakeNotOwner(&data); SendToOne(&data,good); } else { bool changeowner = (owner == bad); if(ban && !IsBanned(bad->GetGUID())) { banned.push_back(bad->GetGUID()); MakeBanned(&data,good,bad); } else MakeKicked(&data,good,bad); SendToAll(&data); players.erase(bad); if (!constant && changeowner) { Player *newowner = players.size() > 0 ? good : NULL; SetOwner(newowner); } } } }