Scripts/Spells: Implement priest talent Harsh Discipline (#31468)
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_harsh_discipline';
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||||
|
(194509,'spell_pri_harsh_discipline');
|
||||||
|
|
||||||
|
DELETE FROM `spell_proc` WHERE `SpellId` IN (373183);
|
||||||
|
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||||
|
(373183,0x00,6,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0x1A,0x0,0,0,0,0); -- Harsh Discipline
|
||||||
@@ -63,6 +63,7 @@ enum PriestSpells
|
|||||||
SPELL_PRIEST_BODY_AND_SOUL = 64129,
|
SPELL_PRIEST_BODY_AND_SOUL = 64129,
|
||||||
SPELL_PRIEST_BODY_AND_SOUL_SPEED = 65081,
|
SPELL_PRIEST_BODY_AND_SOUL_SPEED = 65081,
|
||||||
SPELL_PRIEST_BURNING_VEHEMENCE_DAMAGE = 400370,
|
SPELL_PRIEST_BURNING_VEHEMENCE_DAMAGE = 400370,
|
||||||
|
SPELL_PRIEST_CASTIGATION = 193134,
|
||||||
SPELL_PRIEST_CENSURE = 200199,
|
SPELL_PRIEST_CENSURE = 200199,
|
||||||
SPELL_PRIEST_CIRCLE_OF_HEALING = 204883,
|
SPELL_PRIEST_CIRCLE_OF_HEALING = 204883,
|
||||||
SPELL_PRIEST_CRYSTALLINE_REFLECTION = 373457,
|
SPELL_PRIEST_CRYSTALLINE_REFLECTION = 373457,
|
||||||
@@ -117,6 +118,8 @@ enum PriestSpells
|
|||||||
SPELL_PRIEST_HALO_HOLY_HEAL = 120692,
|
SPELL_PRIEST_HALO_HOLY_HEAL = 120692,
|
||||||
SPELL_PRIEST_HALO_SHADOW_DAMAGE = 390964,
|
SPELL_PRIEST_HALO_SHADOW_DAMAGE = 390964,
|
||||||
SPELL_PRIEST_HALO_SHADOW_HEAL = 390971,
|
SPELL_PRIEST_HALO_SHADOW_HEAL = 390971,
|
||||||
|
SPELL_PRIEST_HARSH_DISCIPLINE = 373180,
|
||||||
|
SPELL_PRIEST_HARSH_DISCIPLINE_AURA = 373183,
|
||||||
SPELL_PRIEST_HEAL = 2060,
|
SPELL_PRIEST_HEAL = 2060,
|
||||||
SPELL_PRIEST_HEALING_LIGHT = 196809,
|
SPELL_PRIEST_HEALING_LIGHT = 196809,
|
||||||
SPELL_PRIEST_HEAVENS_WRATH = 421558,
|
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
|
// 421558 - Heaven's Wrath
|
||||||
class spell_pri_heavens_wrath : public AuraScript
|
class spell_pri_heavens_wrath : public AuraScript
|
||||||
{
|
{
|
||||||
@@ -4476,6 +4529,7 @@ void AddSC_priest_spell_scripts()
|
|||||||
RegisterSpellScript(spell_pri_guardian_spirit);
|
RegisterSpellScript(spell_pri_guardian_spirit);
|
||||||
RegisterSpellScript(spell_pri_halo_shadow);
|
RegisterSpellScript(spell_pri_halo_shadow);
|
||||||
RegisterAreaTriggerAI(areatrigger_pri_halo);
|
RegisterAreaTriggerAI(areatrigger_pri_halo);
|
||||||
|
RegisterSpellScript(spell_pri_harsh_discipline);
|
||||||
RegisterSpellScript(spell_pri_heavens_wrath);
|
RegisterSpellScript(spell_pri_heavens_wrath);
|
||||||
RegisterSpellScript(spell_pri_holy_mending);
|
RegisterSpellScript(spell_pri_holy_mending);
|
||||||
RegisterSpellScript(spell_pri_holy_words);
|
RegisterSpellScript(spell_pri_holy_words);
|
||||||
|
|||||||
Reference in New Issue
Block a user