diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 21 | ||||
-rw-r--r-- | src/server/game/Server/Packets/PartyPackets.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Server/Packets/PartyPackets.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
4 files changed, 31 insertions, 11 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9a69f3b35ff..34e914bc714 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -67,6 +67,8 @@ #include "CombatPackets.h" #include "CombatLogPackets.h" #include "VehiclePackets.h" +#include "LootPackets.h" +#include "PartyPackets.h" #include <cmath> @@ -13453,9 +13455,9 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) // call kill spell proc event (before real die and combat stop to triggering auras removed at death/combat stop) if (isRewardAllowed && player && player != victim) { - WorldPacket data(SMSG_PARTY_KILL_LOG, (8+8)); // send event PARTY_KILL - data << player->GetGUID(); // player with killing blow - data << victim->GetGUID(); // victim + WorldPackets::Party::PartyKillLog partyKillLog; + partyKillLog.Player = player->GetGUID(); + partyKillLog.Victim = victim->GetGUID(); Player* looter = player; Group* group = player->GetGroup(); @@ -13463,7 +13465,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) if (group) { - group->BroadcastPacket(&data, group->GetMemberGroup(player->GetGUID()) != 0); + group->BroadcastPacket(partyKillLog.Write(), group->GetMemberGroup(player->GetGUID()) != 0); if (creature) { @@ -13481,15 +13483,14 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) } else { - player->SendDirectMessage(&data); + player->SendDirectMessage(partyKillLog.Write()); if (creature) { - WorldPacket data2(SMSG_LOOT_LIST, 8 + 1 + 1); - data2 << creature->GetGUID(); - data2 << uint8(0); // unk1 - data2 << uint8(0); // no group looter - player->SendMessageToSet(&data2, true); + WorldPackets::Loot::LootList lootList; + lootList.Owner = creature->GetGUID(); + + player->SendMessageToSet(lootList.Write(), true); } } diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 1ca4d8095d0..332aa959a1e 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -541,6 +541,14 @@ void WorldPackets::Party::PartyMemberStats::Initialize(Player const* player) } } +WorldPacket const* WorldPackets::Party::PartyKillLog::Write() +{ + _worldPacket << Player; + _worldPacket << Victim; + + return &_worldPacket; +} + ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPhase const& phase) { data << phase.Flags; diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 34e8097f985..cb0e4aac440 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -594,6 +594,17 @@ namespace WorldPackets std::vector<RaidMarker*> RaidMarkers; }; + + class PartyKillLog final : public ServerPacket + { + public: + PartyKillLog() : ServerPacket(SMSG_PARTY_KILL_LOG, 2 * 16) { } + + WorldPacket const* Write() override; + + ObjectGuid Player; + ObjectGuid Victim; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 6eda0a0a009..25b5e661ebe 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1430,7 +1430,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAGE_TEXT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_KILL_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_KILL_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAUSE_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); |