mirror of
https://github.com/mangosfour/server.git
synced 2025-12-16 04:37:00 +00:00
[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:
parent
f2406c1962
commit
9b3d37f0cf
9 changed files with 189 additions and 190 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue