*Check range for channeled spells during their duration.
--HG-- branch : trunk
This commit is contained in:
+5
-2
@@ -2108,7 +2108,7 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
|
||||
}
|
||||
}
|
||||
|
||||
void Spell::cancel(bool report)
|
||||
void Spell::cancel()
|
||||
{
|
||||
if(m_spellState == SPELL_STATE_FINISHED)
|
||||
return;
|
||||
@@ -2138,7 +2138,7 @@ void Spell::cancel(bool report)
|
||||
m_caster->RemoveAurasDueToCasterSpell(m_spellInfo->Id, m_caster->GetGUID());
|
||||
SendChannelUpdate(0);
|
||||
SendInterrupted(0);
|
||||
SendCastResult(report ? SPELL_FAILED_INTERRUPTED : SPELL_FAILED_DONT_REPORT);
|
||||
SendCastResult(SPELL_FAILED_INTERRUPTED);
|
||||
} break;
|
||||
|
||||
default:
|
||||
@@ -5248,6 +5248,9 @@ bool SpellEvent::Execute(uint64 e_time, uint32 p_time)
|
||||
// another non-melee non-delayed spell is casted now, abort
|
||||
m_Spell->cancel();
|
||||
}
|
||||
// Check if target of channeled spell still in range
|
||||
else if (m_Spell->CheckRange(false))
|
||||
m_Spell->cancel();
|
||||
else
|
||||
{
|
||||
// do the action (pass spell to channeling state)
|
||||
|
||||
+1
-1
@@ -324,7 +324,7 @@ class Spell
|
||||
~Spell();
|
||||
|
||||
void prepare(SpellCastTargets * targets, Aura* triggeredByAura = NULL);
|
||||
void cancel(bool report = true);
|
||||
void cancel();
|
||||
void update(uint32 difftime);
|
||||
void cast(bool skipCheck = false);
|
||||
void finish(bool ok = true);
|
||||
|
||||
+1
-10
@@ -4692,8 +4692,7 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode)
|
||||
&& AurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]!= SPELL_AURA_DUMMY)
|
||||
//don't stop channeling of scripted spells (this is actually a hack)
|
||||
{
|
||||
caster->m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel(false);
|
||||
channeled = true;
|
||||
caster->m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4733,14 +4732,6 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode)
|
||||
|
||||
delete Aur;
|
||||
|
||||
if(channeled)
|
||||
{
|
||||
//if target is not caster remove auras also on caster
|
||||
if (caster!=this)
|
||||
caster->RemoveAurasAtChanneledTarget (AurSpellInfo, caster);
|
||||
RemoveAurasAtChanneledTarget (AurSpellInfo, caster);
|
||||
}
|
||||
|
||||
if(statue)
|
||||
statue->UnSummon();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user