mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Scripts/Spells: Implement priest talent Divine Words (#31462)
This commit is contained in:
@@ -81,6 +81,8 @@ enum PriestSpells
|
||||
SPELL_PRIEST_DIVINE_AEGIS = 47515,
|
||||
SPELL_PRIEST_DIVINE_AEGIS_ABSORB = 47753,
|
||||
SPELL_PRIEST_DIVINE_BLESSING = 40440,
|
||||
SPELL_PRIEST_DIVINE_FAVOR_CHASTISE = 372761,
|
||||
SPELL_PRIEST_DIVINE_FAVOR_SERENITY = 372791,
|
||||
SPELL_PRIEST_DIVINE_HYMN_HEAL = 64844,
|
||||
SPELL_PRIEST_DIVINE_IMAGE_SUMMON = 392990,
|
||||
SPELL_PRIEST_DIVINE_IMAGE_EMPOWER = 409387,
|
||||
@@ -92,6 +94,8 @@ enum PriestSpells
|
||||
SPELL_PRIEST_DIVINE_STAR_HOLY_HEAL = 110745,
|
||||
SPELL_PRIEST_DIVINE_STAR_SHADOW_DAMAGE = 390845,
|
||||
SPELL_PRIEST_DIVINE_STAR_SHADOW_HEAL = 390981,
|
||||
SPELL_PRIEST_DIVINE_WORD_SANCTUARY_AREATRIGGER = 372784,
|
||||
SPELL_PRIEST_DIVINE_WORD_SANCTUARY_HEAL = 372787,
|
||||
SPELL_PRIEST_DIVINE_WRATH = 40441,
|
||||
SPELL_PRIEST_DIVINITY = 1215241,
|
||||
SPELL_PRIEST_DIVINITY_AURA = 1216314,
|
||||
@@ -1339,6 +1343,107 @@ private:
|
||||
std::vector<ObjectGuid> _affectedUnits;
|
||||
};
|
||||
|
||||
struct spell_pri_holy_words_base
|
||||
{
|
||||
static void ModifyCooldown(Unit* priest, SpellInfo const* spellInfo, Milliseconds cooldownMod)
|
||||
{
|
||||
priest->GetSpellHistory()->ModifyCooldown(spellInfo, cooldownMod, true);
|
||||
}
|
||||
};
|
||||
|
||||
// 372760 - Divine Word
|
||||
class spell_pri_divine_word : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* spellInfo) override
|
||||
{
|
||||
return ValidateSpellInfo
|
||||
({
|
||||
SPELL_PRIEST_HOLY_WORD_CHASTISE,
|
||||
SPELL_PRIEST_HOLY_WORD_SANCTIFY,
|
||||
SPELL_PRIEST_HOLY_WORD_SERENITY,
|
||||
SPELL_PRIEST_DIVINE_FAVOR_CHASTISE,
|
||||
SPELL_PRIEST_DIVINE_WORD_SANCTUARY_AREATRIGGER,
|
||||
SPELL_PRIEST_DIVINE_FAVOR_SERENITY
|
||||
}) && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
|
||||
}
|
||||
|
||||
void HandleProc(ProcEventInfo const& procInfo) const
|
||||
{
|
||||
Unit* caster = GetTarget();
|
||||
switch (procInfo.GetSpellInfo()->Id)
|
||||
{
|
||||
case SPELL_PRIEST_HOLY_WORD_CHASTISE:
|
||||
caster->CastSpell(caster, SPELL_PRIEST_DIVINE_FAVOR_CHASTISE, CastSpellExtraArgsInit{
|
||||
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
|
||||
.TriggeringSpell = procInfo.GetProcSpell()
|
||||
});
|
||||
spell_pri_holy_words_base::ModifyCooldown(caster, procInfo.GetSpellInfo(),
|
||||
Seconds(-GetSpellInfo()->GetEffect(EFFECT_1).CalcValue(caster)));
|
||||
break;
|
||||
case SPELL_PRIEST_HOLY_WORD_SANCTIFY:
|
||||
GetCaster()->CastSpell(*procInfo.GetProcSpell()->m_targets.GetDst(), SPELL_PRIEST_DIVINE_WORD_SANCTUARY_AREATRIGGER, CastSpellExtraArgsInit{
|
||||
.TriggerFlags = TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_CAST_TIME,
|
||||
.TriggeringSpell = procInfo.GetProcSpell()
|
||||
});
|
||||
break;
|
||||
case SPELL_PRIEST_HOLY_WORD_SERENITY:
|
||||
caster->CastSpell(caster, SPELL_PRIEST_DIVINE_FAVOR_SERENITY, CastSpellExtraArgsInit{
|
||||
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
|
||||
.TriggeringSpell = procInfo.GetProcSpell()
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnProc += AuraProcFn(spell_pri_divine_word::HandleProc);
|
||||
}
|
||||
};
|
||||
|
||||
// 372784 - Divine Word: Sanctuary
|
||||
class spell_pri_divine_word_sanctuary : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_DIVINE_WORD_SANCTUARY_HEAL });
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) const
|
||||
{
|
||||
Unit* caster = GetTarget();
|
||||
for (AreaTrigger* at : caster->GetAreaTriggers(GetSpellInfo()->Id))
|
||||
caster->CastSpell(at->GetPosition(), SPELL_PRIEST_DIVINE_WORD_SANCTUARY_HEAL);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_pri_divine_word_sanctuary::HandleEffectPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 372787 - Divine Word: Sanctuary
|
||||
class spell_pri_divine_word_sanctuary_heal : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* spellInfo) override
|
||||
{
|
||||
return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets) const
|
||||
{
|
||||
int32 maxTargets = GetEffectInfo(EFFECT_1).CalcValue(GetCaster());
|
||||
Trinity::SelectRandomInjuredTargets(targets, maxTargets, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_word_sanctuary_heal::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
|
||||
}
|
||||
};
|
||||
|
||||
// 1215241 - Divinity
|
||||
class spell_pri_divinity : public AuraScript
|
||||
{
|
||||
@@ -1372,14 +1477,6 @@ class spell_pri_divinity : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
struct spell_pri_holy_words_base
|
||||
{
|
||||
static void ModifyCooldown(Unit* priest, SpellInfo const* spellInfo, Milliseconds cooldownMod)
|
||||
{
|
||||
priest->GetSpellHistory()->ModifyCooldown(spellInfo, cooldownMod, true);
|
||||
}
|
||||
};
|
||||
|
||||
// 391339 - Empowered Renew
|
||||
class spell_pri_empowered_renew : public AuraScript
|
||||
{
|
||||
@@ -4579,6 +4676,9 @@ void AddSC_priest_spell_scripts()
|
||||
RegisterSpellScript(spell_pri_divine_service);
|
||||
RegisterSpellScript(spell_pri_divine_star_shadow);
|
||||
RegisterAreaTriggerAI(areatrigger_pri_divine_star);
|
||||
RegisterSpellScript(spell_pri_divine_word);
|
||||
RegisterSpellScript(spell_pri_divine_word_sanctuary);
|
||||
RegisterSpellScript(spell_pri_divine_word_sanctuary_heal);
|
||||
RegisterSpellScript(spell_pri_divinity);
|
||||
RegisterSpellScript(spell_pri_divine_procession);
|
||||
RegisterSpellScript(spell_pri_empowered_renew);
|
||||
|
||||
Reference in New Issue
Block a user