aboutsummaryrefslogtreecommitdiff
path: root/src/game/GroupHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/GroupHandler.cpp')
-rw-r--r--src/game/GroupHandler.cpp88
1 files changed, 42 insertions, 46 deletions
diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
index 5f384aa1d8d..3890a9f77a6 100644
--- a/src/game/GroupHandler.cpp
+++ b/src/game/GroupHandler.cpp
@@ -44,7 +44,7 @@
-FIX sending PartyMemberStats
*/
-void WorldSession::SendPartyResult(PartyOperation operation, std::string member, PartyResult res)
+void WorldSession::SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res)
{
WorldPacket data(SMSG_PARTY_COMMAND_RESULT, (8+member.size()+1));
data << (uint32)operation;
@@ -254,85 +254,81 @@ void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket & recv_data)
uint64 guid;
recv_data >> guid;
- if(_player->InBattleGround())
+ //can't uninvite yourself
+ if(guid == GetPlayer()->GetGUID())
{
- SendPartyResult(PARTY_OP_INVITE, "", PARTY_RESULT_INVITE_RESTRICTED);
+ sLog.outError("WorldSession::HandleGroupUninviteGuidOpcode: leader %s(%d) tried to uninvite himself from the group.", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow());
return;
}
- std::string membername;
- if(!objmgr.GetPlayerNameByGUID(guid, membername))
- return; // not found
-
- HandleGroupUninvite(guid, membername);
-}
-
-void WorldSession::HandleGroupUninviteNameOpcode(WorldPacket & recv_data)
-{
- CHECK_PACKET_SIZE(recv_data,1);
-
- std::string membername;
- recv_data >> membername;
-
- if(_player->InBattleGround())
+ PartyResult res = GetPlayer()->CanUninviteFromGroup();
+ if(res != PARTY_RESULT_OK)
{
- SendPartyResult(PARTY_OP_INVITE, membername, PARTY_RESULT_INVITE_RESTRICTED);
+ SendPartyResult(PARTY_OP_LEAVE, "", res);
return;
}
- // player not found
- if(!normalizePlayerName(membername))
+ Group* grp = GetPlayer()->GetGroup();
+ if(!grp)
return;
- uint64 guid = objmgr.GetPlayerGUIDByName(membername);
+ if(grp->IsMember(guid))
+ {
+ Player::RemoveFromGroup(grp,guid);
+ return;
+ }
- // player not found
- if(!guid)
+ if(Player* plr = grp->GetInvited(guid))
+ {
+ plr->UninviteFromGroup();
return;
+ }
- HandleGroupUninvite(guid, membername);
+ SendPartyResult(PARTY_OP_LEAVE, "", PARTY_RESULT_NOT_IN_YOUR_PARTY);
}
-void WorldSession::HandleGroupUninvite(uint64 guid, std::string name)
+void WorldSession::HandleGroupUninviteNameOpcode(WorldPacket & recv_data)
{
- Group *group = GetPlayer()->GetGroup();
- if(!group)
+ CHECK_PACKET_SIZE(recv_data,1);
+
+ std::string membername;
+ recv_data >> membername;
+
+ // player not found
+ if(!normalizePlayerName(membername))
return;
- if(_player->InBattleGround())
+ // can't uninvite yourself
+ if(GetPlayer()->GetName() == membername)
{
- SendPartyResult(PARTY_OP_INVITE, "", PARTY_RESULT_INVITE_RESTRICTED);
+ sLog.outError("WorldSession::HandleGroupUninviteNameOpcode: leader %s(%d) tried to uninvite himself from the group.", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow());
return;
}
- Player *player = objmgr.GetPlayer(guid);
-
- /** error handling **/
- if(!group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID()))
+ PartyResult res = GetPlayer()->CanUninviteFromGroup();
+ if(res != PARTY_RESULT_OK)
{
- SendPartyResult(PARTY_OP_LEAVE, "", PARTY_RESULT_YOU_NOT_LEADER);
+ SendPartyResult(PARTY_OP_LEAVE, "", res);
return;
}
- if(!group->IsMember(guid) && (player && player->GetGroupInvite() != group))
+ Group* grp = GetPlayer()->GetGroup();
+ if(!grp)
+ return;
+
+ if(uint64 guid = grp->GetMemberGUID(membername))
{
- SendPartyResult(PARTY_OP_LEAVE, name, PARTY_RESULT_NOT_IN_YOUR_PARTY);
+ Player::RemoveFromGroup(grp,guid);
return;
}
- if(guid == GetPlayer()->GetGUID())
+ if(Player* plr = grp->GetInvited(membername))
{
- sLog.outError("WorldSession::HandleGroupUninvite: leader %s(%d) tried to uninvite himself from the group.", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow());
+ plr->UninviteFromGroup();
return;
}
- /********************/
-
- // everything's fine, do it
- if(player && player->GetGroupInvite()) // uninvite invitee
- player->UninviteFromGroup();
- else // uninvite member
- Player::RemoveFromGroup(group,guid);
+ SendPartyResult(PARTY_OP_LEAVE, membername, PARTY_RESULT_NOT_IN_YOUR_PARTY);
}
void WorldSession::HandleGroupSetLeaderOpcode( WorldPacket & recv_data )