diff --git a/Source/Game/Handlers/SpellHandler.cs b/Source/Game/Handlers/SpellHandler.cs index 984c7301e..f6b2d2a89 100644 --- a/Source/Game/Handlers/SpellHandler.cs +++ b/Source/Game/Handlers/SpellHandler.cs @@ -603,6 +603,26 @@ namespace Game } } + [WorldPacketHandler(ClientOpcodes.UpdateSpellVisual, Processing = PacketProcessing.Inplace)] + void HandleUpdateAuraVisual(UpdateAuraVisual updateAuraVisual) + { + Unit target = Global.ObjAccessor.GetUnit(_player, updateAuraVisual.TargetGUID); + if (target == null) + return; + + SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(updateAuraVisual.SpellID, _player.GetMap().GetDifficultyID()); + if (spellInfo == null) + return; + + uint spellXspellVisualId = _player.GetCastSpellXSpellVisualId(spellInfo); + foreach (var (_, auraApp) in target.GetAppliedAuras().Where(p => p.Key == spellInfo.Id)) + if (auraApp.GetBase().GetCasterGUID() == _player.GetGUID()) + auraApp.GetBase().SetSpellVisual(new SpellCastVisual() { SpellXSpellVisualID = spellXspellVisualId }); + + if (_player.GetChannelSpellId() == spellInfo.Id) + _player.SetChannelVisual(new SpellCastVisualField() { SpellXSpellVisualID = spellXspellVisualId }); + } + [WorldPacketHandler(ClientOpcodes.KeyboundOverride, Processing = PacketProcessing.ThreadSafe)] void HandleKeyboundOverride(KeyboundOverride keyboundOverride) { diff --git a/Source/Game/Networking/Packets/SpellPackets.cs b/Source/Game/Networking/Packets/SpellPackets.cs index 3ed819719..b50566268 100644 --- a/Source/Game/Networking/Packets/SpellPackets.cs +++ b/Source/Game/Networking/Packets/SpellPackets.cs @@ -1216,6 +1216,22 @@ namespace Game.Networking.Packets public MovementInfo Status; } + class UpdateAuraVisual : ClientPacket + { + public uint SpellID; + public SpellCastVisual Visual; + public ObjectGuid TargetGUID; + + public UpdateAuraVisual(WorldPacket packet) : base(packet) { } + + public override void Read() + { + SpellID = _worldPacket.ReadUInt32(); + Visual.Read(_worldPacket); + TargetGUID = _worldPacket.ReadPackedGuid(); + } + } + public class SpellDelayed : ServerPacket { public SpellDelayed() : base(ServerOpcodes.SpellDelayed, ConnectionType.Instance) { } diff --git a/Source/Game/Spells/Auras/Aura.cs b/Source/Game/Spells/Auras/Aura.cs index e95bc6174..dae50b7e3 100644 --- a/Source/Game/Spells/Auras/Aura.cs +++ b/Source/Game/Spells/Auras/Aura.cs @@ -426,6 +426,12 @@ namespace Game.Spells _DeleteRemovedApplications(); } + public void SetSpellVisual(SpellCastVisual spellVisual) + { + m_spellVisual = spellVisual; + SetNeedClientUpdateForTargets(); + } + public Unit GetCaster() { if (m_owner.GetGUID() == m_casterGuid)