mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
Reduce number of DB queries in guild related code.
This commit is contained in:
parent
90828fa699
commit
9d8a7aea79
3 changed files with 102 additions and 113 deletions
|
|
@ -104,8 +104,17 @@ bool Guild::create(uint64 lGuid, std::string gname)
|
|||
|
||||
bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
||||
{
|
||||
if(Player::GetGuildIdFromDB(plGuid) != 0) // player already in guild
|
||||
return false;
|
||||
Player* pl = objmgr.GetPlayer(plGuid);
|
||||
if(pl)
|
||||
{
|
||||
if(pl->GetGuildId() != 0)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Player::GetGuildIdFromDB(plGuid) != 0) // player already in guild
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove all player signs from another petitions
|
||||
// this will be prevent attempt joining player to many guilds and corrupt guild data integrity
|
||||
|
|
@ -134,7 +143,6 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
|||
CharacterDatabase.PExecute("INSERT INTO guild_member (guildid,guid,rank,pnote,offnote) VALUES ('%u', '%u', '%u','%s','%s')",
|
||||
Id, GUID_LOPART(plGuid), newmember.RankId, dbPnote.c_str(), dbOFFnote.c_str());
|
||||
|
||||
Player* pl = objmgr.GetPlayer(plGuid);
|
||||
if(pl)
|
||||
{
|
||||
pl->SetInGuild(Id);
|
||||
|
|
@ -650,6 +658,15 @@ void Guild::SetRankRights(uint32 rankId, uint32 rights)
|
|||
CharacterDatabase.PExecute("UPDATE guild_rank SET rights='%u' WHERE rid='%u' AND guildid='%u'", rights, (rankId+1), Id);
|
||||
}
|
||||
|
||||
int32 Guild::GetRank(uint32 LowGuid)
|
||||
{
|
||||
MemberList::iterator itr = members.find(LowGuid);
|
||||
if (itr==members.end())
|
||||
return -1;
|
||||
|
||||
return itr->second.RankId;
|
||||
}
|
||||
|
||||
void Guild::Disband()
|
||||
{
|
||||
WorldPacket data(SMSG_GUILD_EVENT, 1);
|
||||
|
|
|
|||
|
|
@ -324,6 +324,7 @@ class Guild
|
|||
{
|
||||
return ((GetRankRights(rankId) & right) != GR_RIGHT_EMPTY) ? true : false;
|
||||
}
|
||||
int32 GetRank(uint32 LowGuid);
|
||||
|
||||
void Roster(WorldSession *session);
|
||||
void Query(WorldSession *session);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue