Core/Packets: converted CMSG_SET_ROLE and SMSG_ROLE_CHANGED_INFORM to packet class
This commit is contained in:
1 parent
2283572243
commit
056248cef1
6 files changed
+111
-74
No files matched your search
@@ -392,82 +392,27 @@ void WorldSession::HandleGroupSetLeaderOpcode(WorldPacket& recvData)
|
||||
group->SendUpdate();
|
||||
}
|
||||
|
||||
void WorldSession::HandleGroupSetRolesOpcode(WorldPacket& recvData)
|
||||
void WorldSession::HandleSetRoleOpcode(WorldPackets::Party::SetRole& packet)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: Received CMSG_GROUP_SET_ROLES");
|
||||
WorldPackets::Party::RoleChangedInform roleChangedInform;
|
||||
|
||||
uint32 newRole;
|
||||
ObjectGuid guid1; // Assigner GUID
|
||||
ObjectGuid guid2; // Target GUID
|
||||
Group* group = GetPlayer()->GetGroup();
|
||||
uint8 oldRole = group ? group->GetLfgRoles(packet.ChangedUnit) : 0;
|
||||
if (oldRole == packet.Role)
|
||||
return;
|
||||
|
||||
guid1 = GetPlayer()->GetGUID();
|
||||
roleChangedInform.From = GetPlayer()->GetGUID();
|
||||
roleChangedInform.ChangedUnit = packet.ChangedUnit;
|
||||
roleChangedInform.OldRole = oldRole;
|
||||
roleChangedInform.NewRole = packet.Role;
|
||||
|
||||
recvData >> newRole;
|
||||
|
||||
guid2[2] = recvData.ReadBit();
|
||||
guid2[6] = recvData.ReadBit();
|
||||
guid2[3] = recvData.ReadBit();
|
||||
guid2[7] = recvData.ReadBit();
|
||||
guid2[5] = recvData.ReadBit();
|
||||
guid2[1] = recvData.ReadBit();
|
||||
guid2[0] = recvData.ReadBit();
|
||||
guid2[4] = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(guid2[6]);
|
||||
recvData.ReadByteSeq(guid2[4]);
|
||||
recvData.ReadByteSeq(guid2[1]);
|
||||
recvData.ReadByteSeq(guid2[3]);
|
||||
recvData.ReadByteSeq(guid2[0]);
|
||||
recvData.ReadByteSeq(guid2[5]);
|
||||
recvData.ReadByteSeq(guid2[2]);
|
||||
recvData.ReadByteSeq(guid2[7]);
|
||||
|
||||
WorldPacket data(SMSG_GROUP_SET_ROLE, 24);
|
||||
|
||||
data.WriteBit(guid1[1]);
|
||||
data.WriteBit(guid2[0]);
|
||||
data.WriteBit(guid2[2]);
|
||||
data.WriteBit(guid2[4]);
|
||||
data.WriteBit(guid2[7]);
|
||||
data.WriteBit(guid2[3]);
|
||||
data.WriteBit(guid1[7]);
|
||||
data.WriteBit(guid2[5]);
|
||||
data.WriteBit(guid1[5]);
|
||||
data.WriteBit(guid1[4]);
|
||||
data.WriteBit(guid1[3]);
|
||||
data.WriteBit(guid2[6]);
|
||||
data.WriteBit(guid1[2]);
|
||||
data.WriteBit(guid1[6]);
|
||||
data.WriteBit(guid2[1]);
|
||||
data.WriteBit(guid1[0]);
|
||||
|
||||
data.WriteByteSeq(guid1[7]);
|
||||
data.WriteByteSeq(guid2[3]);
|
||||
data.WriteByteSeq(guid1[6]);
|
||||
data.WriteByteSeq(guid2[4]);
|
||||
data.WriteByteSeq(guid2[0]);
|
||||
data << uint32(newRole); // New Role
|
||||
data.WriteByteSeq(guid2[6]);
|
||||
data.WriteByteSeq(guid2[2]);
|
||||
data.WriteByteSeq(guid1[0]);
|
||||
data.WriteByteSeq(guid1[4]);
|
||||
data.WriteByteSeq(guid2[1]);
|
||||
data.WriteByteSeq(guid1[3]);
|
||||
data.WriteByteSeq(guid1[5]);
|
||||
data.WriteByteSeq(guid1[2]);
|
||||
data.WriteByteSeq(guid2[5]);
|
||||
data.WriteByteSeq(guid2[7]);
|
||||
data.WriteByteSeq(guid1[1]);
|
||||
data << uint32(0); // Old Role
|
||||
|
||||
if (Group* group = GetPlayer()->GetGroup())
|
||||
if (group)
|
||||
{
|
||||
/// @todo probably should be sent only if (oldRole != newRole)
|
||||
group->BroadcastPacket(&data, false);
|
||||
group->SetLfgRoles(guid2, newRole);
|
||||
group->BroadcastPacket(roleChangedInform.Write(), false);
|
||||
group->SetLfgRoles(packet.ChangedUnit, packet.Role);
|
||||
}
|
||||
else
|
||||
SendPacket(&data);
|
||||
SendPacket(roleChangedInform.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGroupDisbandOpcode(WorldPacket& /*recvData*/)
|
||||
|
||||
@@ -549,3 +549,70 @@ WorldPacket const* WorldPackets::Party::SummonRaidMemberValidateFailed::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SetRole::Read()
|
||||
{
|
||||
_worldPacket >> Role;
|
||||
|
||||
ChangedUnit[2] = _worldPacket.ReadBit();
|
||||
ChangedUnit[6] = _worldPacket.ReadBit();
|
||||
ChangedUnit[3] = _worldPacket.ReadBit();
|
||||
ChangedUnit[7] = _worldPacket.ReadBit();
|
||||
ChangedUnit[5] = _worldPacket.ReadBit();
|
||||
ChangedUnit[1] = _worldPacket.ReadBit();
|
||||
ChangedUnit[0] = _worldPacket.ReadBit();
|
||||
ChangedUnit[4] = _worldPacket.ReadBit();
|
||||
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[6]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[4]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[1]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[3]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[0]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[5]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[3]);
|
||||
_worldPacket.ReadByteSeq(ChangedUnit[7]);
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::RoleChangedInform::Write()
|
||||
{
|
||||
_worldPacket.WriteBit(From[1]);
|
||||
_worldPacket.WriteBit(ChangedUnit[0]);
|
||||
_worldPacket.WriteBit(ChangedUnit[2]);
|
||||
_worldPacket.WriteBit(ChangedUnit[4]);
|
||||
_worldPacket.WriteBit(ChangedUnit[7]);
|
||||
_worldPacket.WriteBit(ChangedUnit[3]);
|
||||
_worldPacket.WriteBit(From[7]);
|
||||
_worldPacket.WriteBit(ChangedUnit[5]);
|
||||
_worldPacket.WriteBit(From[5]);
|
||||
_worldPacket.WriteBit(From[4]);
|
||||
_worldPacket.WriteBit(From[3]);
|
||||
_worldPacket.WriteBit(ChangedUnit[6]);
|
||||
_worldPacket.WriteBit(From[2]);
|
||||
_worldPacket.WriteBit(From[6]);
|
||||
_worldPacket.WriteBit(ChangedUnit[1]);
|
||||
_worldPacket.WriteBit(From[0]);
|
||||
|
||||
_worldPacket.WriteByteSeq(From[7]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[3]);
|
||||
_worldPacket.WriteByteSeq(From[6]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[4]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[0]);
|
||||
|
||||
_worldPacket << uint32(NewRole);
|
||||
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[6]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[2]);
|
||||
_worldPacket.WriteByteSeq(From[0]);
|
||||
_worldPacket.WriteByteSeq(From[4]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[1]);
|
||||
_worldPacket.WriteByteSeq(From[3]);
|
||||
_worldPacket.WriteByteSeq(From[5]);
|
||||
_worldPacket.WriteByteSeq(From[2]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[6]);
|
||||
_worldPacket.WriteByteSeq(ChangedUnit[7]);
|
||||
_worldPacket.WriteByteSeq(From[1]);
|
||||
|
||||
_worldPacket << uint32(OldRole);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
@@ -245,6 +245,30 @@ namespace WorldPackets
|
||||
|
||||
std::vector<SummonRaidMemberValidateReason> Members;
|
||||
};
|
||||
|
||||
class SetRole final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SetRole(WorldPacket&& packet) : ClientPacket(CMSG_SET_ROLE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid ChangedUnit;
|
||||
uint32 Role = 0;
|
||||
};
|
||||
|
||||
class RoleChangedInform final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
RoleChangedInform() : ServerPacket(SMSG_GROUP_DECLINE, 8 + 8 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid ChangedUnit;
|
||||
ObjectGuid From;
|
||||
uint32 NewRole = 0;
|
||||
uint32 OldRole = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -327,7 +327,6 @@ void OpcodeTable::Initialize()
|
||||
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 );
|
||||
DEFINE_HANDLER(CMSG_GROUP_SET_ROLES, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGroupSetRolesOpcode );
|
||||
DEFINE_HANDLER(CMSG_GROUP_SWAP_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupSwapSubGroupOpcode );
|
||||
DEFINE_HANDLER(CMSG_GROUP_UNINVITE_GUID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupUninviteGuidOpcode );
|
||||
DEFINE_HANDLER(CMSG_GUILD_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptOpcode );
|
||||
@@ -582,6 +581,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_SET_PREFERED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_SET_PRIMARY_TALENT_TREE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_SET_RELATIVE_POSITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_SET_ROLE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetRoleOpcode );
|
||||
DEFINE_HANDLER(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSavedInstanceExtend );
|
||||
DEFINE_HANDLER(CMSG_SET_SELECTION, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetSelectionOpcode );
|
||||
DEFINE_HANDLER(CMSG_SET_TAXI_BENCHMARK_MODE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTaxiBenchmarkOpcode );
|
||||
@@ -881,7 +881,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, 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);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_UNINVITE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
@@ -1183,6 +1182,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_REQUEST, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESYNC_RUNES, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHANGED_INFORM, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_POLL_BEGIN, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RWHOIS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SELL_ITEM, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -227,7 +227,6 @@ enum OpcodeClient : uint16
|
||||
CMSG_GROUP_RAID_CONVERT = 0x6E27,
|
||||
CMSG_GROUP_REQUEST_JOIN_UPDATES = 0x2583,
|
||||
CMSG_GROUP_SET_LEADER = 0x4C17,
|
||||
CMSG_GROUP_SET_ROLES = 0x25B1,
|
||||
CMSG_GROUP_SWAP_SUB_GROUP = 0x0034,
|
||||
CMSG_GROUP_UNINVITE = 0x0000,
|
||||
CMSG_GROUP_UNINVITE_GUID = 0x2E07,
|
||||
@@ -506,6 +505,7 @@ enum OpcodeClient : uint16
|
||||
CMSG_SET_PREFERED_CEMETERY = 0x311E,
|
||||
CMSG_SET_PRIMARY_TALENT_TREE = 0x4524,
|
||||
CMSG_SET_RELATIVE_POSITION = 0x311A,
|
||||
CMSG_SET_ROLE = 0x25B1,
|
||||
CMSG_SET_SAVED_INSTANCE_EXTEND = 0x6706,
|
||||
CMSG_SET_SELECTION = 0x0506,
|
||||
CMSG_SET_SKILL_CHEAT = 0x0000,
|
||||
@@ -819,7 +819,6 @@ enum OpcodeServer
|
||||
SMSG_PARTY_INVITE = 0x31B2,
|
||||
SMSG_PARTY_UPDATE = 0x4C24,
|
||||
SMSG_GROUP_SET_LEADER = 0x0526,
|
||||
SMSG_GROUP_SET_ROLE = 0x39A6,
|
||||
SMSG_GROUP_UNINVITE = 0x0A07,
|
||||
SMSG_GUILD_ACHIEVEMENT_DATA = 0x54B7,
|
||||
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x35A0,
|
||||
@@ -1141,6 +1140,7 @@ enum OpcodeServer
|
||||
SMSG_RESURRECT_FAILED = 0x6705,
|
||||
SMSG_RESURRECT_REQUEST = 0x2905,
|
||||
SMSG_RESYNC_RUNES = 0x6224,
|
||||
SMSG_ROLE_CHANGED_INFORM = 0x39A6,
|
||||
SMSG_ROLE_POLL_BEGIN = 0x70B0,
|
||||
SMSG_RWHOIS = 0x2437,
|
||||
SMSG_SELL_ITEM = 0x6105,
|
||||
|
||||
@@ -196,6 +196,7 @@ namespace WorldPackets
|
||||
class SetEveryoneIsAssistant;
|
||||
class PartyInviteClient;
|
||||
class PartyInviteResponse;
|
||||
class SetRole;
|
||||
}
|
||||
|
||||
namespace Quest
|
||||
@@ -818,7 +819,7 @@ class TC_GAME_API WorldSession
|
||||
void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupSetRolesOpcode(WorldPacket& recvData);
|
||||
void HandleSetRoleOpcode(WorldPackets::Party::SetRole& packet);
|
||||
void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
|
||||
void HandleOptOutOfLootOpcode(WorldPacket& recvData);
|
||||
void HandleLootMethodOpcode(WorldPacket& recvPacket);
|
||||
|
||||
Reference in new issue
Block a user