[8257] Avoid remove daze and croud control spells except polymorph at druid form change.

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
Astellar 2009-07-27 16:37:31 +04:00 committed by VladimirMangos
parent c547a27dad
commit 793ce2259a
3 changed files with 28 additions and 2 deletions

View file

@ -951,6 +951,12 @@ enum Mechanics
(1<<MECHANIC_SHACKLE )|(1<<MECHANIC_TURN )|(1<<MECHANIC_HORROR)| \ (1<<MECHANIC_SHACKLE )|(1<<MECHANIC_TURN )|(1<<MECHANIC_HORROR)| \
(1<<MECHANIC_DAZE )|(1<<MECHANIC_SAPPED ) ) (1<<MECHANIC_DAZE )|(1<<MECHANIC_SAPPED ) )
// Daze and all croud control spells except polymorph are not removed
#define MECHANIC_NOT_REMOVED_BY_SHAPESHIFT ( \
(1<<MECHANIC_CHARM )|(1<<MECHANIC_DISORIENTED)|(1<<MECHANIC_FEAR )|(1<<MECHANIC_PACIFY )| \
(1<<MECHANIC_STUN )|(1<<MECHANIC_FREEZE )|(1<<MECHANIC_BANISH)|(1<<MECHANIC_SHACKLE)| \
(1<<MECHANIC_HORROR)|(1<<MECHANIC_TURN )|(1<<MECHANIC_DAZE )|(1<<MECHANIC_SAPPED ) )
// Spell dispell type // Spell dispell type
enum DispelType enum DispelType
{ {

View file

@ -2709,14 +2709,34 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
case FORM_FLIGHT_EPIC: case FORM_FLIGHT_EPIC:
case FORM_FLIGHT: case FORM_FLIGHT:
case FORM_MOONKIN: case FORM_MOONKIN:
{
// remove movement affects // remove movement affects
m_target->RemoveSpellsCausingAura(SPELL_AURA_MOD_ROOT); m_target->RemoveSpellsCausingAura(SPELL_AURA_MOD_ROOT);
m_target->RemoveSpellsCausingAura(SPELL_AURA_MOD_DECREASE_SPEED); Unit::AuraList const& slowingAuras = m_target->GetAurasByType(SPELL_AURA_MOD_DECREASE_SPEED);
for (Unit::AuraList::const_iterator iter = slowingAuras.begin(); iter != slowingAuras.end();)
{
SpellEntry const* aurSpellInfo = (*iter)->GetSpellProto();
// If spell that caused this aura has Croud Control or Daze effect
if((GetAllSpellMechanicMask(aurSpellInfo) & MECHANIC_NOT_REMOVED_BY_SHAPESHIFT) ||
// some Daze spells have these parameters instead of MECHANIC_DAZE
(aurSpellInfo->SpellIconID == 15 && aurSpellInfo->Dispel == 0))
{
++iter;
continue;
}
// All OK, remove aura now
m_target->RemoveAurasDueToSpellByCancel(aurSpellInfo->Id);
iter = slowingAuras.begin();
}
// and polymorphic affects // and polymorphic affects
if(m_target->IsPolymorphed()) if(m_target->IsPolymorphed())
m_target->RemoveAurasDueToSpell(m_target->getTransForm()); m_target->RemoveAurasDueToSpell(m_target->getTransForm());
break; break;
}
default: default:
break; break;
} }

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8256" #define REVISION_NR "8257"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__