Patch is not outdated, for correct interrupt spells by charm, fear and stun we still need to use that patch; for silence case - all ok.
Here update for last revisions
Index: src/game/SpellAuras.cpp
===================================================================
--- src/game/SpellAuras.cpp (revision 4917)
+++ src/game/SpellAuras.cpp (working copy)
@@ -1850,7 +1850,7 @@
{
m_target->SetCharmerGUID(GetCasterGUID());
m_target->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE,caster->getFaction());
-
+ m_target->Cancelcast();
caster->SetCharm(m_target);
if(caster->getVictim()==m_target)
@@ -1960,6 +1960,7 @@
if( apply )
{
m_target->addUnitState(UNIT_STAT_CONFUSED);
+ m_target->Cancelcast();
m_target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
if(m_target->GetTypeId() == TYPEID_PLAYER)
@@ -2027,6 +2028,7 @@
if( Apply )
{
m_target->addUnitState(UNIT_STAT_FLEEING);
+ m_target->Cancelcast();
m_target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING);
// only at real add aura
@@ -2162,6 +2164,7 @@
m_target->SetUInt64Value (UNIT_FIELD_TARGET, 0);
m_target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_ROTATE);
+ m_target->Cancelcast();
if (caster)
{
Index: src/game/Unit.cpp
===================================================================
--- src/game/Unit.cpp (revision 4917)
+++ src/game/Unit.cpp (working copy)
@@ -943,6 +943,13 @@
DEBUG_LOG("DealDamageEnd");
}
+void Unit::Cancelcast()
+{
+ for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
+ if (m_currentSpells[i])
+ InterruptSpell(i);
+}
+
void Unit::CastSpell(Unit* Victim, uint32 spellId, bool triggered, Item *castItem, Aura* triggredByAura, uint64 originalCaster)
{
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId );
Index: src/game/Unit.h
===================================================================
--- src/game/Unit.h (revision 4917)
+++ src/game/Unit.h (working copy)
@@ -755,6 +755,7 @@
return NULL;
}
bool Attack(Unit *victim, bool playerMeleeAttack = false);
+ void Cancelcast();
bool AttackStop();
void RemoveAllAttackers();
AttackerSet const& getAttackers() const { return m_attackers; }