diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-10-05 23:15:58 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-10-05 23:15:58 +0200 |
commit | a52c50e809d7c0ecb06a4eb81c73069d3c0e6746 (patch) | |
tree | c7106fa104f1e47b9c60fe2d9e10707659851a53 /src | |
parent | 411394ed4f8d5c374b3d048e3ceb7bad81317d31 (diff) |
Core/Auras: Add root aura handler to aura type 455
Closes #18030
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 1 |
7 files changed, 20 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0781d026597..73b48b2370a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23096,7 +23096,7 @@ void Player::SendInitialPacketsAfterAddToMap() SetRooted(true); // manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied. - if (HasAuraType(SPELL_AURA_MOD_ROOT)) + if (HasAuraType(SPELL_AURA_MOD_ROOT) || HasAuraType(SPELL_AURA_MOD_ROOT_2)) SetRooted(true, true); SendAurasForTarget(this); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a17505c2b32..9def0f173a5 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -596,6 +596,7 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons || HasBreakableByDamageAuraType(SPELL_AURA_MOD_FEAR, excludeAura) || HasBreakableByDamageAuraType(SPELL_AURA_MOD_STUN, excludeAura) || HasBreakableByDamageAuraType(SPELL_AURA_MOD_ROOT, excludeAura) + || HasBreakableByDamageAuraType(SPELL_AURA_MOD_ROOT_2, excludeAura) || HasBreakableByDamageAuraType(SPELL_AURA_TRANSFORM, excludeAura)); } @@ -11624,6 +11625,7 @@ bool InitTriggerAuraData() isTriggerAura[SPELL_AURA_MOD_SPELL_DAMAGE_FROM_CASTER] = true; isTriggerAura[SPELL_AURA_MOD_SPELL_CRIT_CHANCE] = true; isTriggerAura[SPELL_AURA_ABILITY_IGNORE_AURASTATE] = true; + isTriggerAura[SPELL_AURA_MOD_ROOT_2] = true; isNonTriggerAura[SPELL_AURA_MOD_POWER_REGEN] = true; isNonTriggerAura[SPELL_AURA_REDUCE_PUSHBACK] = true; @@ -11636,6 +11638,7 @@ bool InitTriggerAuraData() isAlwaysTriggeredAura[SPELL_AURA_SPELL_MAGNET] = true; isAlwaysTriggeredAura[SPELL_AURA_SCHOOL_ABSORB] = true; isAlwaysTriggeredAura[SPELL_AURA_MOD_STEALTH] = true; + isAlwaysTriggeredAura[SPELL_AURA_MOD_ROOT_2] = true; return true; } @@ -12006,6 +12009,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u case SPELL_AURA_MOD_STUN: case SPELL_AURA_MOD_ROOT: case SPELL_AURA_TRANSFORM: + case SPELL_AURA_MOD_ROOT_2: { // chargeable mods are breaking on hit if (useCharges) @@ -13342,7 +13346,7 @@ void Unit::SetControlled(bool apply, UnitState state) SetStunned(false); break; case UNIT_STATE_ROOT: - if (HasAuraType(SPELL_AURA_MOD_ROOT) || GetVehicle()) + if (HasAuraType(SPELL_AURA_MOD_ROOT) || HasAuraType(SPELL_AURA_MOD_ROOT_2) || GetVehicle()) return; if (!HasUnitState(UNIT_STATE_STUNNED)) @@ -13371,7 +13375,7 @@ void Unit::SetControlled(bool apply, UnitState state) SetStunned(true); else { - if (HasAuraType(SPELL_AURA_MOD_ROOT)) + if (HasAuraType(SPELL_AURA_MOD_ROOT) || HasAuraType(SPELL_AURA_MOD_ROOT_2)) SetRooted(true); if (HasAuraType(SPELL_AURA_MOD_CONFUSE)) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 41b8f767b2c..030149d1f54 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1618,7 +1618,6 @@ class TC_GAME_API Unit : public WorldObject bool HasStealthAura() const { return HasAuraType(SPELL_AURA_MOD_STEALTH); } bool HasInvisibilityAura() const { return HasAuraType(SPELL_AURA_MOD_INVISIBILITY); } bool isFeared() const { return HasAuraType(SPELL_AURA_MOD_FEAR); } - bool isInRoots() const { return HasAuraType(SPELL_AURA_MOD_ROOT); } bool IsPolymorphed() const; bool isFrozen() const; diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 0627847b463..9b064574fe2 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -512,7 +512,7 @@ enum AuraType SPELL_AURA_452 = 452, SPELL_AURA_CHARGE_RECOVERY_MOD = 453, SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER = 454, - SPELL_AURA_455 = 455, + SPELL_AURA_MOD_ROOT_2 = 455, SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE = 456, SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE_REGEN = 457, SPELL_AURA_IGNORE_DUAL_WIELD_HIT_PENALTY = 458, // NYI diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 96e2a18a4cc..32071512556 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -514,7 +514,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //452 &AuraEffect::HandleNoImmediateEffect, //453 SPELL_AURA_CHARGE_RECOVERY_MOD implemented in SpellHistory::GetChargeRecoveryTime &AuraEffect::HandleNoImmediateEffect, //454 SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER implemented in SpellHistory::GetChargeRecoveryTime - &AuraEffect::HandleNULL, //455 + &AuraEffect::HandleAuraModRoot, //455 SPELL_AURA_MOD_ROOT_2 &AuraEffect::HandleNoImmediateEffect, //456 SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE implemented in SpellHistory::GetChargeRecoveryTime &AuraEffect::HandleNoImmediateEffect, //457 SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE_REGEN implemented in SpellHistory::GetChargeRecoveryTime &AuraEffect::HandleNULL, //458 SPELL_AURA_IGNORE_DUAL_WIELD_HIT_PENALTY @@ -653,6 +653,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster) case SPELL_AURA_MOD_STUN: case SPELL_AURA_MOD_ROOT: case SPELL_AURA_TRANSFORM: + case SPELL_AURA_MOD_ROOT_2: m_canBeRecalculated = false; if (!m_spellInfo->ProcFlags) break; @@ -3216,6 +3217,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT); aura_immunity_list.push_back(SPELL_AURA_MOD_CONFUSE); aura_immunity_list.push_back(SPELL_AURA_MOD_FEAR); + aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT_2); } break; } @@ -3247,6 +3249,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT); aura_immunity_list.push_back(SPELL_AURA_MOD_CONFUSE); aura_immunity_list.push_back(SPELL_AURA_MOD_FEAR); + aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT_2); } break; } @@ -3284,6 +3287,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT); aura_immunity_list.push_back(SPELL_AURA_MOD_CONFUSE); aura_immunity_list.push_back(SPELL_AURA_MOD_FEAR); + aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT_2); } break; } @@ -3327,6 +3331,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT); aura_immunity_list.push_back(SPELL_AURA_MOD_CONFUSE); aura_immunity_list.push_back(SPELL_AURA_MOD_FEAR); + aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT_2); } break; } @@ -3361,6 +3366,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT); aura_immunity_list.push_back(SPELL_AURA_MOD_CONFUSE); aura_immunity_list.push_back(SPELL_AURA_MOD_FEAR); + aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT_2); } break; } @@ -3395,7 +3401,10 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 if (miscVal & (1<<6)) aura_immunity_list.push_back(SPELL_AURA_MOD_DECREASE_SPEED); if (miscVal & (1<<0)) + { aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT); + aura_immunity_list.push_back(SPELL_AURA_MOD_ROOT_2); + } if (miscVal & (1<<2)) aura_immunity_list.push_back(SPELL_AURA_MOD_CONFUSE); if (miscVal & (1<<9)) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 227b26531ae..ade6aa815e6 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3721,6 +3721,7 @@ void Spell::EffectSanctuary(SpellEffIndex /*effIndex*/) && (m_spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG0_ROGUE_VANISH)) { m_caster->ToPlayer()->RemoveAurasByType(SPELL_AURA_MOD_ROOT); + m_caster->ToPlayer()->RemoveAurasByType(SPELL_AURA_MOD_ROOT_2); // Overkill if (m_caster->ToPlayer()->HasSpell(58426)) m_caster->CastSpell(m_caster, 58427, true); diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 64f089cf56a..3707aedf45f 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3191,6 +3191,7 @@ bool SpellInfo::_IsPositiveEffect(uint32 effIndex, bool deep) const return true; return false; case SPELL_AURA_MOD_ROOT: + case SPELL_AURA_MOD_ROOT_2: case SPELL_AURA_MOD_SILENCE: case SPELL_AURA_GHOST: case SPELL_AURA_PERIODIC_LEECH: |