diff --git a/src/game/Guild.h b/src/game/Guild.h index e5a8c3261..48b77141c 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -325,6 +325,10 @@ class Guild return ((GetRankRights(rankId) & right) != GR_RIGHT_EMPTY) ? true : false; } int32 GetRank(uint32 LowGuid); + bool IsMember(uint32 LowGuid) + { + return (members.find(LowGuid) != members.end()); + } void Roster(WorldSession *session); void Query(WorldSession *session); diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index db9e5b483..1ac528222 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -150,10 +150,6 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) CHECK_PACKET_SIZE(recvPacket, 1); std::string plName; - uint64 plGuid; - uint32 plGuildId; - Guild *guild; - Player *player; //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); @@ -162,7 +158,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) if(!normalizePlayerName(plName)) return; - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); @@ -175,17 +171,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) return; } - player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()); - if(player) - { - plGuid = player->GetGUID(); - plGuildId = player->GetGuildId(); - } - else - { - plGuid = objmgr.GetPlayerGUIDByName(plName); - plGuildId = Player::GetGuildIdFromDB(plGuid); - } + uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); if(!plGuid) { @@ -199,7 +185,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) return; } - if(GetPlayer()->GetGuildId() != plGuildId) + if(!guild->IsMember(GUID_LOPART(plGuid))) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -484,9 +470,6 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) CHECK_PACKET_SIZE(recvPacket, 1); std::string name; - Player *newLeader; - uint64 newLeaderGUID; - uint32 newLeaderGuild; Player *oldLeader = GetPlayer(); Guild *guild; @@ -499,36 +482,26 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) guild = objmgr.GetGuildById(oldLeader->GetGuildId()); - if(!guild) + if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } - if(oldLeader->GetGUID() != guild->GetLeader()) + if (oldLeader->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } - newLeader = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); - if(newLeader) - { - newLeaderGUID = newLeader->GetGUID(); - newLeaderGuild = newLeader->GetGuildId(); - } - else - { - newLeaderGUID = objmgr.GetPlayerGUIDByName(name); - newLeaderGuild = Player::GetGuildIdFromDB(newLeaderGUID); - } + uint64 newLeaderGUID = objmgr.GetPlayerGUIDByName(name); - if(!newLeaderGUID) + if (!newLeaderGUID) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); return; } - if(oldLeader->GetGuildId() != newLeaderGuild) + if (!guild->IsMember(GUID_LOPART(newLeaderGUID))) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -586,10 +559,6 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 1); - Guild *guild; - Player *player; - uint64 plGuid; - uint32 plGuildId; std::string name,PNOTE; //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); @@ -599,38 +568,29 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) if(!normalizePlayerName(name)) 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); return; } - if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE)) + 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(); - plGuildId = player->GetGuildId(); - } - else - { - plGuid = objmgr.GetPlayerGUIDByName(name); - plGuildId = Player::GetGuildIdFromDB(plGuid); - } + uint64 plGuid = objmgr.GetPlayerGUIDByName(name); - if(!plGuid) + if (!plGuid) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); return; } - else if(GetPlayer()->GetGuildId() != plGuildId) + + if (!guild->IsMember(GUID_LOPART(plGuid))) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -646,50 +606,37 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 1); - Guild *guild; - Player *player; - uint64 plGuid; - uint32 plGuildId; std::string plName, OFFNOTE; //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); recvPacket >> plName; - if(!normalizePlayerName(plName)) + if (!normalizePlayerName(plName)) 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); return; } - if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE)) + 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(); - plGuildId = player->GetGuildId(); - } - else - { - plGuid = objmgr.GetPlayerGUIDByName(plName); - plGuildId = Player::GetGuildIdFromDB(plGuid); - } + uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); - if( !plGuid ) + if (!plGuid) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); return; } - else if(GetPlayer()->GetGuildId() != plGuildId) + + if (!guild->IsMember(GUID_LOPART(plGuid))) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return;