diff options
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GameObjectPackets.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GameObjectPackets.h | 14 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
4 files changed, 33 insertions, 9 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index f58fcb8a69d..e39a8c96741 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1985,14 +1985,13 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u // dealing damage, send packet if (player) { - WorldPacket data(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 8 + 8 + 8 + 4 + 4); - data << GetPackGUID(); - data << attackerOrHealer->GetPackGUID(); - data << player->GetPackGUID(); - data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event - // change >= 0 triggers SPELL_BUILDING_DAMAGE event - data << uint32(spellId); - player->SendDirectMessage(&data); + WorldPackets::GameObject::DestructibleBuildingDamage packet; + packet.Caster = attackerOrHealer->GetGUID(); // todo: this can be a GameObject + packet.Target = GetGUID(); + packet.Damage = -change; + packet.Owner = player->GetGUID(); + packet.SpellID = spellId; + player->SendDirectMessage(packet.Write()); } GameObjectDestructibleState newState = GetDestructibleState(); diff --git a/src/server/game/Server/Packets/GameObjectPackets.cpp b/src/server/game/Server/Packets/GameObjectPackets.cpp index 6c182af8a97..1b8aa3df32b 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.cpp +++ b/src/server/game/Server/Packets/GameObjectPackets.cpp @@ -48,3 +48,14 @@ WorldPacket const* WorldPackets::GameObject::GameObjectActivateAnimKit::Write() return &_worldPacket; } + +WorldPacket const * WorldPackets::GameObject::DestructibleBuildingDamage::Write() +{ + _worldPacket << Target; + _worldPacket << Owner; + _worldPacket << Caster; + _worldPacket << int32(Damage); + _worldPacket << int32(SpellID); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/GameObjectPackets.h b/src/server/game/Server/Packets/GameObjectPackets.h index 31aa13f94bc..65eb2c7bed8 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.h +++ b/src/server/game/Server/Packets/GameObjectPackets.h @@ -78,6 +78,20 @@ namespace WorldPackets int32 AnimKitID = 0; bool Maintain = false; }; + + class DestructibleBuildingDamage final : public ServerPacket + { + public: + DestructibleBuildingDamage() : ServerPacket(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 16 + 16 + 16 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid Target; + ObjectGuid Caster; + ObjectGuid Owner; + int32 Damage = 0; + int32 SpellID = 0; + }; } } #endif // GOPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 1234e7dfcf4..e127b0e1d71 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1018,7 +1018,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_DEFENSE_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DELETE_CHAR, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTROY_ARENA_UNIT, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DIFFERENT_INSTANCE_FROM_PARTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISENCHANT_CREDIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISMOUNT, STATUS_NEVER, CONNECTION_TYPE_REALM); |