diff options
author | KingPin <none@none> | 2008-11-05 20:10:19 -0600 |
---|---|---|
committer | KingPin <none@none> | 2008-11-05 20:10:19 -0600 |
commit | 8d331f2b10cff29ee0571f7056ad353df6a3eabd (patch) | |
tree | 36ef334fec8d6a55f151d40ca5e709880346c219 /src/game/GuildHandler.cpp | |
parent | 404f72c7a2e9c230156e51f8013993b3c8f03d93 (diff) |
[svn] * Avoid access to bag item prototype for getting bag size, use related item update field instead as more fast source.
* Better check client inventory pos data received in some client packets to skip invalid cases.
* Removed some unnecessary database queries.
* Make guid lookup for adding ignore async.
* Added two parameter versions of the AsyncQuery function
* Make queries for adding friends async. - Hunuza
* Replace some PQuery() calls with more simple Query() - Hunuza
* Mark spell as executed instead of deleteable to solve crash.
*** Source mangos.
**Its a big commit. so test with care... or without care.... whatever floats your boat.
--HG--
branch : trunk
Diffstat (limited to 'src/game/GuildHandler.cpp')
-rw-r--r-- | src/game/GuildHandler.cpp | 193 |
1 files changed, 81 insertions, 112 deletions
diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index 1c90df71e1c..fbe03b2776c 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -164,9 +164,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(); @@ -178,24 +189,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); @@ -296,11 +295,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"); @@ -308,28 +302,22 @@ 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; @@ -339,25 +327,16 @@ 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); - return; - } - else if((plRankId-1) == 0 || (plRankId-1) < this->GetPlayer()->GetRank()) + if(plRankId < 2 || (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; guild->ChangeRank(plGuid, newRankId); @@ -378,11 +357,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"); @@ -391,26 +365,21 @@ 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) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } + + if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_DEMOTE)) + { + SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); + return; + } + + uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); if( !plGuid ) { @@ -424,18 +393,13 @@ 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 <= this->GetPlayer()->GetRank()) return; @@ -535,6 +499,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) @@ -547,14 +525,7 @@ 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; @@ -564,11 +535,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); @@ -635,8 +601,20 @@ 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(); @@ -648,12 +626,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; @@ -663,11 +636,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); @@ -692,8 +660,19 @@ 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(); @@ -705,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; @@ -720,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); |