aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-04-04 16:04:40 +0200
committerShauren <shauren.trinity@gmail.com>2015-04-04 16:04:40 +0200
commitb66d2da2c735569be8ab5208660beef6a4facd33 (patch)
treed3de1828d025ab82cc037fe75361aeccf3dced08 /src/server/game/Server
parente2abc9edf83af33797dcf41d1050aea518048b30 (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.cpp39
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h37
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
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);