aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-10-05 23:15:58 +0200
committerShauren <shauren.trinity@gmail.com>2016-10-05 23:15:58 +0200
commita52c50e809d7c0ecb06a4eb81c73069d3c0e6746 (patch)
treec7106fa104f1e47b9c60fe2d9e10707659851a53
parent411394ed4f8d5c374b3d048e3ceb7bad81317d31 (diff)
Core/Auras: Add root aura handler to aura type 455
Closes #18030
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp11
-rw-r--r--src/server/game/Spells/SpellEffects.cpp1
-rw-r--r--src/server/game/Spells/SpellInfo.cpp1
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: