Further reduce of DB access in guild handlers.

This commit is contained in:
hunuza 2008-11-06 11:08:31 +01:00
parent cdb2c08e3f
commit 4957d9f335
2 changed files with 27 additions and 76 deletions

View file

@ -325,6 +325,10 @@ class Guild
return ((GetRankRights(rankId) & right) != GR_RIGHT_EMPTY) ? true : false; return ((GetRankRights(rankId) & right) != GR_RIGHT_EMPTY) ? true : false;
} }
int32 GetRank(uint32 LowGuid); int32 GetRank(uint32 LowGuid);
bool IsMember(uint32 LowGuid)
{
return (members.find(LowGuid) != members.end());
}
void Roster(WorldSession *session); void Roster(WorldSession *session);
void Query(WorldSession *session); void Query(WorldSession *session);

View file

@ -150,10 +150,6 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
CHECK_PACKET_SIZE(recvPacket, 1); CHECK_PACKET_SIZE(recvPacket, 1);
std::string plName; std::string plName;
uint64 plGuid;
uint32 plGuildId;
Guild *guild;
Player *player;
//sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE");
@ -162,7 +158,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(plName)) if(!normalizePlayerName(plName))
return; return;
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild) if(!guild)
{ {
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
@ -175,17 +171,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
return; return;
} }
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()); uint64 plGuid = objmgr.GetPlayerGUIDByName(plName);
if(player)
{
plGuid = player->GetGUID();
plGuildId = player->GetGuildId();
}
else
{
plGuid = objmgr.GetPlayerGUIDByName(plName);
plGuildId = Player::GetGuildIdFromDB(plGuid);
}
if(!plGuid) if(!plGuid)
{ {
@ -199,7 +185,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
return; return;
} }
if(GetPlayer()->GetGuildId() != plGuildId) if(!guild->IsMember(GUID_LOPART(plGuid)))
{ {
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
return; return;
@ -484,9 +470,6 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
CHECK_PACKET_SIZE(recvPacket, 1); CHECK_PACKET_SIZE(recvPacket, 1);
std::string name; std::string name;
Player *newLeader;
uint64 newLeaderGUID;
uint32 newLeaderGuild;
Player *oldLeader = GetPlayer(); Player *oldLeader = GetPlayer();
Guild *guild; Guild *guild;
@ -511,24 +494,14 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
return; return;
} }
newLeader = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); uint64 newLeaderGUID = objmgr.GetPlayerGUIDByName(name);
if(newLeader)
{
newLeaderGUID = newLeader->GetGUID();
newLeaderGuild = newLeader->GetGuildId();
}
else
{
newLeaderGUID = objmgr.GetPlayerGUIDByName(name);
newLeaderGuild = Player::GetGuildIdFromDB(newLeaderGUID);
}
if (!newLeaderGUID) if (!newLeaderGUID)
{ {
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND);
return; return;
} }
if(oldLeader->GetGuildId() != newLeaderGuild) if (!guild->IsMember(GUID_LOPART(newLeaderGUID)))
{ {
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S);
return; return;
@ -586,10 +559,6 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
{ {
CHECK_PACKET_SIZE(recvPacket, 1); CHECK_PACKET_SIZE(recvPacket, 1);
Guild *guild;
Player *player;
uint64 plGuid;
uint32 plGuildId;
std::string name,PNOTE; std::string name,PNOTE;
//sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE");
@ -599,7 +568,7 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
if(!normalizePlayerName(name)) if(!normalizePlayerName(name))
return; return;
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if (!guild) if (!guild)
{ {
@ -613,24 +582,15 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
return; return;
} }
player = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); uint64 plGuid = objmgr.GetPlayerGUIDByName(name);
if(player)
{
plGuid = player->GetGUID();
plGuildId = player->GetGuildId();
}
else
{
plGuid = objmgr.GetPlayerGUIDByName(name);
plGuildId = Player::GetGuildIdFromDB(plGuid);
}
if (!plGuid) if (!plGuid)
{ {
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND);
return; return;
} }
else if(GetPlayer()->GetGuildId() != plGuildId)
if (!guild->IsMember(GUID_LOPART(plGuid)))
{ {
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S);
return; return;
@ -646,10 +606,6 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
{ {
CHECK_PACKET_SIZE(recvPacket, 1); CHECK_PACKET_SIZE(recvPacket, 1);
Guild *guild;
Player *player;
uint64 plGuid;
uint32 plGuildId;
std::string plName, OFFNOTE; std::string plName, OFFNOTE;
//sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE");
@ -659,7 +615,7 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
if (!normalizePlayerName(plName)) if (!normalizePlayerName(plName))
return; return;
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if (!guild) if (!guild)
{ {
@ -672,24 +628,15 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
return; return;
} }
player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()); uint64 plGuid = objmgr.GetPlayerGUIDByName(plName);
if(player)
{
plGuid = player->GetGUID();
plGuildId = player->GetGuildId();
}
else
{
plGuid = objmgr.GetPlayerGUIDByName(plName);
plGuildId = Player::GetGuildIdFromDB(plGuid);
}
if (!plGuid) if (!plGuid)
{ {
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND);
return; return;
} }
else if(GetPlayer()->GetGuildId() != plGuildId)
if (!guild->IsMember(GUID_LOPART(plGuid)))
{ {
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
return; return;