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

@@ -0,0 +1,15 @@
DELETE FROM `spell_proc` WHERE `SpellId` IN (77486, 95740, 77487);
INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES
(95740, 0, 6, 0x00008000, 0x0, 0x00000440, 0x00050000, 1, 2, 0, 0, 0, 10, 0, 0),
(77486, 0, 6, 0x00008000, 0x0, 0x00000440, 0x00050000, 1, 2, 0, 32, 0, 10, 0, 0),
(77487, 0, 6, 0x00002000, 0x0, 0x00010000, 0x00010000, 1, 1, 0, 0, 0, 100, 0, 0);
DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
'spell_pri_shadow_orbs',
'spell_pri_shadow_orb_power',
'spell_pri_shadow_orb');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(95740,'spell_pri_shadow_orbs'),
(77486,'spell_pri_shadow_orb_power'),
(77487,'spell_pri_shadow_orb');
+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();