Scripts/Spells: Priest - Sins of the Many fixed (#28122)

This commit is contained in:
Teleqraph
2022-08-02 21:17:05 +02:00
committed by GitHub
parent 87e2d53fc1
commit f20135696b
2 changed files with 48 additions and 1 deletions

View File

@@ -0,0 +1,3 @@
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_sins_of_the_many';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(280391, 'spell_pri_sins_of_the_many');

View File

@@ -76,6 +76,7 @@ enum PriestSpells
SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY = 187464,
SPELL_PRIEST_SHIELD_DISCIPLINE_ENERGIZE = 47755,
SPELL_PRIEST_SHIELD_DISCIPLINE_PASSIVE = 197045,
SPELL_PRIEST_SINS_OF_THE_MANY = 280398,
SPELL_PRIEST_SMITE = 585,
SPELL_PRIEST_SPIRIT_OF_REDEMPTION = 27827,
SPELL_PRIEST_STRENGTH_OF_SOUL = 197535,
@@ -219,7 +220,9 @@ class spell_pri_atonement : public AuraScript
bool Validate(SpellInfo const* spellInfo) override
{
return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT_HEAL }) && spellInfo->GetEffects().size() > EFFECT_1;
return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT_HEAL, SPELL_PRIEST_SINS_OF_THE_MANY })
&& spellInfo->GetEffects().size() > EFFECT_1
&& sSpellMgr->AssertSpellInfo(SPELL_PRIEST_SINS_OF_THE_MANY, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_2;
}
bool CheckProc(ProcEventInfo& eventInfo)
@@ -257,11 +260,24 @@ public:
void AddAtonementTarget(ObjectGuid const& target)
{
_appliedAtonements.push_back(target);
UpdateSinsOfTheManyValue();
}
void RemoveAtonementTarget(ObjectGuid const& target)
{
_appliedAtonements.erase(std::remove(_appliedAtonements.begin(), _appliedAtonements.end(), target), _appliedAtonements.end());
UpdateSinsOfTheManyValue();
}
void UpdateSinsOfTheManyValue()
{
constexpr std::array<float, 11> damageByStack = { 12.0f, 12.0f, 10.0f, 8.0f, 7.0f, 6.0f, 5.0f, 5.0f, 4.0f, 4.0f, 3.0f };
for (SpellEffIndex effectIndex : { EFFECT_0, EFFECT_1, EFFECT_2 })
if (AuraEffect* sinOfTheMany = GetTarget()->GetAuraEffect(SPELL_PRIEST_SINS_OF_THE_MANY, effectIndex))
sinOfTheMany->ChangeAmount(damageByStack[std::min(_appliedAtonements.size(), damageByStack.size() - 1)]);
}
};
@@ -997,6 +1013,33 @@ private:
ObjectGuid _raptureTarget;
};
// 280391 - Sins of the Many
class spell_pri_sins_of_the_many : public AuraScript
{
PrepareAuraScript(spell_pri_sins_of_the_many);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PRIEST_SINS_OF_THE_MANY });
}
void HandleOnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_SINS_OF_THE_MANY, true);
}
void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetTarget()->RemoveAura(SPELL_PRIEST_SINS_OF_THE_MANY);
}
void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_pri_sins_of_the_many::HandleOnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_pri_sins_of_the_many::HandleOnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
// 20711 - Spirit of Redemption
class spell_pri_spirit_of_redemption : public AuraScript
{
@@ -1351,6 +1394,7 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_prayer_of_mending_aura);
RegisterSpellScript(spell_pri_prayer_of_mending_jump);
RegisterSpellScript(spell_pri_rapture);
RegisterSpellScript(spell_pri_sins_of_the_many);
RegisterSpellScript(spell_pri_spirit_of_redemption);
RegisterSpellScript(spell_pri_shadow_mend);
RegisterSpellScript(spell_pri_shadow_mend_periodic_damage);