diff options
author | Kaldorei <sandstorm21@wanadoo.fr> | 2012-08-07 02:17:01 +0300 |
---|---|---|
committer | Kaldorei <sandstorm21@wanadoo.fr> | 2012-08-07 02:17:01 +0300 |
commit | 892d88c89a86adf865ccfec1033d0d7ba5eba07c (patch) | |
tree | 047ca84ed6b8a76d72530e682c05407fd743d004 | |
parent | 638dc3ddbea5b9caeac4de35aac5c911d01aa683 (diff) |
Fixed SMSG_GROUP_INVITE
-rwxr-xr-x | src/server/game/Handlers/GroupHandler.cpp | 100 |
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); |