aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp26
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp31
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp32
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp81
4 files changed, 81 insertions, 89 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index d9cd8dc70e5..3675a9980a6 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5445,32 +5445,6 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
caster->SpellHitResult(target, GetSpellInfo(), false) != SPELL_MISS_NONE)
return;
- // some auras remove at specific health level or more
- if (GetAuraType() == SPELL_AURA_PERIODIC_DAMAGE)
- {
- switch (GetSpellInfo()->Id)
- {
- case 43093: case 31956: case 38801: // Grievous Wound
- case 35321: case 38363: case 39215: // Gushing Wound
- if (target->IsFullHealth())
- {
- target->RemoveAurasDueToSpell(GetSpellInfo()->Id);
- return;
- }
- break;
- case 38772: // Grievous Wound
- {
- uint32 percent = GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster);
- if (!target->HealthBelowPct(percent))
- {
- target->RemoveAurasDueToSpell(GetSpellInfo()->Id);
- return;
- }
- break;
- }
- }
- }
-
CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
// AOE spells are not affected by the new periodic system.
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
index bd73ab93c6d..583ae0ed2b6 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -233,36 +233,6 @@ class npc_geist_ambusher : public CreatureScript
}
};
-class spell_trash_npc_glacial_strike : public SpellScriptLoader
-{
- public:
- spell_trash_npc_glacial_strike() : SpellScriptLoader("spell_trash_npc_glacial_strike") { }
-
- class spell_trash_npc_glacial_strike_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_trash_npc_glacial_strike_AuraScript);
-
- void PeriodicTick(AuraEffect const* /*aurEff*/)
- {
- if (GetTarget()->IsFullHealth())
- {
- GetTarget()->RemoveAura(GetId(), ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL);
- PreventDefaultAction();
- }
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_trash_npc_glacial_strike_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_trash_npc_glacial_strike_AuraScript();
- }
-};
-
class npc_pit_of_saron_icicle : public CreatureScript
{
public:
@@ -390,7 +360,6 @@ void AddSC_pit_of_saron()
new npc_iceborn_protodrake();
new npc_geist_ambusher();
new npc_pit_of_saron_icicle();
- new spell_trash_npc_glacial_strike();
new spell_pos_ice_shards();
new at_pit_cavern_entrance();
new at_pit_cavern_end();
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index a18572992e9..8dfe782bea0 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -2108,37 +2108,6 @@ class spell_thorim_activate_lightning_orb_periodic : public SpellScriptLoader
}
};
-// 62331, 62418 - Impale
-class spell_iron_ring_guard_impale : public SpellScriptLoader
-{
- public:
- spell_iron_ring_guard_impale() : SpellScriptLoader("spell_iron_ring_guard_impale") { }
-
- class spell_iron_ring_guard_impale_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_iron_ring_guard_impale_AuraScript);
-
- void PeriodicTick(AuraEffect const* /*aurEff*/)
- {
- if (GetTarget()->HealthAbovePct(GetSpellInfo()->Effects[EFFECT_1].CalcValue()))
- {
- Remove(AURA_REMOVE_BY_ENEMY_SPELL);
- PreventDefaultAction();
- }
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_iron_ring_guard_impale_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_iron_ring_guard_impale_AuraScript();
- }
-};
-
class achievement_dont_stand_in_the_lightning : public AchievementCriteriaScript
{
public:
@@ -2213,7 +2182,6 @@ void AddSC_boss_thorim()
new spell_thorim_arena_leap();
new spell_thorim_runic_smash();
new spell_thorim_activate_lightning_orb_periodic();
- new spell_iron_ring_guard_impale();
new achievement_dont_stand_in_the_lightning();
new achievement_lose_your_illusion();
new achievement_i_ll_take_you_all_on();
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 05fbc6b3423..bc3ce8a88a7 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2454,6 +2454,84 @@ class spell_gen_remove_flight_auras : public SpellScript
}
};
+// 38772 Grievous Wound
+// 43937 Grievous Wound
+// 62331 Impale
+// 62418 Impale
+class spell_gen_remove_on_health_pct : public AuraScript
+{
+ PrepareAuraScript(spell_gen_remove_on_health_pct);
+
+ void PeriodicTick(AuraEffect const* /*aurEff*/)
+ {
+ // they apply damage so no need to check for ticks here
+
+ if (GetTarget()->HealthAbovePct(GetSpellInfo()->Effects[EFFECT_1].CalcValue()))
+ {
+ Remove(AURA_REMOVE_BY_ENEMY_SPELL);
+ PreventDefaultAction();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_remove_on_health_pct::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
+ }
+};
+
+// 31956 Grievous Wound
+// 38801 Grievous Wound
+// 43093 Grievous Throw
+// 58517 Grievous Wound
+// 59262 Grievous Wound
+class spell_gen_remove_on_full_health : public AuraScript
+{
+ PrepareAuraScript(spell_gen_remove_on_full_health);
+
+ void PeriodicTick(AuraEffect const* aurEff)
+ {
+ // if it has only periodic effect, allow 1 tick
+ bool onlyEffect = !GetSpellInfo()->Effects[EFFECT_1].IsEffect() && !GetSpellInfo()->Effects[EFFECT_2].IsEffect();
+ if (onlyEffect && aurEff->GetTickNumber() <= 1)
+ return;
+
+ if (GetTarget()->IsFullHealth())
+ {
+ Remove(AURA_REMOVE_BY_ENEMY_SPELL);
+ PreventDefaultAction();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_remove_on_full_health::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
+ }
+};
+
+// 70292 - Glacial Strike
+// 71316 - Glacial Strike
+// 71317 - Glacial Strike
+class spell_gen_remove_on_full_health_pct : public AuraScript
+{
+ PrepareAuraScript(spell_gen_remove_on_full_health_pct);
+
+ void PeriodicTick(AuraEffect const* /*aurEff*/)
+ {
+ // they apply damage so no need to check for ticks here
+
+ if (GetTarget()->IsFullHealth())
+ {
+ Remove(AURA_REMOVE_BY_ENEMY_SPELL);
+ PreventDefaultAction();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_remove_on_full_health_pct::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
+ }
+};
+
enum Replenishment
{
SPELL_REPLENISHMENT = 57669,
@@ -3648,6 +3726,9 @@ void AddSC_generic_spell_scripts()
RegisterSpellScript(spell_gen_profession_research);
RegisterSpellScript(spell_gen_remove_flight_auras);
RegisterSpellAndAuraScriptPair(spell_gen_replenishment, spell_gen_replenishment_aura);
+ RegisterAuraScript(spell_gen_remove_on_health_pct);
+ RegisterAuraScript(spell_gen_remove_on_full_health);
+ RegisterAuraScript(spell_gen_remove_on_full_health_pct);
RegisterSpellScript(spell_gen_seaforium_blast);
RegisterSpellScript(spell_gen_spectator_cheer_trigger);
RegisterSpellScript(spell_gen_spirit_healer_res);