diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-04-04 16:04:40 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-04-04 16:04:40 +0200 |
| commit | b66d2da2c735569be8ab5208660beef6a4facd33 (patch) | |
| tree | d3de1828d025ab82cc037fe75361aeccf3dced08 /src/server/game/Server | |
| parent | e2abc9edf83af33797dcf41d1050aea518048b30 (diff) | |
Core/PacketIO: Updated and enabled SMSG_SPELL_CHANNEL_START and SMSG_SPELL_CHANNEL_UPDATE
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.cpp | 39 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 37 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 |
3 files changed, 78 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index 4dfbd67f44f..389b18ab9e7 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -632,3 +632,42 @@ void WorldPackets::Spells::OpenItem::Read() _worldPacket >> Slot >> PackSlot; } + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellChannelStartInterruptImmunities const& interruptImmunities) +{ + data << int32(interruptImmunities.SchoolImmunities); + data << int32(interruptImmunities.Immunities); + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellTargetedHealPrediction const& targetedHealPrediction) +{ + data << targetedHealPrediction.TargetGUID; + data << targetedHealPrediction.Predict; + return data; +} + +WorldPacket const* WorldPackets::Spells::SpellChannelStart::Write() +{ + _worldPacket << CasterGUID; + _worldPacket << int32(SpellID); + _worldPacket << uint32(ChannelDuration); + _worldPacket.WriteBit(InterruptImmunities.HasValue); + _worldPacket.WriteBit(HealPrediction.HasValue); + _worldPacket.FlushBits(); + + if (InterruptImmunities.HasValue) + _worldPacket << InterruptImmunities.Value; + + if (HealPrediction.HasValue) + _worldPacket << HealPrediction.Value; + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Spells::SpellChannelUpdate::Write() +{ + _worldPacket << CasterGUID; + _worldPacket << int32(TimeRemaining); + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index bb7253c22dc..d5731ad1578 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -599,6 +599,43 @@ namespace WorldPackets uint8 Slot = 0; uint8 PackSlot = 0; }; + + struct SpellChannelStartInterruptImmunities + { + int32 SchoolImmunities = 0; + int32 Immunities = 0; + }; + + struct SpellTargetedHealPrediction + { + ObjectGuid TargetGUID; + SpellHealPrediction Predict; + }; + + class SpellChannelStart final : public ServerPacket + { + public: + SpellChannelStart() : ServerPacket(SMSG_SPELL_CHANNEL_START, 4 + 16 + 4) { } + + WorldPacket const* Write() override; + + int32 SpellID = 0; + Optional<SpellChannelStartInterruptImmunities> InterruptImmunities; + ObjectGuid CasterGUID; + Optional<SpellTargetedHealPrediction> HealPrediction; + uint32 ChannelDuration = 0; + }; + + class SpellChannelUpdate final : public ServerPacket + { + public: + SpellChannelUpdate() : ServerPacket(SMSG_SPELL_CHANNEL_UPDATE, 16 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid CasterGUID; + int32 TimeRemaining = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index b950525a672..6fa04bf2dde 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1624,8 +1624,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SOCKET_GEMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SOR_START_EXPERIENCE_INCOMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPECIAL_MOUNT_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_CHANNEL_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_CHANNEL_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_CHANNEL_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_CHANNEL_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DAMAGE_SHIELD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DELAYED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |
