diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 92 |
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); |
