Core/Spells: prevent creatures to focus channeled spells without SPELL_ATTR1_CHANNEL_TRACK_TARGET
Port From (https://github.com/TrinityCore/TrinityCore/commit/d91e099b10a33d9205c023c81bcc966d713c39ab)
This commit is contained in:
@@ -1411,6 +1411,7 @@ namespace Framework.Constants
|
|||||||
DemonHunter = 107
|
DemonHunter = 107
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
public enum TriggerCastFlags : uint
|
public enum TriggerCastFlags : uint
|
||||||
{
|
{
|
||||||
None = 0x0, //! Not Triggered
|
None = 0x0, //! Not Triggered
|
||||||
|
|||||||
@@ -2882,6 +2882,10 @@ namespace Game.Entities
|
|||||||
if (_focusSpell != null)
|
if (_focusSpell != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// some spells shouldn't track targets
|
||||||
|
if (focusSpell.IsFocusDisabled())
|
||||||
|
return;
|
||||||
|
|
||||||
SpellInfo spellInfo = focusSpell.GetSpellInfo();
|
SpellInfo spellInfo = focusSpell.GetSpellInfo();
|
||||||
|
|
||||||
// don't use spell focus for vehicle spells
|
// don't use spell focus for vehicle spells
|
||||||
|
|||||||
@@ -2543,7 +2543,7 @@ namespace Game.Spells
|
|||||||
// focus if not controlled creature
|
// focus if not controlled creature
|
||||||
if (m_caster.GetTypeId() == TypeId.Unit && !m_caster.HasUnitFlag(UnitFlags.PlayerControlled))
|
if (m_caster.GetTypeId() == TypeId.Unit && !m_caster.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||||
{
|
{
|
||||||
if (!(m_spellInfo.IsNextMeleeSwingSpell() || IsAutoRepeat() || _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnoreSetFacing)))
|
if (!(m_spellInfo.IsNextMeleeSwingSpell() || IsAutoRepeat()))
|
||||||
{
|
{
|
||||||
if (m_targets.GetObjectTarget() && m_caster != m_targets.GetObjectTarget())
|
if (m_targets.GetObjectTarget() && m_caster != m_targets.GetObjectTarget())
|
||||||
m_caster.ToCreature().FocusTarget(this, m_targets.GetObjectTarget());
|
m_caster.ToCreature().FocusTarget(this, m_targets.GetObjectTarget());
|
||||||
@@ -7398,6 +7398,7 @@ namespace Game.Spells
|
|||||||
public bool IsTriggered() { return _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.FullMask); }
|
public bool IsTriggered() { return _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.FullMask); }
|
||||||
public bool IsTriggeredByAura(SpellInfo auraSpellInfo) { return (auraSpellInfo == m_triggeredByAuraSpell); }
|
public bool IsTriggeredByAura(SpellInfo auraSpellInfo) { return (auraSpellInfo == m_triggeredByAuraSpell); }
|
||||||
public bool IsIgnoringCooldowns() { return _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnoreSpellAndCategoryCD); }
|
public bool IsIgnoringCooldowns() { return _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.IgnoreSpellAndCategoryCD); }
|
||||||
|
public bool IsFocusDisabled() { return _triggeredCastFlags.HasFlag(TriggerCastFlags.IgnoreSetFacing) || (m_spellInfo.IsChanneled() && !m_spellInfo.HasAttribute(SpellAttr1.ChannelTrackTarget)); }
|
||||||
public bool IsProcDisabled() { return _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.DisallowProcEvents); }
|
public bool IsProcDisabled() { return _triggeredCastFlags.HasAnyFlag(TriggerCastFlags.DisallowProcEvents); }
|
||||||
public bool IsChannelActive() { return m_caster.GetChannelSpellId() != 0; }
|
public bool IsChannelActive() { return m_caster.GetChannelSpellId() != 0; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user