Core/Spells: Fixed monk spell Provoke

Initial PR submitted by @Infamous-devel

Closes #17384
This commit is contained in:
Shauren
2016-06-17 21:17:07 +02:00
parent 5fdeb06675
commit 65eb88c8a5
2 changed files with 71 additions and 6 deletions

View File

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

View File

@@ -28,12 +28,13 @@
enum MonkSpells
{
SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL = 117952,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC = 123333,
SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE = 154436,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK = 117962,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD = 117953,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL = 117952,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC = 123333,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK = 117962,
SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD = 117953,
SPELL_MONK_PROVOKE_SINGLE_TARGET = 116189,
SPELL_MONK_PROVOKE_AOE = 118635,
SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE = 154436,
};
// 117952 - Crackling Jade Lightning
@@ -125,8 +126,69 @@ public:
}
};
// 115546 - Provoke
class spell_monk_provoke : public SpellScriptLoader
{
public:
spell_monk_provoke() : SpellScriptLoader("spell_monk_provoke") { }
class spell_monk_provoke_SpellScript : public SpellScript
{
PrepareSpellScript(spell_monk_provoke_SpellScript);
static uint32 const BlackOxStatusEntry = 61146;
bool Validate(SpellInfo const* spellInfo) override
{
if (!(spellInfo->GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK)) // ensure GetExplTargetUnit() will return something meaningful during CheckCast
return false;
if (!sSpellMgr->GetSpellInfo(SPELL_MONK_PROVOKE_SINGLE_TARGET))
return false;
if (!sSpellMgr->GetSpellInfo(SPELL_MONK_PROVOKE_AOE))
return false;
return true;
}
SpellCastResult CheckExplicitTarget()
{
if (GetExplTargetUnit()->GetEntry() != BlackOxStatusEntry)
{
SpellInfo const* singleTarget = sSpellMgr->AssertSpellInfo(SPELL_MONK_PROVOKE_SINGLE_TARGET);
SpellCastResult singleTargetExplicitResult = singleTarget->CheckExplicitTarget(GetCaster(), GetExplTargetUnit());
if (singleTargetExplicitResult != SPELL_CAST_OK)
return singleTargetExplicitResult;
}
else if (GetExplTargetUnit()->GetOwnerGUID() != GetCaster()->GetGUID())
return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}
void HandleDummy(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
if (GetHitUnit()->GetEntry() != BlackOxStatusEntry)
GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_PROVOKE_SINGLE_TARGET, true);
else
GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_PROVOKE_AOE, true);
}
void Register() override
{
OnCheckCast += SpellCheckCastFn(spell_monk_provoke_SpellScript::CheckExplicitTarget);
OnEffectHitTarget += SpellEffectFn(spell_monk_provoke_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_monk_provoke_SpellScript();
}
};
void AddSC_monk_spell_scripts()
{
new spell_monk_crackling_jade_lightning();
new spell_monk_crackling_jade_lightning_knockback_proc_aura();
new spell_monk_provoke();
}