aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp7
-rw-r--r--src/server/game/Spells/Spell.cpp12
2 files changed, 11 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index f0fb4fd7efc..91763b7e685 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -3093,14 +3093,15 @@ void Unit::InterruptSpell(CurrentSpellTypes spellType, bool withDelayed, bool wi
if (GetTypeId() == TYPEID_PLAYER)
ToPlayer()->SendAutoRepeatCancel(this);
+ m_currentSpells[spellType] = nullptr;
+
if (spell->getState() != SPELL_STATE_FINISHED)
spell->cancel();
+ else
+ spell->SetReferencedFromCurrent(false);
if (GetTypeId() == TYPEID_UNIT && IsAIEnabled)
ToCreature()->AI()->OnSpellCastInterrupt(spell->GetSpellInfo());
-
- m_currentSpells[spellType] = nullptr;
- spell->SetReferencedFromCurrent(false);
}
}
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 83720573430..97cd6f64d20 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3372,13 +3372,15 @@ void Spell::_cast(bool skipCheck)
CallScriptAfterCastHandlers();
- if (const std::vector<int32> *spell_triggered = sSpellMgr->GetSpellLinked(m_spellInfo->Id))
+ if (std::vector<int32> const* spell_triggered = sSpellMgr->GetSpellLinked(m_spellInfo->Id))
{
- for (std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i)
- if (*i < 0)
- m_caster->RemoveAurasDueToSpell(-(*i));
+ for (int32 id : *spell_triggered)
+ {
+ if (id < 0)
+ m_caster->RemoveAurasDueToSpell(-id);
else
- m_caster->CastSpell(m_targets.GetUnitTarget() ? m_targets.GetUnitTarget() : m_caster, *i, true);
+ m_caster->CastSpell(m_targets.GetUnitTarget() ? m_targets.GetUnitTarget() : m_caster, id, true);
+ }
}
if (modOwner)