diff options
-rw-r--r-- | src/server/game/Handlers/GroupHandler.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Server/Packets/PartyPackets.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Server/Packets/PartyPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
5 files changed, 28 insertions, 14 deletions
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 49a10b61ed5..297cd9c3124 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -524,10 +524,8 @@ void WorldSession::HandleSetAssistantLeaderOpcode(WorldPackets::Party::SetAssist group->SetGroupMemberFlag(packet.Target, packet.Apply, MEMBER_FLAG_ASSISTANT); } -void WorldSession::HandlePartyAssignmentOpcode(WorldPacket& recvData) +void WorldSession::HandleSetPartyAssignment(WorldPackets::Party::SetPartyAssignment& packet) { - TC_LOG_DEBUG("network", "WORLD: Received MSG_PARTY_ASSIGNMENT"); - Group* group = GetPlayer()->GetGroup(); if (!group) return; @@ -536,21 +534,15 @@ void WorldSession::HandlePartyAssignmentOpcode(WorldPacket& recvData) if (!group->IsLeader(senderGuid) && !group->IsAssistant(senderGuid)) return; - uint8 assignment; - bool apply; - ObjectGuid guid; - recvData >> assignment >> apply; - recvData >> guid; - - switch (assignment) + switch (packet.Assignment) { case GROUP_ASSIGN_MAINASSIST: group->RemoveUniqueGroupMemberFlag(MEMBER_FLAG_MAINASSIST); - group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_MAINASSIST); + group->SetGroupMemberFlag(packet.Target, packet.Set, MEMBER_FLAG_MAINASSIST); break; case GROUP_ASSIGN_MAINTANK: group->RemoveUniqueGroupMemberFlag(MEMBER_FLAG_MAINTANK); // Remove main assist flag from current if any. - group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_MAINTANK); + group->SetGroupMemberFlag(packet.Target, packet.Set, MEMBER_FLAG_MAINTANK); default: break; } diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 01a2da40c7b..2d5a85d4fd0 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -163,6 +163,15 @@ void WorldPackets::Party::SetPartyLeader::Read() _worldPacket >> TargetGUID; } +void WorldPackets::Party::SetPartyAssignment::Read() +{ + _worldPacket >> PartyIndex; + _worldPacket >> Assignment; + _worldPacket >> Target; + Set = _worldPacket.ReadBit(); +} + + void WorldPackets::Party::SetRole::Read() { _worldPacket >> PartyIndex; diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 85742d09f7e..1c31ba25879 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -362,6 +362,18 @@ namespace WorldPackets bool Apply = false; }; + class SetPartyAssignment final : public ClientPacket + { + public: + SetPartyAssignment(WorldPacket&& packet) : ClientPacket(CMSG_SET_PARTY_ASSIGNMENT, std::move(packet)) { } + + void Read() override; + uint8 Assignment = 0; + uint8 PartyIndex = 0; + ObjectGuid Target; + bool Set = false; + }; + class DoReadyCheck final : public ClientPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 1cc7e63a25c..5a25ee63a70 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -691,7 +691,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_LFG_BONUS_FACTION_ID, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_LOOT_METHOD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::SetLootMethod, &WorldSession::HandleSetLootMethodOpcode); DEFINE_HANDLER(CMSG_SET_LOOT_SPECIALIZATION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::SetLootSpecialization, &WorldSession::HandleSetLootSpecialization); - DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PARTY_ASSIGNMENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyAssignmentOpcode ); + DEFINE_HANDLER(CMSG_SET_PARTY_ASSIGNMENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::SetPartyAssignment, &WorldSession::HandleSetPartyAssignment); DEFINE_HANDLER(CMSG_SET_PARTY_LEADER, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SetPartyLeader, &WorldSession::HandleSetPartyLeaderOpcode); DEFINE_HANDLER(CMSG_SET_PET_SLOT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PLAYER_DECLINED_NAMES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPlayerDeclinedNames ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 869c2b7304f..7d6d2f310db 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -450,6 +450,7 @@ namespace WorldPackets class RequestPartyMemberStats; class PartyMemberStats; class SetPartyLeader; + class SetPartyAssignment; class SetRole; class RoleChangedInform; class SetLootMethod; @@ -1227,7 +1228,7 @@ class WorldSession void HandleChangeSubGroupOpcode(WorldPackets::Party::ChangeSubGroup& packet); void HandleSwapSubGroupsOpcode(WorldPackets::Party::SwapSubGroups& packet); void HandleSetAssistantLeaderOpcode(WorldPackets::Party::SetAssistantLeader& packet); - void HandlePartyAssignmentOpcode(WorldPacket& recvData); + void HandleSetPartyAssignment(WorldPackets::Party::SetPartyAssignment& packet); void HandleInitiateRolePoll(WorldPackets::Party::InitiateRolePoll& packet); void HandleSetEveryoneIsAssistant(WorldPackets::Party::SetEveryoneIsAssistant& packet); void HandleClearRaidMarker(WorldPackets::Party::ClearRaidMarker& packet); |