*Fix the bug that some instant cast spells do not remove auras with cast interrupte flag.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-02-02 16:04:17 -06:00
parent 49a9e26498
commit 5d943336c5
+11 -5
View File
@@ -2083,8 +2083,7 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
// set timer base at cast time // set timer base at cast time
ReSetTimer(); ReSetTimer();
//item: first cast may destroy item and second cast causes crash if(m_IsTriggeredSpell)
if(m_IsTriggeredSpell || !m_casttime && !m_spellInfo->StartRecoveryTime && !m_castItemGUID && GetCurrentContainer() == CURRENT_GENERIC_SPELL)
cast(true); cast(true);
else else
{ {
@@ -2093,9 +2092,16 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
if(isSpellBreakStealth(m_spellInfo) ) if(isSpellBreakStealth(m_spellInfo) )
m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CAST); m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CAST);
m_caster->SetCurrentCastedSpell( this ); if(!m_casttime && !m_spellInfo->StartRecoveryTime
m_selfContainer = &(m_caster->m_currentSpells[GetCurrentContainer()]); && !m_castItemGUID //item: first cast may destroy item and second cast causes crash
SendSpellStart(); && GetCurrentContainer() == CURRENT_GENERIC_SPELL)
cast(true);
else
{
m_caster->SetCurrentCastedSpell( this );
m_selfContainer = &(m_caster->m_currentSpells[GetCurrentContainer()]);
SendSpellStart();
}
} }
} }