aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/Spell.h1
-rw-r--r--src/game/Unit.cpp4
2 files changed, 5 insertions, 0 deletions
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)
{