From 041cbec7de90c4a2f627af95e6842328dfe646fe Mon Sep 17 00:00:00 2001 From: megamage Date: Fri, 12 Dec 2008 15:11:25 -0600 Subject: *Do not let spell (stun/confuse/fear) interrupt itself (cause crash). --HG-- branch : trunk --- src/game/Spell.h | 1 + src/game/Unit.cpp | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'src') diff --git a/src/game/Spell.h b/src/game/Spell.h index 3d9494f8a36..509d65ad87e 100644 --- a/src/game/Spell.h +++ b/src/game/Spell.h @@ -405,6 +405,7 @@ class Spell bool IsDeletable() const { return !m_referencedFromCurrentSpell && !m_executedCurrently; } void SetReferencedFromCurrent(bool yes) { m_referencedFromCurrentSpell = yes; } + bool IsInterruptable() const { return !m_executedCurrently; } void SetExecutedCurrently(bool yes) { m_executedCurrently = yes; } uint64 GetDelayStart() const { return m_delayStart; } void SetDelayStart(uint64 m_time) { m_delayStart = m_time; } diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index f7e02f1469c..c8cf1239587 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -3777,6 +3777,10 @@ void Unit::InterruptSpell(uint32 spellType, bool withDelayed) if(m_currentSpells[spellType] && (withDelayed || m_currentSpells[spellType]->getState() != SPELL_STATE_DELAYED) ) { + // for example, do not let self-stun aura interrupt itself + if(!m_currentSpells[spellType]->IsInterruptable()) + return; + // send autorepeat cancel message for autorepeat spells if (spellType == CURRENT_AUTOREPEAT_SPELL) { -- cgit v1.2.3