aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanVS <33371360+DanVS@users.noreply.github.com>2019-01-05 00:54:33 +0000
committerAokromes <Aokromes@users.noreply.github.com>2019-01-05 01:54:33 +0100
commit8051ff13dfcf3819b58adfcec1608c08dcbcd080 (patch)
treeeb9748ef4fcee4b45c6c419f4137d26f3c244d23 /src
parent030f5d54d015f42a09c731c81135ab791b528f1c (diff)
Core/Scripts: Move some spells to scripts (#22332)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp34
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp21
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp118
-rw-r--r--src/server/scripts/Pet/pet_dk.cpp24
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp22
5 files changed, 129 insertions, 90 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index f2316b67909..2abe277191d 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -342,40 +342,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
damage /= count;
}
- ///@todo: move those to scripts
- switch (m_spellInfo->Id) // better way to check unknown
- {
- // Consumption
- case 28865:
- damage = 2750;
- if (m_caster->GetMap()->IsHeroic())
- damage = 4250;
- break;
- // percent from health with min
- case 25599: // Thundercrash
- {
- damage = unitTarget->GetHealth() / 2;
- if (damage < 200)
- damage = 200;
- break;
- }
- // arcane charge. must only affect demons (also undead?)
- case 45072:
- {
- if (!(unitTarget->GetCreatureTypeMask() & CREATURE_TYPEMASK_DEMON_OR_UNDEAD))
- return;
- break;
- }
- // Gargoyle Strike
- case 51963:
- {
- damage = 60;
- // about +4 base spell dmg per level
- if (unitCaster && unitCaster->getLevel() >= 60)
- damage += (unitCaster->getLevel() - 60) * 4;
- break;
- }
- }
break;
}
case SPELLFAMILY_WARRIOR:
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
index 1416fcd0105..019c7c2647e 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -19,6 +19,7 @@
#include "ruins_of_ahnqiraj.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
+#include "SpellScript.h"
enum Yells
{
@@ -134,7 +135,27 @@ class boss_rajaxx : public CreatureScript
}
};
+class spell_rajaxx_thundercrash : public SpellScript
+{
+ PrepareSpellScript(spell_rajaxx_thundercrash);
+
+ void HandleDamageCalc(SpellEffIndex /*effIndex*/)
+ {
+ int32 damage = GetHitUnit()->GetHealth() / 2;
+ if (damage < 200)
+ damage = 200;
+
+ SetHitDamage(damage);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_rajaxx_thundercrash::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
void AddSC_boss_rajaxx()
{
new boss_rajaxx();
+ RegisterSpellScript(spell_rajaxx_thundercrash);
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 58c51786c2c..ec013335208 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -690,64 +690,69 @@ class boss_four_horsemen_sir : public CreatureScript
}
};
-class spell_four_horsemen_mark : public SpellScriptLoader
-{
- public:
- spell_four_horsemen_mark() : SpellScriptLoader("spell_four_horsemen_mark") { }
-
- class spell_four_horsemen_mark_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_four_horsemen_mark_AuraScript);
+ class spell_four_horsemen_mark : public AuraScript
+ {
+ PrepareAuraScript(spell_four_horsemen_mark);
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ {
+ int32 damage;
+ switch (GetStackAmount())
+ {
+ case 1:
+ damage = 0;
+ break;
+ case 2:
+ damage = 500;
+ break;
+ case 3:
+ damage = 1000;
+ break;
+ case 4:
+ damage = 1500;
+ break;
+ case 5:
+ damage = 4000;
+ break;
+ case 6:
+ damage = 12000;
+ break;
+ default:
+ damage = 20000 + 1000 * (GetStackAmount() - 7);
+ break;
+ }
+ if (damage)
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellBP0(damage);
+ caster->CastSpell(GetTarget(), SPELL_MARK_DAMAGE, args);
+ }
+ }
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_four_horsemen_mark::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ }
+};
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- {
- int32 damage;
- switch (GetStackAmount())
- {
- case 1:
- damage = 0;
- break;
- case 2:
- damage = 500;
- break;
- case 3:
- damage = 1000;
- break;
- case 4:
- damage = 1500;
- break;
- case 5:
- damage = 4000;
- break;
- case 6:
- damage = 12000;
- break;
- default:
- damage = 20000 + 1000 * (GetStackAmount() - 7);
- break;
- }
- if (damage)
- {
- CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
- args.AddSpellBP0(damage);
- caster->CastSpell(GetTarget(), SPELL_MARK_DAMAGE, args);
- }
- }
- }
+ class spell_four_horsemen_consumption : public SpellScript
+ {
+ PrepareSpellScript(spell_four_horsemen_consumption);
- void Register() override
- {
- AfterEffectApply += AuraEffectApplyFn(spell_four_horsemen_mark_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- }
- };
+ void HandleDamageCalc(SpellEffIndex /*effIndex*/)
+ {
+ uint32 damage = GetCaster()->GetMap()->IsHeroic() ? 4250 : 2750;
+ SetHitDamage(damage);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_four_horsemen_mark_AuraScript();
- }
-};
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_four_horsemen_consumption::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+ };
void AddSC_boss_four_horsemen()
{
@@ -755,5 +760,6 @@ void AddSC_boss_four_horsemen()
new boss_four_horsemen_thane();
new boss_four_horsemen_lady();
new boss_four_horsemen_sir();
- new spell_four_horsemen_mark();
+ RegisterAuraScript(spell_four_horsemen_mark);
+ RegisterSpellScript(spell_four_horsemen_consumption);
}
diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp
index 5a59c324e92..751abdf9924 100644
--- a/src/server/scripts/Pet/pet_dk.cpp
+++ b/src/server/scripts/Pet/pet_dk.cpp
@@ -26,6 +26,7 @@
#include "GridNotifiersImpl.h"
#include "MotionMaster.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
enum DeathKnightSpells
{
@@ -136,8 +137,31 @@ class npc_pet_dk_guardian : public CreatureScript
}
};
+class spell_pet_dk_gargoyle_strike : public SpellScript
+{
+ PrepareSpellScript(spell_pet_dk_gargoyle_strike);
+
+ void HandleDamageCalc(SpellEffIndex /*effIndex*/)
+ {
+ int32 damage = 60;
+ if (Unit* caster = GetCaster())
+ {
+ if (caster->getLevel() >= 60)
+ damage += (caster->getLevel() - 60) * 4;
+ }
+
+ SetHitDamage(damage);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_pet_dk_gargoyle_strike::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+};
+
void AddSC_deathknight_pet_scripts()
{
new npc_pet_dk_ebon_gargoyle();
new npc_pet_dk_guardian();
+ RegisterSpellScript(spell_pet_dk_gargoyle_strike);
}
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index fc247bf4877..31cc1ddc80d 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -201,6 +201,27 @@ class spell_gen_animal_blood : public AuraScript
}
};
+class spell_gen_arcane_charge : public SpellScript
+{
+ PrepareSpellScript(spell_gen_arcane_charge);
+
+ SpellCastResult CheckRequirement()
+ {
+ if (Unit* target = GetExplTargetUnit())
+ {
+ if (!(target->GetCreatureTypeMask() & CREATURE_TYPEMASK_DEMON_OR_UNDEAD))
+ return SPELL_FAILED_DONT_REPORT;
+ }
+
+ return SPELL_CAST_OK;
+ }
+
+ void Register() override
+ {
+ OnCheckCast += SpellCheckCastFn(spell_gen_arcane_charge::CheckRequirement);
+ }
+};
+
// 430 Drink
// 431 Drink
// 432 Drink
@@ -4052,6 +4073,7 @@ void AddSC_generic_spell_scripts()
RegisterAuraScript(spell_gen_adaptive_warding);
RegisterSpellScript(spell_gen_allow_cast_from_item_only);
RegisterAuraScript(spell_gen_animal_blood);
+ RegisterSpellScript(spell_gen_arcane_charge);
RegisterAuraScript(spell_gen_arena_drink);
RegisterAuraScript(spell_gen_aura_of_anger);
RegisterAuraScript(spell_gen_aura_of_fear);