Core/Packets: converted CMSG_SET_ROLE and SMSG_ROLE_CHANGED_INFORM to packet class

This commit is contained in:
Ovahlord committed 2023-10-30 22:30:14 +01:00
1 parent 2283572243
commit 056248cef1
6 files changed
+111 -74

No files matched your search

+14 -69
View File
@@ -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;
};
}
}
+2 -2
View File
@@ -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);
+2 -2
View File
@@ -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,
+2 -1
View File
@@ -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);