aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_monk.cpp131
-rw-r--r--src/server/scripts/Spells/spell_script_loader.cpp2
2 files changed, 133 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_monk.cpp b/src/server/scripts/Spells/spell_monk.cpp
new file mode 100644
index 00000000000..a92ab8ab624
--- /dev/null
+++ b/src/server/scripts/Spells/spell_monk.cpp
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Scripts for spells with SPELLFAMILY_MONK and SPELLFAMILY_GENERIC spells used by monk players.
+ * Scriptnames of files in this file should be prefixed with "spell_monk_".
+ */
+
+#include "SpellScript.h"
+#include "ScriptMgr.h"
+#include "Unit.h"
+#include "SpellAuraEffects.h"
+
+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,
+};
+
+// 117952 - Crackling Jade Lightning
+class spell_monk_crackling_jade_lightning : public SpellScriptLoader
+{
+public:
+ spell_monk_crackling_jade_lightning() : SpellScriptLoader("spell_monk_crackling_jade_lightning") { }
+
+ class spell_monk_crackling_jade_lightning_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_monk_crackling_jade_lightning_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC))
+ return false;
+ return true;
+ }
+
+ void OnTick(AuraEffect const* /*aurEff*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (caster->HasAura(SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE))
+ caster->CastSpell(caster, SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC, TRIGGERED_FULL_MASK);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_monk_crackling_jade_lightning_AuraScript::OnTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_monk_crackling_jade_lightning_AuraScript();
+ }
+};
+
+// 117959 - Crackling Jade Lightning
+class spell_monk_crackling_jade_lightning_knockback_proc_aura : public SpellScriptLoader
+{
+public:
+ spell_monk_crackling_jade_lightning_knockback_proc_aura() : SpellScriptLoader("spell_monk_crackling_jade_lightning_knockback_proc_aura") { }
+
+ class spell_monk_crackling_jade_lightning_aura_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_monk_crackling_jade_lightning_aura_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD))
+ return false;
+ return true;
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ if (GetTarget()->HasAura(SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD))
+ return false;
+
+ if (eventInfo.GetActor()->GetGUID() != GetTarget()->GetChannelObjectGuid())
+ return false;
+
+ Spell* currentChanneledSpell = GetTarget()->GetCurrentSpell(CURRENT_CHANNELED_SPELL);
+ if (!currentChanneledSpell || currentChanneledSpell->GetSpellInfo()->Id != SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL)
+ return false;
+
+ return true;
+ }
+
+ void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
+ {
+ GetTarget()->CastSpell(eventInfo.GetActor(), SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK, TRIGGERED_FULL_MASK);
+ GetTarget()->CastSpell(GetTarget(), SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD, TRIGGERED_FULL_MASK);
+ }
+
+ void Register() override
+ {
+ DoCheckProc += AuraCheckProcFn(spell_monk_crackling_jade_lightning_aura_AuraScript::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_monk_crackling_jade_lightning_aura_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_monk_crackling_jade_lightning_aura_AuraScript();
+ }
+};
+
+void AddSC_monk_spell_scripts()
+{
+ new spell_monk_crackling_jade_lightning();
+ new spell_monk_crackling_jade_lightning_knockback_proc_aura();
+}
diff --git a/src/server/scripts/Spells/spell_script_loader.cpp b/src/server/scripts/Spells/spell_script_loader.cpp
index b2c8d6663fa..c841c3b4ef8 100644
--- a/src/server/scripts/Spells/spell_script_loader.cpp
+++ b/src/server/scripts/Spells/spell_script_loader.cpp
@@ -21,6 +21,7 @@ void AddSC_druid_spell_scripts();
void AddSC_generic_spell_scripts();
void AddSC_hunter_spell_scripts();
void AddSC_mage_spell_scripts();
+void AddSC_monk_spell_scripts();
void AddSC_paladin_spell_scripts();
void AddSC_priest_spell_scripts();
void AddSC_rogue_spell_scripts();
@@ -40,6 +41,7 @@ void AddSpellsScripts()
AddSC_generic_spell_scripts();
AddSC_hunter_spell_scripts();
AddSC_mage_spell_scripts();
+ AddSC_monk_spell_scripts();
AddSC_paladin_spell_scripts();
AddSC_priest_spell_scripts();
AddSC_rogue_spell_scripts();