mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Spells: Fixed monk spell Provoke
Initial PR submitted by @Infamous-devel Closes #17384
This commit is contained in:
3
sql/updates/world/6.x/2016_06_17_01_world.sql
Normal file
3
sql/updates/world/6.x/2016_06_17_01_world.sql
Normal 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');
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user