aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index fc2ba84bec9..66ca7a70e47 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -124,6 +124,8 @@ enum PriestSpells
SPELL_PRIEST_MASOCHISM_TALENT = 193063,
SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL = 193065,
SPELL_PRIEST_MASTERY_GRACE = 271534,
+ SPELL_PRIEST_MIND_DEVOURER = 373202,
+ SPELL_PRIEST_MIND_DEVOURER_AURA = 373204,
SPELL_PRIEST_MINDBENDER_DISC = 123040,
SPELL_PRIEST_MINDBENDER_SHADOW = 200174,
SPELL_PRIEST_MINDGAMES = 375901,
@@ -1704,6 +1706,94 @@ class spell_pri_mind_bomb : public AuraScript
}
};
+// 373202 - Mind Devourer
+// Triggered by 8092 - Mind Blast
+class spell_pri_mind_devourer : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_MIND_DEVOURER_AURA })
+ && ValidateSpellEffect({ { SPELL_PRIEST_MIND_DEVOURER, EFFECT_0 } });
+ }
+
+ bool Load() override
+ {
+ return GetCaster()->HasAura(SPELL_PRIEST_MIND_DEVOURER);
+ }
+
+ void HandleEffectHitTarget(SpellEffIndex /*effIndex*/) const
+ {
+ AuraEffect const* aurEff = GetCaster()->GetAuraEffect(SPELL_PRIEST_MIND_DEVOURER, EFFECT_0);
+ if (aurEff && roll_chance_i(aurEff->GetAmount()))
+ GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_MIND_DEVOURER_AURA, GetSpell());
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_pri_mind_devourer::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
+// 373204 - Mind Devourer (Aura)
+// Attached to 335467 - Devouring Plague
+class spell_pri_mind_devourer_buff_aura : public AuraScript
+{
+ void CalculateDamage(AuraEffect const* /*aurEff*/, Unit* /*victim*/, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const
+ {
+ AddPct(pctMod, DamageIncrease);
+ }
+
+ void Register() override
+ {
+ DoEffectCalcDamageAndHealing += AuraEffectCalcDamageFn(spell_pri_mind_devourer_buff_aura::CalculateDamage, EFFECT_1, SPELL_AURA_PERIODIC_LEECH);
+ }
+
+public:
+ float DamageIncrease = 0.0f;
+};
+
+class spell_pri_mind_devourer_buff : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellEffect({ { SPELL_PRIEST_MIND_DEVOURER_AURA, EFFECT_1 } });
+ }
+
+ void OnPrecast() override
+ {
+ AuraEffect const* mindDevourer = GetCaster()->GetAuraEffect(SPELL_PRIEST_MIND_DEVOURER_AURA, EFFECT_1);
+ if (!mindDevourer || !GetSpell()->m_appliedMods.contains(mindDevourer->GetBase()))
+ return;
+
+ _damageIncrease = mindDevourer->GetAmount();
+ }
+
+ void CalculateDamage(Unit* /*victim*/, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const
+ {
+ AddPct(pctMod, _damageIncrease);
+ }
+
+ void ModifyAuraValueAndRemoveBuff(SpellEffIndex /*effIndex*/) const
+ {
+ if (!_damageIncrease)
+ return;
+
+ if (Aura* devouringPlague = GetHitAura())
+ if (spell_pri_mind_devourer_buff_aura* script = devouringPlague->GetScript<spell_pri_mind_devourer_buff_aura>())
+ script->DamageIncrease = _damageIncrease;
+
+ GetCaster()->RemoveAurasDueToSpell(SPELL_PRIEST_MIND_DEVOURER_AURA);
+ }
+
+ void Register() override
+ {
+ CalcDamage += SpellCalcDamageFn(spell_pri_mind_devourer_buff::CalculateDamage);
+ OnEffectHitTarget += SpellEffectFn(spell_pri_mind_devourer_buff::ModifyAuraValueAndRemoveBuff, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
+ }
+
+ float _damageIncrease = 0.0f;
+};
+
// 390686 - Painful Punishment
class spell_pri_painful_punishment : public AuraScript
{
@@ -3337,6 +3427,8 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_levitate);
RegisterSpellScript(spell_pri_lights_wrath);
RegisterSpellScript(spell_pri_mind_bomb);
+ RegisterSpellScript(spell_pri_mind_devourer);
+ RegisterSpellAndAuraScriptPair(spell_pri_mind_devourer_buff, spell_pri_mind_devourer_buff_aura);
RegisterSpellScript(spell_pri_painful_punishment);
RegisterSpellScript(spell_pri_pain_transformation);
RegisterSpellScriptWithArgs(spell_pri_penance, "spell_pri_penance", SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE, SPELL_PRIEST_PENANCE_CHANNEL_HEALING);