diff options
| author | Cristian Vintila <127750549+cristianvnt@users.noreply.github.com> | 2026-01-03 22:39:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-03 21:39:06 +0100 |
| commit | 1eaf7c65953dedfe30b532cc648db53e61513b13 (patch) | |
| tree | e9ac8d430e0d3db18a44dc137ba536572f1b7ddf /src/server | |
| parent | a1f1c2a8d4a12838589f470b05721ddc97b0842e (diff) | |
Scripts/Spells: Implement priest talent Harsh Discipline (#31468)
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index a9278e95a3f..187716758c3 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -63,6 +63,7 @@ enum PriestSpells SPELL_PRIEST_BODY_AND_SOUL = 64129, SPELL_PRIEST_BODY_AND_SOUL_SPEED = 65081, SPELL_PRIEST_BURNING_VEHEMENCE_DAMAGE = 400370, + SPELL_PRIEST_CASTIGATION = 193134, SPELL_PRIEST_CENSURE = 200199, SPELL_PRIEST_CIRCLE_OF_HEALING = 204883, SPELL_PRIEST_CRYSTALLINE_REFLECTION = 373457, @@ -117,6 +118,8 @@ enum PriestSpells SPELL_PRIEST_HALO_HOLY_HEAL = 120692, SPELL_PRIEST_HALO_SHADOW_DAMAGE = 390964, SPELL_PRIEST_HALO_SHADOW_HEAL = 390971, + SPELL_PRIEST_HARSH_DISCIPLINE = 373180, + SPELL_PRIEST_HARSH_DISCIPLINE_AURA = 373183, SPELL_PRIEST_HEAL = 2060, SPELL_PRIEST_HEALING_LIGHT = 196809, SPELL_PRIEST_HEAVENS_WRATH = 421558, @@ -1784,6 +1787,56 @@ class spell_pri_guardian_spirit : public AuraScript } }; +// 373180 - Harsh Discipline +// Triggered by 194509 - Power Word: Radiance +class spell_pri_harsh_discipline : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_HARSH_DISCIPLINE_AURA }) + && ValidateSpellEffect({ { SPELL_PRIEST_HARSH_DISCIPLINE, EFFECT_1 }, { SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE, EFFECT_1 } }); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_PRIEST_HARSH_DISCIPLINE); + } + + void HandleEffectHit(SpellEffIndex /*effIndex*/) const + { + Unit* caster = GetCaster(); + SpellInfo const* penanceChannel = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE, GetCastDifficulty()); + int32 additionalBolts = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_HARSH_DISCIPLINE, GetCastDifficulty())->GetEffect(EFFECT_1).CalcValue(caster); + + // do the calc here + float channelDuration = penanceChannel->GetDuration(); + float channelPeriod = penanceChannel->GetEffect(EFFECT_1).ApplyAuraPeriod; + + float baseBolts = channelDuration / channelPeriod; + if (caster->HasAura(SPELL_PRIEST_CASTIGATION)) + baseBolts += 1.0f; + + float basePeriod = channelDuration / baseBolts; + + float totalBolts = baseBolts + additionalBolts; + float newPeriod = channelDuration / totalBolts; + float pctDiff = GetPctOf(newPeriod - basePeriod, basePeriod); + + caster->CastSpell(caster, SPELL_PRIEST_HARSH_DISCIPLINE_AURA, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .SpellValueOverrides = { + { SPELLVALUE_BASE_POINT0, static_cast<int32>(std::floor(pctDiff)) }, + { SPELLVALUE_BASE_POINT1, additionalBolts } + } + }); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_pri_harsh_discipline::HandleEffectHit, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // 421558 - Heaven's Wrath class spell_pri_heavens_wrath : public AuraScript { @@ -4476,6 +4529,7 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_guardian_spirit); RegisterSpellScript(spell_pri_halo_shadow); RegisterAreaTriggerAI(areatrigger_pri_halo); + RegisterSpellScript(spell_pri_harsh_discipline); RegisterSpellScript(spell_pri_heavens_wrath); RegisterSpellScript(spell_pri_holy_mending); RegisterSpellScript(spell_pri_holy_words); |
