[10378] Avoid double lookup member slot in guild operations.

Also more wide use ObjectGuid in guild code
and fixed some uint32->uint64 guid assigns.
This commit is contained in:
VladimirMangos 2010-08-19 07:35:43 +04:00
parent f2406c1962
commit 9b3d37f0cf
9 changed files with 189 additions and 190 deletions

View file

@ -123,7 +123,7 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
player->SetGuildIdInvited(GetPlayer()->GetGuildId());
// Put record into guildlog
guild->LogGuildEvent(GUILD_EVENT_LOG_INVITE_PLAYER, GetPlayer()->GetGUIDLow(), player->GetGUIDLow(), 0);
guild->LogGuildEvent(GUILD_EVENT_LOG_INVITE_PLAYER, GetPlayer()->GetObjectGuid(), player->GetObjectGuid());
WorldPacket data(SMSG_GUILD_INVITE, (8+10)); // guess size
data << GetPlayer()->GetName();
@ -156,8 +156,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
return;
}
uint64 plGuid;
MemberSlot* slot = guild->GetMemberSlot(plName, plGuid);
MemberSlot* slot = guild->GetMemberSlot(plName);
if (!slot)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
@ -177,9 +176,9 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
return;
}
guild->DelMember(plGuid);
guild->DelMember(slot->guid);
// Put record into guild log
guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0);
guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid);
guild->BroadcastEvent(GE_REMOVED, plName.c_str(), _player->GetName());
}
@ -192,17 +191,17 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
DEBUG_LOG("WORLD: Received CMSG_GUILD_ACCEPT");
guild = sObjectMgr.GetGuildById(player->GetGuildIdInvited());
if(!guild || player->GetGuildId())
if (!guild || player->GetGuildId())
return;
// not let enemies sign guild charter
if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GUILD) && player->GetTeam() != sObjectMgr.GetPlayerTeamByGUID(guild->GetLeader()))
if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GUILD) && player->GetTeam() != sObjectMgr.GetPlayerTeamByGUID(guild->GetLeaderGuid()))
return;
if(!guild->AddMember(GetPlayer()->GetGUID(),guild->GetLowestRank()))
if (!guild->AddMember(GetPlayer()->GetObjectGuid(),guild->GetLowestRank()))
return;
// Put record into guild log
guild->LogGuildEvent(GUILD_EVENT_LOG_JOIN_GUILD, GetPlayer()->GetGUIDLow(), 0, 0);
guild->LogGuildEvent(GUILD_EVENT_LOG_JOIN_GUILD, GetPlayer()->GetObjectGuid());
guild->BroadcastEvent(GE_JOINED, player->GetObjectGuid(), player->GetName());
}
@ -264,16 +263,14 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
return;
}
uint64 plGuid;
MemberSlot* slot = guild->GetMemberSlot(plName, plGuid);
MemberSlot* slot = guild->GetMemberSlot(plName);
if (!slot)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
if (plGuid == GetPlayer()->GetGUID())
if (slot->guid == GetPlayer()->GetObjectGuid())
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID);
return;
@ -282,7 +279,7 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
// allow to promote only to lower rank than member's rank
// guildmaster's rank = 0
// GetPlayer()->GetRank() + 1 is highest rank that current player can promote to
if(GetPlayer()->GetRank() + 1 >= slot->RankId)
if (GetPlayer()->GetRank() + 1 >= slot->RankId)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_HIGH_S);
return;
@ -290,9 +287,9 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
uint32 newRankId = slot->RankId - 1; //when promoting player, rank is decreased
guild->ChangeRank(plGuid, newRankId);
slot->ChangeRank(newRankId);
// Put record into guild log
guild->LogGuildEvent(GUILD_EVENT_LOG_PROMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId);
guild->LogGuildEvent(GUILD_EVENT_LOG_PROMOTE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid, newRankId);
guild->BroadcastEvent(GE_PROMOTION, _player->GetName(), plName.c_str(), guild->GetRankName(newRankId).c_str());
}
@ -321,8 +318,7 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
return;
}
uint64 plGuid;
MemberSlot* slot = guild->GetMemberSlot(plName, plGuid);
MemberSlot* slot = guild->GetMemberSlot(plName);
if (!slot)
{
@ -330,7 +326,7 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
return;
}
if (plGuid == GetPlayer()->GetGUID())
if (slot->guid == GetPlayer()->GetObjectGuid())
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID);
return;
@ -352,9 +348,9 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
uint32 newRankId = slot->RankId + 1; //when demoting player, rank is increased
guild->ChangeRank(plGuid, newRankId);
slot->ChangeRank(newRankId);
// Put record into guild log
guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId);
guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetObjectGuid(), slot->guid, newRankId);
guild->BroadcastEvent(GE_DEMOTION, _player->GetName(), plName.c_str(), guild->GetRankName(slot->RankId).c_str());
}
@ -364,27 +360,27 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
DEBUG_LOG("WORLD: Received CMSG_GUILD_LEAVE");
Guild *guild = sObjectMgr.GetGuildById(_player->GetGuildId());
if(!guild)
if (!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1)
if (_player->GetObjectGuid() == guild->GetLeaderGuid() && guild->GetMemberSize() > 1)
{
SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE);
return;
}
if(_player->GetGUID() == guild->GetLeader())
if (_player->GetObjectGuid() == guild->GetLeaderGuid())
{
guild->Disband();
return;
}
guild->DelMember(_player->GetGUID());
guild->DelMember(_player->GetObjectGuid());
// Put record into guild log
guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0);
guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetObjectGuid());
guild->BroadcastEvent(GE_LEFT, _player->GetGUID(), _player->GetName());
@ -396,13 +392,13 @@ void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
DEBUG_LOG("WORLD: Received CMSG_GUILD_DISBAND");
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
if (!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(GetPlayer()->GetGUID() != guild->GetLeader())
if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid())
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
return;
@ -433,23 +429,28 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
return;
}
if (oldLeader->GetGUID() != guild->GetLeader())
if (oldLeader->GetObjectGuid() != guild->GetLeaderGuid())
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
return;
}
uint64 newLeaderGUID;
MemberSlot* slot = guild->GetMemberSlot(name, newLeaderGUID);
MemberSlot* oldSlot = guild->GetMemberSlot(oldLeader->GetObjectGuid());
if (!oldSlot)
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
return;
}
MemberSlot* slot = guild->GetMemberSlot(name);
if (!slot)
{
SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
return;
}
guild->SetLeader(newLeaderGUID);
guild->ChangeRank(oldLeader->GetGUID(), GR_OFFICER);
guild->SetLeader(slot->guid);
oldSlot->ChangeRank(GR_OFFICER);
guild->BroadcastEvent(GE_LEADER_CHANGED, oldLeader->GetName(), name.c_str());
}
@ -506,9 +507,7 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
return;
}
uint64 plGuid;
MemberSlot* slot = guild->GetMemberSlot(name, plGuid);
MemberSlot* slot = guild->GetMemberSlot(name);
if (!slot)
{
SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
@ -516,7 +515,8 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
}
recvPacket >> PNOTE;
guild->SetPNOTE(plGuid, PNOTE);
slot->SetPNOTE(PNOTE);
guild->Roster(this);
}
@ -544,9 +544,7 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
return;
}
uint64 plGuid;
MemberSlot* slot = guild->GetMemberSlot(plName, plGuid);
MemberSlot* slot = guild->GetMemberSlot(plName);
if (!slot)
{
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
@ -554,7 +552,8 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
}
recvPacket >> OFFNOTE;
guild->SetOFFNOTE(plGuid, OFFNOTE);
slot->SetOFFNOTE(OFFNOTE);
guild->Roster(this);
}
@ -568,13 +567,14 @@ void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
DEBUG_LOG("WORLD: Received CMSG_GUILD_RANK");
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
if (!guild)
{
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
return;
}
else if(GetPlayer()->GetGUID() != guild->GetLeader())
if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid())
{
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
@ -618,19 +618,19 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
recvPacket >> rankname;
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
if (!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
return;
}
if(GetPlayer()->GetGUID() != guild->GetLeader())
if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid())
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
return;
}
if(guild->GetRanksSize() >= GUILD_RANKS_MAX_COUNT) // client not let create more 10 than ranks
if (guild->GetRanksSize() >= GUILD_RANKS_MAX_COUNT) // client not let create more 10 than ranks
return;
guild->CreateRank(rankname, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK);
@ -644,12 +644,13 @@ void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
DEBUG_LOG("WORLD: Received CMSG_GUILD_DEL_RANK");
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
if (!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
return;
}
else if(GetPlayer()->GetGUID() != guild->GetLeader())
if (GetPlayer()->GetObjectGuid() != guild->GetLeaderGuid())
{
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
return;
@ -715,25 +716,25 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket)
}
// remove fake death
if(GetPlayer()->hasUnitState(UNIT_STAT_DIED))
if (GetPlayer()->hasUnitState(UNIT_STAT_DIED))
GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
if (!guild)
{
//"You are not part of a guild!";
SendSaveGuildEmblem(ERR_GUILDEMBLEM_NOGUILD);
return;
}
if (guild->GetLeader() != GetPlayer()->GetGUID())
if (guild->GetLeaderGuid() != GetPlayer()->GetObjectGuid())
{
//"Only guild leaders can create emblems."
SendSaveGuildEmblem(ERR_GUILDEMBLEM_NOTGUILDMASTER);
return;
}
if(GetPlayer()->GetMoney() < 10*GOLD)
if (GetPlayer()->GetMoney() < 10*GOLD)
{
//"You can't afford to do that."
SendSaveGuildEmblem(ERR_GUILDEMBLEM_NOTENOUGHMONEY);