From 3b68b5413ad7bbbc64a882c4661825ef48ffdfbc Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Mon, 19 Apr 2021 00:32:56 +0200 Subject: [PATCH] Core/Packets: converted SMSG_PARTY_COMMAND_RESULT, CMSG_PARTY_INVITE, SMSG_PARTY_INVITE, CMSG_PARTY_INVITE_RESPONSE and SMSG_GROUP_DECLINE to packet class --- src/server/game/Handlers/GroupHandler.cpp | 213 +++--------------- .../game/Server/Packets/PartyPackets.cpp | 125 ++++++++++ src/server/game/Server/Packets/PartyPackets.h | 73 ++++++ src/server/game/Server/Protocol/Opcodes.cpp | 6 +- src/server/game/Server/Protocol/Opcodes.h | 6 +- src/server/game/Server/WorldSession.cpp | 4 +- src/server/game/Server/WorldSession.h | 6 +- 7 files changed, 241 insertions(+), 192 deletions(-) diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index e63e6b7e37..305706357b 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -51,119 +51,79 @@ class Aura; void WorldSession::SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res, uint32 val /* = 0 */) { - WorldPacket data(SMSG_PARTY_COMMAND_RESULT, 4 + member.size() + 1 + 4 + 4 + 8); - data << uint32(operation); - data << member; - data << uint32(res); - data << uint32(val); // LFD cooldown related (used with ERR_PARTY_LFG_BOOT_COOLDOWN_S and ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S) - data << uint64(0); // player who caused error (in some cases). + WorldPackets::Party::PartyCommandResult packet; + packet.Name = member; + packet.Command = uint8(operation); + packet.Result = uint8(res); + packet.ResultData = val; + packet.ResultGUID = ObjectGuid::Empty; - SendPacket(&data); + SendPacket(packet.Write()); } -void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData) +void WorldSession::HandlePartyInviteOpcode(WorldPackets::Party::PartyInviteClient& packet) { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_GROUP_INVITE"); - - ObjectGuid crossRealmGuid; // unused - - recvData.read_skip(); // Non-zero in cross realm invites - recvData.read_skip(); // Always 0 - - crossRealmGuid[2] = recvData.ReadBit(); - crossRealmGuid[7] = recvData.ReadBit(); - - uint8 realmLen = recvData.ReadBits(9); - - crossRealmGuid[3] = recvData.ReadBit(); - - uint8 nameLen = recvData.ReadBits(10); - - crossRealmGuid[5] = recvData.ReadBit(); - crossRealmGuid[4] = recvData.ReadBit(); - crossRealmGuid[6] = recvData.ReadBit(); - crossRealmGuid[0] = recvData.ReadBit(); - crossRealmGuid[1] = recvData.ReadBit(); - - recvData.ReadByteSeq(crossRealmGuid[4]); - recvData.ReadByteSeq(crossRealmGuid[7]); - recvData.ReadByteSeq(crossRealmGuid[6]); - - std::string memberName, realmName; - memberName = recvData.ReadString(nameLen); - realmName = recvData.ReadString(realmLen); // unused - - recvData.ReadByteSeq(crossRealmGuid[1]); - recvData.ReadByteSeq(crossRealmGuid[0]); - recvData.ReadByteSeq(crossRealmGuid[5]); - recvData.ReadByteSeq(crossRealmGuid[3]); - recvData.ReadByteSeq(crossRealmGuid[2]); - - // attempt add selected player - // cheating - if (!normalizePlayerName(memberName)) + if (!normalizePlayerName(packet.TargetName)) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_BAD_PLAYER_NAME_S); return; } Player* invitingPlayer = GetPlayer(); - Player* invitedPlayer = ObjectAccessor::FindPlayerByName(memberName); + Player* invitedPlayer = ObjectAccessor::FindPlayerByName(packet.TargetName); // no player if (!invitedPlayer) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_BAD_PLAYER_NAME_S); return; } // player trying to invite himself (most likely cheating) if (invitedPlayer == invitingPlayer) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_BAD_PLAYER_NAME_S); return; } // restrict invite to GMs if (!sWorld->getBoolConfig(CONFIG_ALLOW_GM_GROUP) && !invitingPlayer->IsGameMaster() && invitedPlayer->IsGameMaster()) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_BAD_PLAYER_NAME_S); return; } // can't group with if (!invitingPlayer->IsGameMaster() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && invitingPlayer->GetTeam() != invitedPlayer->GetTeam()) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_PLAYER_WRONG_FACTION); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_PLAYER_WRONG_FACTION); return; } if (invitingPlayer->GetInstanceId() != 0 && invitedPlayer->GetInstanceId() != 0 && invitingPlayer->GetInstanceId() != invitedPlayer->GetInstanceId() && invitingPlayer->GetMapId() == invitedPlayer->GetMapId()) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_TARGET_NOT_IN_INSTANCE_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_TARGET_NOT_IN_INSTANCE_S); return; } // just ignore us if (invitedPlayer->GetInstanceId() != 0 && invitedPlayer->GetDungeonDifficulty() != invitingPlayer->GetDungeonDifficulty()) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_IGNORING_YOU_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_IGNORING_YOU_S); return; } if (invitedPlayer->GetSocial()->HasIgnore(invitingPlayer->GetGUID())) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_IGNORING_YOU_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_IGNORING_YOU_S); return; } if (!invitedPlayer->GetSocial()->HasFriend(invitingPlayer->GetGUID()) && invitingPlayer->getLevel() < sWorld->getIntConfig(CONFIG_PARTY_LEVEL_REQ)) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_INVITE_RESTRICTED); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_INVITE_RESTRICTED); return; } - ObjectGuid invitedGuid = _player->GetGUID(); - Group* group = invitingPlayer->GetGroup(); if (group && group->isBGGroup()) group = invitingPlayer->GetOriginalGroup(); @@ -176,64 +136,14 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData) // player already in another group or invited if (group2 || invitedPlayer->GetGroupInvite()) { - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_ALREADY_IN_GROUP_S); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_ALREADY_IN_GROUP_S); if (group2) { // tell the player that they were invited but it failed as they were already in a group - WorldPacket data(SMSG_GROUP_INVITE, 45); - - data.WriteBit(0); - - data.WriteBit(invitedGuid[0]); - data.WriteBit(invitedGuid[3]); - data.WriteBit(invitedGuid[2]); - - data.WriteBit(0); // Inverse already in group - - data.WriteBit(invitedGuid[6]); - data.WriteBit(invitedGuid[5]); - - data.WriteBits(0, 9); // Realm name - - data.WriteBit(invitedGuid[4]); - - data.WriteBits(invitingPlayer->GetName().size(), 7); // Inviter name length - - data.WriteBits(0, 24); // Count 2 - - data.WriteBit(0); - - data.WriteBit(invitedGuid[1]); - data.WriteBit(invitedGuid[7]); - - data.FlushBits(); - - data.WriteByteSeq(invitedGuid[1]); - data.WriteByteSeq(invitedGuid[4]); - - data << int32(getMSTime()); - data << int32(0); - data << int32(0); - - data.WriteByteSeq(invitedGuid[6]); - data.WriteByteSeq(invitedGuid[0]); - data.WriteByteSeq(invitedGuid[2]); - data.WriteByteSeq(invitedGuid[3]); - - // for count2 { int32(0) } - - data.WriteByteSeq(invitedGuid[5]); - - // data.append(realm name); - - data.WriteByteSeq(invitedGuid[7]); - - data.WriteString(GetPlayer()->GetName()); // inviter name - - data << int32(0); - - invitedPlayer->SendDirectMessage(&data); + WorldPackets::Party::PartyInvite partyInvite; + partyInvite.Initialize(invitingPlayer, packet.ProposedRoles, false); + invitedPlayer->SendDirectMessage(partyInvite.Write()); } return; @@ -284,81 +194,21 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData) } } - // ok, we do it - WorldPacket data(SMSG_GROUP_INVITE, 45); + WorldPackets::Party::PartyInvite partyInvite; + partyInvite.Initialize(invitingPlayer, packet.ProposedRoles, true); + invitedPlayer->SendDirectMessage(partyInvite.Write()); - data.WriteBit(0); - - data.WriteBit(invitedGuid[0]); - data.WriteBit(invitedGuid[3]); - data.WriteBit(invitedGuid[2]); - - data.WriteBit(1); // Inverse already in group - - data.WriteBit(invitedGuid[6]); - data.WriteBit(invitedGuid[5]); - - data.WriteBits(0, 9); // Realm name - - data.WriteBit(invitedGuid[4]); - - data.WriteBits(invitingPlayer->GetName().size(), 7); // Inviter name length - - data.WriteBits(0, 24); // Count 2 - - data.WriteBit(0); - - data.WriteBit(invitedGuid[1]); - data.WriteBit(invitedGuid[7]); - - data.FlushBits(); - - data.WriteByteSeq(invitedGuid[1]); - data.WriteByteSeq(invitedGuid[4]); - - data << int32(getMSTime()); - data << int32(0); - data << int32(0); - - data.WriteByteSeq(invitedGuid[6]); - data.WriteByteSeq(invitedGuid[0]); - data.WriteByteSeq(invitedGuid[2]); - data.WriteByteSeq(invitedGuid[3]); - - // for count2 { int32(0) } - - data.WriteByteSeq(invitedGuid[5]); - - // data.append(realm name); - - data.WriteByteSeq(invitedGuid[7]); - - data.WriteString(GetPlayer()->GetName()); - - data << int32(0); - - invitedPlayer->SendDirectMessage(&data); - - SendPartyResult(PARTY_OP_INVITE, memberName, ERR_PARTY_RESULT_OK); + SendPartyResult(PARTY_OP_INVITE, packet.TargetName, ERR_PARTY_RESULT_OK); } -void WorldSession::HandleGroupInviteResponseOpcode(WorldPacket& recvData) +void WorldSession::HandlePartyInviteResponseOpcode(WorldPackets::Party::PartyInviteResponse& packet) { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_GROUP_INVITE_RESPONSE"); - - recvData.ReadBit(); // unk always 0 - bool accept = recvData.ReadBit(); - - // Never actually received? - /*if (accept) - recvData.read_skip(); // unk*/ - Group* group = GetPlayer()->GetGroupInvite(); if (!group) return; - if (accept) + if (packet.Accept) { // Remove player from invitees in any case group->RemoveInvite(GetPlayer()); @@ -413,9 +263,8 @@ void WorldSession::HandleGroupInviteResponseOpcode(WorldPacket& recvData) return; // report - WorldPacket data(SMSG_GROUP_DECLINE, GetPlayer()->GetName().size()); - data << GetPlayer()->GetName(); - leader->SendDirectMessage(&data); + WorldPackets::Party::GroupDecline decline(GetPlayer()->GetName()); + leader->SendDirectMessage(decline.Write()); } } diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 39428f8660..2e93c8069b 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -19,10 +19,12 @@ #include "Group.h" #include "Pet.h" #include "Player.h" +#include "Realm.h" #include "PhasingHandler.h" #include "SpellAuras.h" #include "SpellAuraEffects.h" #include "Vehicle.h" +#include "World.h" void WorldPackets::Party::PartyMemberState::Initialize(Player const* player) { @@ -314,3 +316,126 @@ void WorldPackets::Party::SetEveryoneIsAssistant::Read() { EveryoneIsAssistant = _worldPacket.ReadBit(); } + +WorldPacket const* WorldPackets::Party::PartyCommandResult::Write() +{ + _worldPacket.resize(4 + Name.length() + 4 + 4 + 8); + + _worldPacket << uint32(Command); + _worldPacket << Name; + _worldPacket << uint32(Result); + _worldPacket << uint32(ResultData); + _worldPacket << ResultGUID; + + return &_worldPacket; +} + +void WorldPackets::Party::PartyInviteClient::Read() +{ + uint32 targetNameLen, targetRealmLen; + + _worldPacket >> TargetCfgRealmID; + _worldPacket >> ProposedRoles; + + TargetGUID[2] = _worldPacket.ReadBit(); + TargetGUID[7] = _worldPacket.ReadBit(); + + targetRealmLen = _worldPacket.ReadBits(9); + + TargetGUID[3] = _worldPacket.ReadBit(); + + targetNameLen = _worldPacket.ReadBits(10); + + TargetGUID[5] = _worldPacket.ReadBit(); + TargetGUID[4] = _worldPacket.ReadBit(); + TargetGUID[6] = _worldPacket.ReadBit(); + TargetGUID[0] = _worldPacket.ReadBit(); + TargetGUID[1] = _worldPacket.ReadBit(); + + _worldPacket.ReadByteSeq(TargetGUID[4]); + _worldPacket.ReadByteSeq(TargetGUID[7]); + _worldPacket.ReadByteSeq(TargetGUID[6]); + + TargetName = _worldPacket.ReadString(targetNameLen); + TargetRealm = _worldPacket.ReadString(targetRealmLen); + + _worldPacket.ReadByteSeq(TargetGUID[1]); + _worldPacket.ReadByteSeq(TargetGUID[0]); + _worldPacket.ReadByteSeq(TargetGUID[5]); + _worldPacket.ReadByteSeq(TargetGUID[3]); + _worldPacket.ReadByteSeq(TargetGUID[2]); +} + +void WorldPackets::Party::PartyInvite::Initialize(Player* const inviter, int32 proposedRoles, bool canAccept) +{ + CanAccept = canAccept; + InviterName = inviter->GetName(); + InviterGUID = inviter->GetGUID(); + InviterRealmName = realm.Name; + InviterCfgRealmID = realm.Id.Realm; + Timestamp = getMSTime(); + + ProposedRoles = proposedRoles; +} + +WorldPacket const* WorldPackets::Party::PartyInvite::Write() +{ + _worldPacket.WriteBit(MustBeBNetFriend); // This bit automatically declines party invites so it's probably bnet friends parental control stuff + _worldPacket.WriteBit(InviterGUID[0]); + _worldPacket.WriteBit(InviterGUID[3]); + _worldPacket.WriteBit(InviterGUID[2]); + _worldPacket.WriteBit(CanAccept); + _worldPacket.WriteBit(InviterGUID[6]); + _worldPacket.WriteBit(InviterGUID[5]); + _worldPacket.WriteBits(InviterRealmName.length(), 9); + _worldPacket.WriteBit(InviterGUID[4]); + _worldPacket.WriteBits(InviterName.length(), 7); + _worldPacket.WriteBits(LfgSlots.size(), 27); + _worldPacket.WriteBit(IsXRealm); // @todo: validate. Just seen it once in a firelands raid sniff. + _worldPacket.FlushBits(); + + _worldPacket.WriteByteSeq(InviterGUID[1]); + _worldPacket.WriteByteSeq(InviterGUID[4]); + + _worldPacket << uint32(Timestamp); + _worldPacket << uint32(ProposedRoles); + _worldPacket << uint32(LfgCompletedMask); + + _worldPacket.WriteByteSeq(InviterGUID[6]); + _worldPacket.WriteByteSeq(InviterGUID[0]); + _worldPacket.WriteByteSeq(InviterGUID[2]); + _worldPacket.WriteByteSeq(InviterGUID[3]); + + for (uint32 lfgSlot : LfgSlots) + _worldPacket << uint32(lfgSlot); + + _worldPacket.WriteByteSeq(InviterGUID[5]); + + _worldPacket.WriteString(InviterRealmName); + + _worldPacket.WriteByteSeq(InviterGUID[7]); + + _worldPacket.WriteString(InviterName); + _worldPacket << uint32(InviterCfgRealmID); + + return &_worldPacket; +} + +void WorldPackets::Party::PartyInviteResponse::Read() +{ + bool hasRolesDesired = _worldPacket.ReadBit(); + Accept = _worldPacket.ReadBit(); + + if (hasRolesDesired) + { + RolesDesired.emplace(); + _worldPacket >> *RolesDesired; + } +} + +WorldPacket const* WorldPackets::Party::GroupDecline::Write() +{ + _worldPacket << Name; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 620f0b2e5a..db1eba7e6d 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -101,6 +101,79 @@ namespace WorldPackets bool EveryoneIsAssistant = false; }; + + class PartyCommandResult final : public ServerPacket + { + public: + PartyCommandResult() : ServerPacket(SMSG_PARTY_COMMAND_RESULT, 4 + 1 + 4 + 4 + 8) { } + + WorldPacket const* Write() override; + + std::string Name; + uint8 Command = 0u; + uint8 Result = 0u; + uint32 ResultData = 0u; + ObjectGuid ResultGUID; + }; + + class PartyInviteClient final : public ClientPacket + { + public: + PartyInviteClient(WorldPacket&& packet) : ClientPacket(CMSG_PARTY_INVITE, std::move(packet)) { } + + void Read() override; + + uint8 PartyIndex = 0; + uint32 ProposedRoles = 0; + uint32 TargetCfgRealmID = 0; + std::string TargetName; + std::string TargetRealm; + ObjectGuid TargetGUID; + }; + + class PartyInvite final : public ServerPacket + { + public: + PartyInvite() : ServerPacket(SMSG_PARTY_INVITE, 43) { } + + WorldPacket const* Write() override; + + void Initialize(Player* const inviter, int32 proposedRoles, bool canAccept); + + bool IsXRealm = false; + bool MustBeBNetFriend = false; + bool CanAccept = false; + uint32 InviterCfgRealmID = 0; + uint32 LfgCompletedMask = 0; + uint32 ProposedRoles = 0; + uint32 Timestamp = 0; // not in WoD client magic but 4.x sniffs send timestamp data + std::string InviterRealmName; + std::string InviterName; + std::vector LfgSlots; + ObjectGuid InviterGUID; + }; + + class PartyInviteResponse final : public ClientPacket + { + public: + PartyInviteResponse(WorldPacket&& packet) : ClientPacket(CMSG_PARTY_INVITE_RESPONSE, std::move(packet)) { } + + void Read() override; + + uint8 PartyIndex = 0; + bool Accept = false; + Optional RolesDesired; + }; + + class GroupDecline final : public ServerPacket + { + public: + GroupDecline(std::string const& name) : ServerPacket(SMSG_GROUP_DECLINE, name.size()), Name(name) { } + + WorldPacket const* Write() override; + + std::string Name; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index ba1a9af765..31a1ed44bf 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -322,8 +322,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_GROUP_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupAssistantLeaderOpcode); DEFINE_HANDLER(CMSG_GROUP_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupChangeSubGroupOpcode ); DEFINE_HANDLER(CMSG_GROUP_DISBAND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupDisbandOpcode ); - DEFINE_HANDLER(CMSG_GROUP_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupInviteOpcode ); - DEFINE_HANDLER(CMSG_GROUP_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupInviteResponseOpcode ); + DEFINE_HANDLER(CMSG_PARTY_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyInviteOpcode ); + DEFINE_HANDLER(CMSG_PARTY_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyInviteResponseOpcode ); DEFINE_HANDLER(CMSG_GROUP_RAID_CONVERT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupRaidConvertOpcode ); DEFINE_HANDLER(CMSG_GROUP_REQUEST_JOIN_UPDATES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupRequestJoinUpdates ); DEFINE_HANDLER(CMSG_GROUP_SET_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupSetLeaderOpcode ); @@ -879,7 +879,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_CANCEL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_INVITE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_SET_LEADER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_SET_ROLE, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 2e496ac050..82e4d27e63 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -222,8 +222,8 @@ enum OpcodeClient : uint16 CMSG_GROUP_CANCEL = 0x0000, CMSG_GROUP_CHANGE_SUB_GROUP = 0x4124, CMSG_GROUP_DISBAND = 0x2804, - CMSG_GROUP_INVITE = 0x0513, - CMSG_GROUP_INVITE_RESPONSE = 0x0410, + CMSG_PARTY_INVITE = 0x0513, + CMSG_PARTY_INVITE_RESPONSE = 0x0410, CMSG_GROUP_RAID_CONVERT = 0x6E27, CMSG_GROUP_REQUEST_JOIN_UPDATES = 0x2583, CMSG_GROUP_SET_LEADER = 0x4C17, @@ -817,7 +817,7 @@ enum OpcodeServer SMSG_GROUP_CANCEL = 0x4D25, SMSG_GROUP_DECLINE = 0x6835, SMSG_GROUP_DESTROYED = 0x2207, - SMSG_GROUP_INVITE = 0x31B2, + SMSG_PARTY_INVITE = 0x31B2, SMSG_GROUP_LIST = 0x4C24, SMSG_GROUP_SET_LEADER = 0x0526, SMSG_GROUP_SET_ROLE = 0x39A6, diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 5c5f6c003e..17b93bd836 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1373,8 +1373,8 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co case CMSG_EQUIPMENT_SET_DELETE: // 0 1.5 case CMSG_DISMISS_CRITTER: // 0 1.5 case CMSG_REPOP_REQUEST: // 0 1.5 - case CMSG_GROUP_INVITE: // 0 1.5 - case CMSG_GROUP_INVITE_RESPONSE: // 0 1.5 + case CMSG_PARTY_INVITE: // 0 1.5 + case CMSG_PARTY_INVITE_RESPONSE: // 0 1.5 case CMSG_GROUP_UNINVITE_GUID: // 0 1.5 case CMSG_GROUP_DISBAND: // 0 1.5 case CMSG_BATTLEMASTER_JOIN_ARENA: // 0 1.5 diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 15a9c55d4d..5d1473e726 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -168,6 +168,8 @@ namespace WorldPackets namespace Party { class SetEveryoneIsAssistant; + class PartyInviteClient; + class PartyInviteResponse; } namespace Quest @@ -750,9 +752,9 @@ class TC_GAME_API WorldSession void HandleBattlefieldStatusOpcode(WorldPacket& recvData); void HandleBattleMasterHelloOpcode(WorldPacket& recvData); - void HandleGroupInviteOpcode(WorldPacket& recvPacket); + void HandlePartyInviteOpcode(WorldPackets::Party::PartyInviteClient& packet); //void HandleGroupCancelOpcode(WorldPacket& recvPacket); - void HandleGroupInviteResponseOpcode(WorldPacket& recvPacket); + void HandlePartyInviteResponseOpcode(WorldPackets::Party::PartyInviteResponse& packet); void HandleGroupClearMarker(WorldPacket& recvPacket); void HandleGroupUninviteOpcode(WorldPacket& recvPacket); void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);