From b681f5ac1a8a7a74d33e606b2e062ec1bc749fd0 Mon Sep 17 00:00:00 2001 From: hunuza Date: Fri, 7 Nov 2008 11:49:27 +0100 Subject: [PATCH] Access cached member lists in guild handlers instead of querying the DB. --- src/game/Guild.h | 12 +++++ src/game/GuildHandler.cpp | 97 ++++++++++++++------------------------- 2 files changed, 46 insertions(+), 63 deletions(-) diff --git a/src/game/Guild.h b/src/game/Guild.h index 48b77141c..31da4438a 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -329,6 +329,18 @@ class Guild { return (members.find(LowGuid) != members.end()); } + MemberSlot* GetMemberSlot(std::string const& name, uint64& guid) + { + for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + { + if(itr->second.name == name) + { + guid = itr->first; + return &itr->second; + } + } + return NULL; + } void Roster(WorldSession *session); void Query(WorldSession *session); diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index 1ac528222..0cdf6c5c7 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -171,26 +171,20 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) return; } - uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); - - if(!plGuid) - { - SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); - return; - } - - if(plGuid == guild->GetLeader()) - { - SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE); - return; - } - - if(!guild->IsMember(GUID_LOPART(plGuid))) + uint64 plGuid; + MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); + if(!slot) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; } + if(slot->RankId == GR_GUILDMASTER) + { + SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE); + return; + } + guild->DelMember(plGuid); // Put record into guildlog guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0); @@ -299,29 +293,25 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) return; } - uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); + uint64 plGuid; + MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); - if(!plGuid) + if(!slot) { - SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); + SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; } - else if(plGuid == GetPlayer()->GetGUID()) + + if(plGuid == GetPlayer()->GetGUID()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_NAME_INVALID); return; } - int32 plRankId = guild->GetRank(GUID_LOPART(plGuid)); - if(plRankId == -1) - { - SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); - return; - } - if(plRankId < 2 || (plRankId-1) < GetPlayer()->GetRank()) + if(slot->RankId < 2 || (slot->RankId-1) < GetPlayer()->GetRank()) return; - uint32 newRankId = plRankId < guild->GetNrRanks() ? plRankId-1 : guild->GetNrRanks()-1; + uint32 newRankId = slot->RankId < guild->GetNrRanks() ? slot->RankId-1 : guild->GetNrRanks()-1; guild->ChangeRank(plGuid, newRankId); // Put record into guildlog @@ -363,11 +353,12 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) return; } - uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); + uint64 plGuid; + MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); - if( !plGuid ) + if (!slot) { - SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); + SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; } @@ -377,25 +368,19 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) return; } - int32 plRankId = guild->GetRank(GUID_LOPART(plGuid)); - if(plRankId == -1) - { - SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); - return; - } - if((plRankId+1) >= guild->GetNrRanks() || plRankId <= GetPlayer()->GetRank()) + if((slot->RankId+1) >= guild->GetNrRanks() || slot->RankId <= GetPlayer()->GetRank()) return; - guild->ChangeRank(plGuid, (plRankId+1)); + guild->ChangeRank(plGuid, (slot->RankId+1)); // Put record into guildlog - guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), (plRankId+1)); + guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), (slot->RankId+1)); WorldPacket data(SMSG_GUILD_EVENT, (2+30)); // guess size data << (uint8)GE_DEMOTION; data << (uint8)3; data << GetPlayer()->GetName(); data << plName; - data << guild->GetRankName(plRankId+1); + data << guild->GetRankName(slot->RankId+1); guild->BroadcastPacket(&data); } @@ -494,14 +479,10 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) return; } - uint64 newLeaderGUID = objmgr.GetPlayerGUIDByName(name); + uint64 newLeaderGUID; + MemberSlot* slot = guild->GetMemberSlot(name, newLeaderGUID); - if (!newLeaderGUID) - { - SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); - return; - } - if (!guild->IsMember(GUID_LOPART(newLeaderGUID))) + if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -582,15 +563,10 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) return; } - uint64 plGuid = objmgr.GetPlayerGUIDByName(name); + uint64 plGuid; + MemberSlot* slot = guild->GetMemberSlot(name, plGuid); - if (!plGuid) - { - SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); - return; - } - - if (!guild->IsMember(GUID_LOPART(plGuid))) + if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -628,15 +604,10 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) return; } - uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); + uint64 plGuid; + MemberSlot* slot = guild->GetMemberSlot(plName, plGuid); - if (!plGuid) - { - SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); - return; - } - - if (!guild->IsMember(GUID_LOPART(plGuid))) + if (!slot) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return;