mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-27 12:22:39 +01:00
Scripts/Spells: Implement Epiphany and update Prayer of Mending's related talents (#29169)
This commit is contained in:
15
sql/updates/world/master/2023_08_10_01_world.sql
Normal file
15
sql/updates/world/master/2023_08_10_01_world.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` IN (414553, 409479);
|
||||
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||
(414553,0x00,6,0x10200400,0x00000000,0x00000020,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Epiphany
|
||||
(409479,0x00,6,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0,0,0,1); -- Inspired Word
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_prayer_of_mending_heal', 'spell_pri_benediction', 'spell_pri_divine_service', 'spell_pri_focused_mending',
|
||||
'spell_pri_epiphany', 'spell_pri_holy_10_1_class_set_2pc_chooser', 'spell_pri_holy_10_1_class_set_4pc', 'spell_pri_holy_10_1_class_set_4pc_aura');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(33110, 'spell_pri_benediction'), -- Benediction
|
||||
(33110, 'spell_pri_divine_service'), -- Divine Service
|
||||
(33110, 'spell_pri_focused_mending'), -- Focused Mending
|
||||
(414553, 'spell_pri_epiphany'), -- Epiphany
|
||||
(411097, 'spell_pri_holy_10_1_class_set_2pc_chooser'), -- Priest Holy 10.1 Class Set 2pc (Chooser)
|
||||
(155793, 'spell_pri_holy_10_1_class_set_4pc'), -- Priest Holy 10.1 Class Set 4pc
|
||||
(41635, 'spell_pri_holy_10_1_class_set_4pc_aura'); -- Priest Holy 10.1 Class Set 4pc
|
||||
@@ -75,6 +75,8 @@ enum PriestSpells
|
||||
SPELL_PRIEST_DIVINE_STAR_SHADOW_HEAL = 390981,
|
||||
SPELL_PRIEST_DIVINE_WRATH = 40441,
|
||||
SPELL_PRIEST_EMPOWERED_RENEW_HEAL = 391359,
|
||||
SPELL_PRIEST_EPIPHANY = 414553,
|
||||
SPELL_PRIEST_EPIPHANY_HIGHLIGHT = 414556,
|
||||
SPELL_PRIEST_FLASH_HEAL = 2061,
|
||||
SPELL_PRIEST_GREATER_HEAL = 289666,
|
||||
SPELL_PRIEST_FOCUSED_MENDING = 372354,
|
||||
@@ -95,6 +97,8 @@ enum PriestSpells
|
||||
SPELL_PRIEST_HOLY_WORD_SANCTIFY = 34861,
|
||||
SPELL_PRIEST_HOLY_WORD_SERENITY = 2050,
|
||||
SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER = 411097,
|
||||
SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P = 405556,
|
||||
SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT = 409479,
|
||||
SPELL_PRIEST_ITEM_EFFICIENCY = 37595,
|
||||
SPELL_PRIEST_LEAP_OF_FAITH_EFFECT = 92832,
|
||||
SPELL_PRIEST_LEVITATE_EFFECT = 111759,
|
||||
@@ -117,6 +121,10 @@ enum PriestSpells
|
||||
SPELL_PRIEST_POWER_WORD_SHIELD = 17,
|
||||
SPELL_PRIEST_POWER_WORD_SOLACE_ENERGIZE = 129253,
|
||||
SPELL_PRIEST_PRAYER_OF_HEALING = 596,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING = 33076,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_AURA = 41635,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_HEAL = 33110,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_JUMP = 155793,
|
||||
SPELL_PRIEST_PURGE_THE_WICKED = 204197,
|
||||
SPELL_PRIEST_PURGE_THE_WICKED_DUMMY = 204215,
|
||||
SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC = 204213,
|
||||
@@ -146,14 +154,15 @@ enum PriestSpells
|
||||
SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085,
|
||||
SPELL_PRIEST_VOID_SHIELD = 199144,
|
||||
SPELL_PRIEST_VOID_SHIELD_EFFECT = 199145,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING = 33076,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_AURA = 41635,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_HEAL = 33110,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_JUMP = 155793,
|
||||
SPELL_PRIEST_WEAKENED_SOUL = 6788
|
||||
};
|
||||
|
||||
enum PriestPets
|
||||
enum PriestSpellVisuals
|
||||
{
|
||||
SPELL_VISUAL_PRIEST_PRAYER_OF_MENDING = 38945
|
||||
};
|
||||
|
||||
enum PriestSummons
|
||||
{
|
||||
NPC_PRIEST_DIVINE_IMAGE = 198236
|
||||
};
|
||||
@@ -425,6 +434,28 @@ class spell_pri_atonement_triggered : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 33110 - Prayer of Mending (Heal)
|
||||
class spell_pri_benediction : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_RENEW })
|
||||
&& ValidateSpellEffect({ { SPELL_PRIEST_BENEDICTION, EFFECT_0 } });
|
||||
}
|
||||
|
||||
void HandleEffectHitTarget(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
if (AuraEffect const* benediction = GetCaster()->GetAuraEffect(SPELL_PRIEST_BENEDICTION, EFFECT_0))
|
||||
if (roll_chance_i(benediction->GetAmount()))
|
||||
GetCaster()->CastSpell(GetHitUnit(), SPELL_PRIEST_RENEW, TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_benediction::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_HEAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 204883 - Circle of Healing
|
||||
class spell_pri_circle_of_healing : public SpellScript
|
||||
{
|
||||
@@ -580,7 +611,7 @@ class spell_pri_divine_image : public AuraScript
|
||||
.SetTriggeringSpell(eventInfo.GetProcSpell())
|
||||
.SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DISALLOW_PROC_EVENTS | TRIGGERED_DONT_REPORT_CAST_ERROR));
|
||||
|
||||
// cause immediate proc
|
||||
// Note: Divine Image triggers a cast immediately based on the Holy Word cast.
|
||||
DivineImageHelpers::Trigger(aurEff, eventInfo);
|
||||
}
|
||||
|
||||
@@ -671,6 +702,28 @@ class spell_pri_divine_image_stack_timer : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 33110 - Prayer of Mending (Heal)
|
||||
class spell_pri_divine_service : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING_AURA })
|
||||
&& ValidateSpellEffect({ { SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0 } });
|
||||
}
|
||||
|
||||
void CalculateHealingBonus(Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
|
||||
{
|
||||
if (AuraEffect const* divineServiceEffect = GetCaster()->GetAuraEffect(SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0))
|
||||
if (Aura const* prayerOfMending = victim->GetAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, GetCaster()->GetGUID()))
|
||||
AddPct(pctMod, int32(divineServiceEffect->GetAmount() * prayerOfMending->GetStackAmount()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
CalcHealing += SpellCalcHealingFn(spell_pri_divine_service::CalculateHealingBonus);
|
||||
}
|
||||
};
|
||||
|
||||
// 122121 - Divine Star (Shadow)
|
||||
class spell_pri_divine_star_shadow : public SpellScript
|
||||
{
|
||||
@@ -836,6 +889,60 @@ class spell_pri_empowered_renew : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 414553 - Epiphany
|
||||
class spell_pri_epiphany : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING, SPELL_PRIEST_EPIPHANY_HIGHLIGHT });
|
||||
}
|
||||
|
||||
static bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
return roll_chance_i(aurEff->GetAmount());
|
||||
}
|
||||
|
||||
void HandleOnProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) const
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
|
||||
target->GetSpellHistory()->ResetCooldown(SPELL_PRIEST_PRAYER_OF_MENDING, true);
|
||||
|
||||
target->CastSpell(target, SPELL_PRIEST_EPIPHANY_HIGHLIGHT, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckEffectProc += AuraCheckEffectProcFn(spell_pri_epiphany::CheckProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
OnEffectProc += AuraEffectProcFn(spell_pri_epiphany::HandleOnProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 33110 - Prayer of Mending (Heal)
|
||||
class spell_pri_focused_mending : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellEffect({ { SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0 } });
|
||||
}
|
||||
|
||||
void CalculateHealingBonus(Unit* /*victim*/, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
|
||||
{
|
||||
if (AuraEffect const* focusedMendingEffect = GetCaster()->GetAuraEffect(SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0))
|
||||
{
|
||||
bool const* isEmpoweredByFocusedMending = std::any_cast<bool>(&GetSpell()->m_customArg);
|
||||
|
||||
if (isEmpoweredByFocusedMending && *isEmpoweredByFocusedMending)
|
||||
AddPct(pctMod, focusedMendingEffect->GetAmount());
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
CalcHealing += SpellCalcHealingFn(spell_pri_focused_mending::CalculateHealingBonus);
|
||||
}
|
||||
};
|
||||
|
||||
// 47788 - Guardian Spirit
|
||||
class spell_pri_guardian_spirit : public AuraScript
|
||||
{
|
||||
@@ -1512,41 +1619,60 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
void CastPrayerOfMendingAura(Unit* caster, Unit* target, uint8 stack, bool firstCast)
|
||||
void CastPrayerOfMendingAura(Unit* caster, Unit* target, Unit* visualSender, uint8 stack, bool firstCast) const
|
||||
{
|
||||
uint32 basePoints = caster->SpellHealingBonusDone(target, _spellInfoHeal, _healEffectDummy->CalcValue(caster), HEAL, *_healEffectDummy);
|
||||
CastSpellExtraArgs args;
|
||||
args.TriggerFlags = TRIGGERED_FULL_MASK;
|
||||
args.AddSpellMod(SPELLVALUE_AURA_STACK, stack);
|
||||
|
||||
// Note: this line's purpose is to show the correct amount in Points field in SMSG_AURA_UPDATE.
|
||||
uint32 basePoints = caster->SpellHealingBonusDone(target, _spellInfoHeal, _healEffectDummy->CalcValue(caster), HEAL, *_healEffectDummy);
|
||||
args.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints);
|
||||
|
||||
// Note: Focused Mending talent.
|
||||
args.SetCustomArg(firstCast);
|
||||
|
||||
caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_AURA, args);
|
||||
|
||||
// Note: the visualSender is the priest if it is first cast or the aura holder when the aura triggers.
|
||||
visualSender->SendPlaySpellVisual(target, SPELL_VISUAL_PRIEST_PRAYER_OF_MENDING, 0, 0, 40.0f);
|
||||
}
|
||||
|
||||
protected:
|
||||
SpellInfo const* _spellInfoHeal;
|
||||
SpellEffectInfo const* _healEffectDummy;
|
||||
SpellInfo const* _spellInfoHeal = nullptr;
|
||||
SpellEffectInfo const* _healEffectDummy = nullptr;
|
||||
};
|
||||
|
||||
// 33076 - Prayer of Mending (Dummy)
|
||||
// 411097 - Priest Holy 10.1 Class Set 2pc (Chooser)
|
||||
class spell_pri_prayer_of_mending_dummy : public spell_pri_prayer_of_mending_SpellScriptBase
|
||||
{
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
Trinity::SelectRandomInjuredTargets(targets, 1, true);
|
||||
return ValidateSpellInfo
|
||||
({
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_AURA,
|
||||
SPELL_PRIEST_EPIPHANY,
|
||||
SPELL_PRIEST_EPIPHANY_HIGHLIGHT
|
||||
});
|
||||
}
|
||||
|
||||
void HandleEffectDummy(SpellEffIndex /*effIndex*/)
|
||||
void HandleEffectDummy(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
// Note: we need to increase BasePoints by 1 since it's 4 as default.
|
||||
CastPrayerOfMendingAura(GetCaster(), GetHitUnit(), GetEffectValue() + 1, true);
|
||||
Unit* caster = GetCaster();
|
||||
Unit* target = GetHitUnit();
|
||||
|
||||
// Note: we need to increase BasePoints by 1 since it's 4 as default. Also HACKFIX, we shouldn't reduce it by 1 if the target has the aura already.
|
||||
uint8 stackAmount = target->HasAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, caster->GetGUID()) ? GetEffectValue() : GetEffectValue() + 1;
|
||||
|
||||
CastPrayerOfMendingAura(caster, target, caster, stackAmount, true);
|
||||
|
||||
// Note: Epiphany talent.
|
||||
if (caster->HasAura(SPELL_PRIEST_EPIPHANY))
|
||||
caster->RemoveAurasDueToSpell(SPELL_PRIEST_EPIPHANY_HIGHLIGHT);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
if (m_scriptSpellId == SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER)
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_prayer_of_mending_dummy::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_dummy::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
@@ -1556,15 +1682,11 @@ class spell_pri_prayer_of_mending_aura : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo
|
||||
({
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_HEAL,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_JUMP,
|
||||
SPELL_PRIEST_SAY_YOUR_PRAYERS
|
||||
}) && ValidateSpellEffect({ { SPELL_PRIEST_SAY_YOUR_PRAYERS, EFFECT_0 } });
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, SPELL_PRIEST_PRAYER_OF_MENDING_JUMP })
|
||||
&& ValidateSpellEffect({ { SPELL_PRIEST_SAY_YOUR_PRAYERS, EFFECT_0 } });
|
||||
}
|
||||
|
||||
void HandleHeal(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
void HandleHeal(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/)
|
||||
{
|
||||
// Note: caster is the priest who cast the spell and target is current holder of the aura.
|
||||
Unit* target = GetTarget();
|
||||
@@ -1613,7 +1735,7 @@ private:
|
||||
|
||||
class spell_pri_prayer_of_mending : public SpellScript
|
||||
{
|
||||
void HandleEffectDummy(SpellEffIndex /*effIndex*/)
|
||||
void HandleEffectDummy(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
Aura* aura = GetHitAura();
|
||||
if (!aura)
|
||||
@@ -1636,19 +1758,16 @@ class spell_pri_prayer_of_mending : public SpellScript
|
||||
// 155793 - Prayer of Mending (Jump)
|
||||
class spell_pri_prayer_of_mending_jump : public spell_pri_prayer_of_mending_SpellScriptBase
|
||||
{
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
static void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
// Note: priority list is a) players b) non-player units. Also, this spell became smartheal in WoD.
|
||||
Trinity::SelectRandomInjuredTargets(targets, 1, true);
|
||||
}
|
||||
|
||||
void HandleJump(SpellEffIndex /*effIndex*/)
|
||||
void HandleJump(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
Unit* origCaster = GetOriginalCaster();
|
||||
Unit* target = GetHitUnit();
|
||||
|
||||
if (origCaster)
|
||||
CastPrayerOfMendingAura(origCaster, target, GetEffectValue(), false);
|
||||
if (Unit* origCaster = GetOriginalCaster())
|
||||
CastPrayerOfMendingAura(origCaster, GetHitUnit(), GetCaster(), GetEffectValue(), false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@@ -1658,68 +1777,27 @@ class spell_pri_prayer_of_mending_jump : public spell_pri_prayer_of_mending_Spel
|
||||
}
|
||||
};
|
||||
|
||||
// 33110 - Prayer of Mending (Heal)
|
||||
class spell_pri_prayer_of_mending_heal : public spell_pri_prayer_of_mending_SpellScriptBase
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo
|
||||
({
|
||||
SPELL_PRIEST_RENEW,
|
||||
SPELL_PRIEST_PRAYER_OF_MENDING_AURA
|
||||
}) && ValidateSpellEffect(
|
||||
{
|
||||
{ SPELL_PRIEST_BENEDICTION, EFFECT_0 },
|
||||
{ SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0 },
|
||||
{ SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0 }
|
||||
});
|
||||
}
|
||||
|
||||
void HandleEffectHitTarget(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
Unit* target = GetHitUnit();
|
||||
|
||||
if (AuraEffect const* benediction = caster->GetAuraEffect(SPELL_PRIEST_BENEDICTION, EFFECT_0))
|
||||
if (roll_chance_i(benediction->GetAmount()))
|
||||
caster->CastSpell(target, SPELL_PRIEST_RENEW, TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS);
|
||||
|
||||
float healBonus = 1.0f;
|
||||
|
||||
if (AuraEffect const* focusedMending = caster->GetAuraEffect(SPELL_PRIEST_FOCUSED_MENDING, EFFECT_0))
|
||||
{
|
||||
bool const* isEmpoweredByFocusedMending = std::any_cast<bool>(&GetSpell()->m_customArg);
|
||||
|
||||
if (isEmpoweredByFocusedMending && *isEmpoweredByFocusedMending)
|
||||
AddPct(healBonus, focusedMending->GetAmount());
|
||||
}
|
||||
|
||||
if (AuraEffect const* divineService = caster->GetAuraEffect(SPELL_PRIEST_DIVINE_SERVICE, EFFECT_0))
|
||||
if (Aura* prayerOfMending = target->GetAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, caster->GetGUID()))
|
||||
AddPct(healBonus, int32(divineService->GetAmount() * prayerOfMending->GetStackAmount()));
|
||||
|
||||
SetHitHeal(GetHitHeal() * healBonus);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_HEAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 405554 - Priest Holy 10.1 Class Set 2pc
|
||||
class spell_pri_holy_10_1_class_set_2pc : public AuraScript
|
||||
{
|
||||
bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER })
|
||||
&& ValidateSpellEffect({ { SPELL_PRIEST_PRAYER_OF_MENDING, EFFECT_0 } });
|
||||
}
|
||||
|
||||
static bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
return roll_chance_i(aurEff->GetAmount());
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& eventInfo) const
|
||||
{
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER,
|
||||
CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD)
|
||||
.SetTriggeringSpell(eventInfo.GetProcSpell()));
|
||||
CastSpellExtraArgs args(aurEff);
|
||||
args.SetTriggeringSpell(eventInfo.GetProcSpell());
|
||||
args.AddSpellMod(SPELLVALUE_BASE_POINT0, sSpellMgr->AssertSpellInfo(SPELL_PRIEST_PRAYER_OF_MENDING, GetCastDifficulty())->GetEffect(EFFECT_0).CalcValue(GetCaster()));
|
||||
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER, args);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@@ -1729,6 +1807,80 @@ class spell_pri_holy_10_1_class_set_2pc : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 411097 - Priest Holy 10.1 Class Set 2pc (Chooser)
|
||||
class spell_pri_holy_10_1_class_set_2pc_chooser : public spell_pri_prayer_of_mending_SpellScriptBase
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_PRAYER_OF_MENDING_AURA });
|
||||
}
|
||||
|
||||
static void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
Trinity::SelectRandomInjuredTargets(targets, 1, true);
|
||||
}
|
||||
|
||||
void HandleEffectDummy(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
Unit* target = GetHitUnit();
|
||||
|
||||
// Note: we need to increase BasePoints by 1 since it's 4 as default. Also HACKFIX, we shouldn't reduce it by 1 if the target has the aura already.
|
||||
uint8 stackAmount = target->HasAura(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, caster->GetGUID()) ? GetEffectValue() : GetEffectValue() + 1;
|
||||
|
||||
CastPrayerOfMendingAura(caster, target, caster, stackAmount, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_holy_10_1_class_set_2pc_chooser::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_holy_10_1_class_set_2pc_chooser::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 155793 - Prayer of Mending (Jump)
|
||||
class spell_pri_holy_10_1_class_set_4pc : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P, SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT });
|
||||
}
|
||||
|
||||
void HandleEffectDummy(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
if (GetOriginalCaster()->HasAura(SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P))
|
||||
GetOriginalCaster()->CastSpell(GetOriginalCaster(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT, TRIGGERED_IGNORE_GCD);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_holy_10_1_class_set_4pc::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 41635 - Prayer of Mending (Aura)
|
||||
class spell_pri_holy_10_1_class_set_4pc_aura : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P, SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT });
|
||||
}
|
||||
|
||||
void HandleOnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
|
||||
{
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
||||
return;
|
||||
|
||||
if (GetCaster()->HasAura(SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P))
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT, CastSpellExtraArgs(TRIGGERED_IGNORE_GCD).SetTriggeringAura(aurEff));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_pri_holy_10_1_class_set_4pc_aura::HandleOnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 204197 - Purge the Wicked
|
||||
// Called by Penance - 47540, Dark Reprimand - 400169
|
||||
class spell_pri_purge_the_wicked : public SpellScript
|
||||
@@ -2261,14 +2413,18 @@ void AddSC_priest_spell_scripts()
|
||||
RegisterSpellScript(spell_pri_aq_3p_bonus);
|
||||
RegisterSpellScript(spell_pri_atonement);
|
||||
RegisterSpellScript(spell_pri_atonement_triggered);
|
||||
RegisterSpellScript(spell_pri_benediction);
|
||||
RegisterSpellScript(spell_pri_circle_of_healing);
|
||||
RegisterSpellScript(spell_pri_divine_hymn);
|
||||
RegisterSpellScript(spell_pri_divine_image);
|
||||
RegisterSpellScript(spell_pri_divine_image_spell_triggered);
|
||||
RegisterSpellScript(spell_pri_divine_image_stack_timer);
|
||||
RegisterSpellScript(spell_pri_divine_service);
|
||||
RegisterSpellScript(spell_pri_divine_star_shadow);
|
||||
RegisterAreaTriggerAI(areatrigger_pri_divine_star);
|
||||
RegisterSpellScript(spell_pri_empowered_renew);
|
||||
RegisterSpellScript(spell_pri_epiphany);
|
||||
RegisterSpellScript(spell_pri_focused_mending);
|
||||
RegisterSpellScript(spell_pri_guardian_spirit);
|
||||
RegisterSpellScript(spell_pri_halo_shadow);
|
||||
RegisterAreaTriggerAI(areatrigger_pri_halo);
|
||||
@@ -2290,8 +2446,10 @@ void AddSC_priest_spell_scripts()
|
||||
RegisterSpellScript(spell_pri_prayer_of_mending_dummy);
|
||||
RegisterSpellAndAuraScriptPair(spell_pri_prayer_of_mending, spell_pri_prayer_of_mending_aura);
|
||||
RegisterSpellScript(spell_pri_prayer_of_mending_jump);
|
||||
RegisterSpellScript(spell_pri_prayer_of_mending_heal);
|
||||
RegisterSpellScript(spell_pri_holy_10_1_class_set_2pc);
|
||||
RegisterSpellScript(spell_pri_holy_10_1_class_set_2pc_chooser);
|
||||
RegisterSpellScript(spell_pri_holy_10_1_class_set_4pc);
|
||||
RegisterSpellScript(spell_pri_holy_10_1_class_set_4pc_aura);
|
||||
RegisterSpellScript(spell_pri_purge_the_wicked);
|
||||
RegisterSpellScript(spell_pri_purge_the_wicked_dummy);
|
||||
RegisterSpellScript(spell_pri_rapture);
|
||||
|
||||
Reference in New Issue
Block a user