aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaldorei <sandstorm21@wanadoo.fr>2012-08-07 02:17:01 +0300
committerKaldorei <sandstorm21@wanadoo.fr>2012-08-07 02:17:01 +0300
commit892d88c89a86adf865ccfec1033d0d7ba5eba07c (patch)
tree047ca84ed6b8a76d72530e682c05407fd743d004
parent638dc3ddbea5b9caeac4de35aac5c911d01aa683 (diff)
Fixed SMSG_GROUP_INVITE
-rwxr-xr-xsrc/server/game/Handlers/GroupHandler.cpp100
1 files changed, 88 insertions, 12 deletions
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp
index c6870bca98d..433930bd7c6 100755
--- a/src/server/game/Handlers/GroupHandler.cpp
+++ b/src/server/game/Handlers/GroupHandler.cpp
@@ -96,6 +96,8 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket & recvData)
recvData.ReadByteSeq(crossRealmGuid[5]);
recvData.ReadByteSeq(crossRealmGuid[3]);
recvData.ReadByteSeq(crossRealmGuid[2]);
+
+ ObjectGuid inviterGuid = GetPlayer()->GetGUID();
// attempt add selected player
@@ -161,12 +163,49 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket & recvData)
if (group2)
{
// tell the player that they were invited but it failed as they were already in a group
- WorldPacket data(SMSG_GROUP_INVITE, 10); // guess size
- data << uint8(0); // invited/already in group flag
- data << GetPlayer()->GetName(); // max len 48
- data << uint32(0); // unk
- data << uint8(0); // count
- data << uint32(0); // unk
+ WorldPacket data(SMSG_GROUP_INVITE, 10);
+ data.WriteBit(0);
+ data.WriteBit(inviterGuid[0]);
+ data.WriteBit(inviterGuid[3]);
+ data.WriteBit(inviterGuid[2]);
+ data.WriteBit(0); // Already in group byte
+ data.WriteBit(inviterGuid[6]);
+ data.WriteBit(inviterGuid[5]);
+
+ data.WriteBits(0, 9); // Cross realm name or invited name size
+ data.WriteBit(inviterGuid[4]);
+ data.WriteBits(strlen(GetPlayer()->GetName()), 7);
+ data.WriteBits(0, 24); // Count 2
+
+ data.WriteBit(0);
+
+ data.WriteBit(inviterGuid[1]);
+ data.WriteBit(inviterGuid[7]);
+
+ data.WriteByteSeq(inviterGuid[1]);
+ data.WriteByteSeq(inviterGuid[4]);
+
+ data << int32(getMSTime());
+ data << int32(0);
+ data << int32(0);
+
+ data.WriteByteSeq(inviterGuid[6]);
+ data.WriteByteSeq(inviterGuid[0]);
+ data.WriteByteSeq(inviterGuid[2]);
+ data.WriteByteSeq(inviterGuid[3]);
+
+ // for count2 { int32(0) }
+
+ data.WriteByteSeq(inviterGuid[5]);
+
+ // If it's cross realm here is Realm Name, if it's normal case place here Player Name
+ data.append((uint8 const*)GetPlayer()->GetName(), strlen(GetPlayer()->GetName()));
+
+ data.WriteByteSeq(inviterGuid[7]);
+
+ // Player name in Cross Realm case
+
+ data << int32(0);
player->GetSession()->SendPacket(&data);
}
@@ -217,12 +256,49 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket & recvData)
}
// ok, we do it
- WorldPacket data(SMSG_GROUP_INVITE, 10); // guess size
- data << uint8(1); // invited/already in group flag
- data << GetPlayer()->GetName(); // max len 48
- data << uint32(0); // unk
- data << uint8(0); // count
- data << uint32(0); // unk
+ WorldPacket data(SMSG_GROUP_INVITE, 10);
+ data.WriteBit(0);
+ data.WriteBit(inviterGuid[0]);
+ data.WriteBit(inviterGuid[3]);
+ data.WriteBit(inviterGuid[2]);
+ data.WriteBit(1); // Already in group byte
+ data.WriteBit(inviterGuid[6]);
+ data.WriteBit(inviterGuid[5]);
+
+ data.WriteBits(0, 9); // Cross realm name or invited name size
+ data.WriteBit(inviterGuid[4]);
+ data.WriteBits(strlen(GetPlayer()->GetName()), 7);
+ data.WriteBits(0, 24); // Count 2
+
+ data.WriteBit(0);
+
+ data.WriteBit(inviterGuid[1]);
+ data.WriteBit(inviterGuid[7]);
+
+ data.WriteByteSeq(inviterGuid[1]);
+ data.WriteByteSeq(inviterGuid[4]);
+
+ data << int32(getMSTime());
+ data << int32(0);
+ data << int32(0);
+
+ data.WriteByteSeq(inviterGuid[6]);
+ data.WriteByteSeq(inviterGuid[0]);
+ data.WriteByteSeq(inviterGuid[2]);
+ data.WriteByteSeq(inviterGuid[3]);
+
+ // for count2 { int32(0) }
+
+ data.WriteByteSeq(inviterGuid[5]);
+
+ // If it's cross realm here is Realm Name, if it's normal case place here Player Name
+ data.append((uint8 const*)GetPlayer()->GetName(), strlen(GetPlayer()->GetName()));
+
+ data.WriteByteSeq(inviterGuid[7]);
+
+ // Player name in Cross Realm case
+
+ data << int32(0);
player->GetSession()->SendPacket(&data);
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_PARTY_RESULT_OK);