Core/Spells: fixed Shadow Orbs and Shadow Orb Power mastery

This commit is contained in:
Ovahlord committed 2018-06-26 18:26:15 +02:00
1 parent 0d490157fe
commit 86dca48ed9
2 files changed
+125

No files matched your search

+110
View File
@@ -39,6 +39,7 @@ enum PriestSpells
SPELL_PRIEST_DIVINE_AEGIS = 47753,
SPELL_PRIEST_DIVINE_TOUCH = 63544,
SPELL_PRIEST_ECHO_OF_LIGHT = 77489,
SPELL_PRIEST_EMPOWERED_SHADOW = 95799,
SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING = 55675,
SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC = 55677,
SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL = 56131,
@@ -57,6 +58,8 @@ enum PriestSpells
SPELL_PRIEST_PENANCE_R1_HEAL = 47757,
SPELL_PRIEST_REFLECTIVE_SHIELD_R1 = 33201,
SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED = 33619,
SPELL_PRIEST_SHADOW_ORB_MARKER = 93683,
SPELL_PRIEST_SHADOW_ORB_POWER = 77486,
SPELL_PRIEST_SHADOWFORM_VISUAL_WITHOUT_GLYPH = 107903,
SPELL_PRIEST_SHADOWFORM_VISUAL_WITH_GLYPH = 107904,
SPELL_PRIEST_SHADOW_WORD_DEATH = 32409,
@@ -1224,6 +1227,113 @@ class spell_pri_echo_of_light : public SpellScriptLoader
}
};
// 95740 - Shadow Orbs (Passive)
class spell_pri_shadow_orbs : public AuraScript
{
PrepareAuraScript(spell_pri_shadow_orbs);
bool Validate(SpellInfo const* spellInfo) override
{
return ValidateSpellInfo(
{
SPELL_PRIEST_SHADOW_ORB_POWER,
spellInfo->Effects[EFFECT_0].TriggerSpell
});
}
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
// Do not proc when the target has Shadow Orb Power mastery active
if (GetTarget()->HasAura(SPELL_PRIEST_SHADOW_ORB_POWER))
return false;
return true;
}
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true);
}
void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_pri_shadow_orbs::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_pri_shadow_orbs::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
// 77486 - Shadow Orb Power (Passive)
class spell_pri_shadow_orb_power : public AuraScript
{
PrepareAuraScript(spell_pri_shadow_orb_power);
bool Validate(SpellInfo const* spellInfo) override
{
return ValidateSpellInfo({ spellInfo->Effects[EFFECT_0].TriggerSpell });
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
int32 amount = GetEffect(EFFECT_0)->GetAmount();
if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell))
amount += spell->Effects[EFFECT_0].BasePoints;
GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, nullptr, aurEff);
}
void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_pri_shadow_orb_power::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};
// 77487 - Shadow Orb
class spell_pri_shadow_orb : public AuraScript
{
PrepareAuraScript(spell_pri_shadow_orb);
bool Validate(SpellInfo const* spellInfo) override
{
return ValidateSpellInfo(
{
SPELL_PRIEST_SHADOW_ORB_MARKER,
SPELL_PRIEST_EMPOWERED_SHADOW
});
}
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetStackAmount() == GetSpellInfo()->StackAmount)
GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_SHADOW_ORB_MARKER, true);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetTarget()->RemoveAurasDueToSpell(SPELL_PRIEST_SHADOW_ORB_MARKER);
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();
Unit* target = GetTarget();
int32 bp = aurEff->GetAmount();
target->CastCustomSpell(target, SPELL_PRIEST_EMPOWERED_SHADOW, &bp, &bp, 0, true, nullptr, aurEff);
target->RemoveAurasDueToSpell(SPELL_PRIEST_SHADOW_ORB_MARKER);
Remove();
}
void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_pri_shadow_orb::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_pri_shadow_orb::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
OnEffectProc += AuraEffectProcFn(spell_pri_shadow_orb::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
void AddSC_priest_spell_scripts()
{
new spell_pri_body_and_soul();