From ba25093ef27aa72d295995a3cb1a1e94edb47c51 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 13 Jan 2009 01:15:41 +0300 Subject: [PATCH] Implement AURA_STATE_FROZEN Signed-off-by: DiSlord --- src/game/SharedDefines.h | 2 +- src/game/SpellAuras.cpp | 14 ++++++++++---- src/game/Unit.cpp | 6 +----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index faabc0e83..84b0899ce 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -686,7 +686,7 @@ enum AuraState AURA_STATE_DEFENSE = 1, // C | AURA_STATE_HEALTHLESS_20_PERCENT = 2, // CcT | AURA_STATE_BERSERKING = 3, // C T | - //AURA_STATE_UNKNOWN4 = 4, // c t| some limitation to charge spells (?) and target test spells + AURA_STATE_FROZEN = 4, // c t| frozen target AURA_STATE_JUDGEMENT = 5, // C | //AURA_STATE_UNKNOWN6 = 6, // | not used AURA_STATE_HUNTER_PARRY = 7, // C | diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index f74439b49..79358118c 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3560,13 +3560,18 @@ void Aura::HandleAuraModRoot(bool apply, bool Real) if(!Real) return; + // Frost root aura -> freeze/unfreeze target + if (GetSpellSchoolMask(m_spellProto) & SPELL_SCHOOL_MASK_FROST) + m_target->ModifyAuraState(AURA_STATE_FROZEN, apply); + uint32 apply_stat = UNIT_STAT_ROOT; if (apply) { m_target->addUnitState(UNIT_STAT_ROOT); m_target->SetUInt64Value (UNIT_FIELD_TARGET, 0); - // probably wrong - m_target->SetFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); +// probably wrong (this add skinable flag) +// TODO: find correct flag +// m_target->SetFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); //Save last orientation if( m_target->getVictim() ) @@ -3592,8 +3597,9 @@ void Aura::HandleAuraModRoot(bool apply, bool Real) return; m_target->clearUnitState(UNIT_STAT_ROOT); - // probably wrong - m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); +// probably wrong (this add skinable flag) +// TODO: find correct flag +// m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); if(!m_target->hasUnitState(UNIT_STAT_STUNNED)) // prevent allow move if have also stun effect { diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1ceb35bff..fcc496a55 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9881,11 +9881,7 @@ void CharmInfo::SetPetNumber(uint32 petnumber, bool statwindow) bool Unit::isFrozen() const { - AuraList const& mRoot = GetAurasByType(SPELL_AURA_MOD_ROOT); - for(AuraList::const_iterator i = mRoot.begin(); i != mRoot.end(); ++i) - if( GetSpellSchoolMask((*i)->GetSpellProto()) & SPELL_SCHOOL_MASK_FROST) - return true; - return false; + return HasAuraState(AURA_STATE_FROZEN); } struct ProcTriggeredData