Core/PacketIO: implement and enable SMSG_PLAY_SPELL_VISUAL

This commit is contained in:
Ovahlord committed 2021-03-12 21:56:15 +01:00
1 parent b3cc23a6d4
commit c1cb11c19f
5 files changed
+91 -1

No files matched your search

+22
View File
@@ -12310,6 +12310,28 @@ void Unit::SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
SendMessageToSet(packet.Write(), IsPlayer());
}
void Unit::SendPlaySpellVisual(uint32 spellVisualId, Unit const* target /*= nullptr*/, Optional<Position> targetPosition /*= {}*/, float travelSpeed /*= 0.f*/, uint16 missReason /*= 0*/, uint16 reflectStatus /*= 0*/, bool speedAsTime /*= false*/) const
{
if (!sSpellVisualStore.LookupEntry(spellVisualId))
return;
WorldPackets::Spells::PlaySpellVisual packet;
packet.SpellVisualID = spellVisualId;
packet.Source = GetGUID();
if (target)
packet.Target = target->GetGUID();
if (targetPosition)
packet.TargetPosition = *targetPosition;
packet.TravelSpeed = travelSpeed;
packet.MissReason = missReason;
packet.ReflectStatus = reflectStatus;
packet.SpeedAsTime = speedAsTime;
SendMessageToSet(packet.Write(), true);
}
void Unit::CancelSpellMissiles(uint32 spellId, bool reverseMissile /*= false*/)
{
bool hasMissile = false;
+1
View File
@@ -1113,6 +1113,7 @@ class TC_GAME_API Unit : public WorldObject
Aura* AddAura(SpellInfo const* spellInfo, uint8 effMask, Unit* target);
void SetAuraStack(uint32 spellId, Unit* target, uint32 stack);
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const;
void SendPlaySpellVisual(uint32 spellVisualId, Unit const* target = nullptr, Optional<Position> targetPosition = {}, float travelSpeed = 0.f, uint16 missReason = 0, uint16 reflectStatus = 0, bool speedAsTime = false) const;
void CancelSpellMissiles(uint32 spellId, bool reverseMissile = false);
void DeMorph();
@@ -317,6 +317,56 @@ WorldPacket const* WorldPackets::Spells::CategoryCooldown::Write()
return &_worldPacket;
}
WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write()
{
_worldPacket << float(TargetPosition.GetPositionZ());
_worldPacket << int32(SpellVisualID);
_worldPacket << uint16(MissReason);
_worldPacket << float(TargetPosition.GetOrientation());
_worldPacket << float(TargetPosition.GetPositionX());
_worldPacket << uint16(ReflectStatus);
_worldPacket << float(TargetPosition.GetPositionY());
_worldPacket.WriteBit(Target[1]);
_worldPacket.WriteBit(Source[3]);
_worldPacket.WriteBit(Source[0]);
_worldPacket.WriteBit(Target[2]);
_worldPacket.WriteBit(Target[5]);
_worldPacket.WriteBit(Source[2]);
_worldPacket.WriteBit(Source[4]);
_worldPacket.WriteBit(Target[6]);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.WriteBit(Source[6]);
_worldPacket.WriteBit(Target[7]);
_worldPacket.WriteBit(Source[5]);
_worldPacket.WriteBit(Source[1]);
_worldPacket.WriteBit(Source[7]);
_worldPacket.WriteBit(Target[3]);
_worldPacket.WriteBit(Target[4]);
_worldPacket.FlushBits();
_worldPacket.WriteByteSeq(Source[7]);
_worldPacket.WriteByteSeq(Source[4]);
_worldPacket.WriteByteSeq(Target[7]);
_worldPacket.WriteByteSeq(Source[1]);
_worldPacket.WriteByteSeq(Source[3]);
_worldPacket.WriteByteSeq(Source[0]);
_worldPacket.WriteByteSeq(Source[6]);
_worldPacket.WriteByteSeq(Target[0]);
_worldPacket.WriteByteSeq(Target[4]);
_worldPacket.WriteByteSeq(Source[5]);
_worldPacket.WriteByteSeq(Target[1]);
_worldPacket.WriteByteSeq(Target[5]);
_worldPacket.WriteByteSeq(Target[6]);
_worldPacket.WriteByteSeq(Target[2]);
_worldPacket.WriteByteSeq(Source[2]);
_worldPacket.WriteByteSeq(Target[3]);
return &_worldPacket;
}
WorldPacket const* WorldPackets::Spells::PlaySpellVisualKit::Write()
{
_worldPacket << uint32(Duration);
@@ -263,6 +263,23 @@ namespace WorldPackets
uint32 Duration = 0;
};
class PlaySpellVisual final : public ServerPacket
{
public:
PlaySpellVisual() : ServerPacket(SMSG_PLAY_SPELL_VISUAL, 33) { }
WorldPacket const* Write() override;
Position TargetPosition;
ObjectGuid Source;
ObjectGuid Target;
int32 SpellVisualID = 0;
float TravelSpeed = 0.0f;
uint16 MissReason = 0;
uint16 ReflectStatus = 0;
bool SpeedAsTime = false;
};
struct SpellHistoryEntry
{
SpellHistoryEntry() { }
+1 -1
View File
@@ -1123,7 +1123,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_OBJECT_SOUND, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_ONE_SHOT_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SOUND, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL_KIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_TIME_WARNING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PONG, STATUS_NEVER, CONNECTION_TYPE_REALM);