Reduce number of DB queries in guild related code.

This commit is contained in:
hunuza 2008-11-05 18:24:17 +01:00
parent 90828fa699
commit 9d8a7aea79
3 changed files with 102 additions and 113 deletions

View file

@ -162,9 +162,20 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(plName))
return;
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str());
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str());
if(player)
{
plGuid = player->GetGUID();
@ -176,24 +187,12 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
plGuildId = Player::GetGuildIdFromDB(plGuid);
}
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(!plGuid)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
if(plGuid == guild->GetLeader())
{
SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE);
@ -294,11 +293,6 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
CHECK_PACKET_SIZE(recvPacket, 1);
std::string plName;
uint64 plGuid;
uint32 plGuildId;
uint32 plRankId;
Player *player;
Guild *guild;
//sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE");
@ -307,27 +301,21 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(plName))
return;
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str());
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(player)
{
plGuid = player->GetGUID();
plGuildId = player->GetGuildId();
plRankId = player->GetRank();
}
else
{
plGuid = objmgr.GetPlayerGUIDByName(plName);
plGuildId = Player::GetGuildIdFromDB(plGuid);
plRankId = Player::GetRankFromDB(plGuid);
}
Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
else if(!plGuid)
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
uint64 plGuid = objmgr.GetPlayerGUIDByName(plName);
if(!plGuid)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND);
return;
@ -337,24 +325,15 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_NAME_INVALID);
return;
}
else if(GetPlayer()->GetGuildId() != plGuildId)
int32 plRankId = guild->GetRank(GUID_LOPART(plGuid));
if(plRankId == -1)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
else if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
if(plRankId < 2 || (plRankId-1) < GetPlayer()->GetRank())
return;
}
else if((plRankId-1) == 0 || (plRankId-1) < GetPlayer()->GetRank())
return;
if(plRankId < 1)
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_INTERNAL);
return;
}
uint32 newRankId = plRankId < guild->GetNrRanks() ? plRankId-1 : guild->GetNrRanks()-1;
@ -376,11 +355,6 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
CHECK_PACKET_SIZE(recvPacket, 1);
std::string plName;
uint64 plGuid;
uint32 plGuildId;
uint32 plRankId;
Player *player;
Guild *guild;
//sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE");
@ -389,20 +363,7 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(plName))
return;
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str());
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(player)
{
plGuid = player->GetGUID();
plGuildId = player->GetGuildId();
plRankId = player->GetRank();
}
else
{
plGuid = objmgr.GetPlayerGUIDByName(plName);
plGuildId = Player::GetGuildIdFromDB(plGuid);
plRankId = Player::GetRankFromDB(plGuid);
}
Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
@ -410,6 +371,14 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_DEMOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
uint64 plGuid = objmgr.GetPlayerGUIDByName(plName);
if( !plGuid )
{
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND);
@ -422,18 +391,12 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
return;
}
if(GetPlayer()->GetGuildId() != plGuildId)
int32 plRankId = guild->GetRank(GUID_LOPART(plGuid));
if(plRankId == -1)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_DEMOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
if((plRankId+1) >= guild->GetNrRanks() || plRankId <= GetPlayer()->GetRank())
return;
@ -534,6 +497,20 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(name))
return;
guild = objmgr.GetGuildById(oldLeader->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(oldLeader->GetGUID() != guild->GetLeader())
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
newLeader = ObjectAccessor::Instance().FindPlayerByName(name.c_str());
if(newLeader)
{
@ -545,14 +522,8 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
newLeaderGUID = objmgr.GetPlayerGUIDByName(name);
newLeaderGuild = Player::GetGuildIdFromDB(newLeaderGUID);
}
guild = objmgr.GetGuildById(oldLeader->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
else if(!newLeaderGUID)
if(!newLeaderGUID)
{
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND);
return;
@ -562,11 +533,6 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
if(oldLeader->GetGUID() != guild->GetLeader())
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
guild->SetLeader(newLeaderGUID);
guild->ChangeRank(oldLeader->GetGUID(), GR_OFFICER);
@ -633,8 +599,21 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(name))
return;
player = ObjectAccessor::Instance().FindPlayerByName(name.c_str());
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
player = ObjectAccessor::Instance().FindPlayerByName(name.c_str());
if(player)
{
plGuid = player->GetGUID();
@ -646,12 +625,7 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
plGuildId = Player::GetGuildIdFromDB(plGuid);
}
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
else if(!plGuid)
if(!plGuid)
{
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND);
return;
@ -661,11 +635,6 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
recvPacket >> PNOTE;
guild->SetPNOTE(plGuid, PNOTE);
@ -690,8 +659,20 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(plName))
return;
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str());
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str());
if(player)
{
plGuid = player->GetGUID();
@ -703,12 +684,7 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
plGuildId = Player::GetGuildIdFromDB(plGuid);
}
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
else if( !plGuid )
if( !plGuid )
{
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND);
return;
@ -718,11 +694,6 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
recvPacket >> OFFNOTE;
guild->SetOFFNOTE(plGuid, OFFNOTE);