aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorCristian Vintila <127750549+cristianvnt@users.noreply.github.com>2026-01-03 22:39:06 +0200
committerGitHub <noreply@github.com>2026-01-03 21:39:06 +0100
commit1eaf7c65953dedfe30b532cc648db53e61513b13 (patch)
treee9ac8d430e0d3db18a44dc137ba536572f1b7ddf /src/server
parenta1f1c2a8d4a12838589f470b05721ddc97b0842e (diff)
Scripts/Spells: Implement priest talent Harsh Discipline (#31468)
Diffstat (limited to 'src/server')
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp54
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);