Core/Packets: converted SMSG_PARTY_COMMAND_RESULT, CMSG_PARTY_INVITE, SMSG_PARTY_INVITE, CMSG_PARTY_INVITE_RESPONSE and SMSG_GROUP_DECLINE to packet class
This commit is contained in:
1 parent
d8894e06e1
commit
3b68b5413a
7 files changed
+241
-192
No files matched your search
@@ -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<uint32>(); // Non-zero in cross realm invites
|
||||
recvData.read_skip<uint32>(); // 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<uint32>(); // 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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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<uint32> 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<uint32> 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;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user