aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2021_11_18_03_world_2019_01_05_01_world.sql9
-rw-r--r--src/server/game/Spells/SpellEffects.cpp25
-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/Spells/spell_generic.cpp22
5 files changed, 114 insertions, 81 deletions
diff --git a/sql/updates/world/master/2021_11_18_03_world_2019_01_05_01_world.sql b/sql/updates/world/master/2021_11_18_03_world_2019_01_05_01_world.sql
new file mode 100644
index 00000000000..7109d05b5ef
--- /dev/null
+++ b/sql/updates/world/master/2021_11_18_03_world_2019_01_05_01_world.sql
@@ -0,0 +1,9 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN
+('spell_four_horsemen_consumption',
+'spell_rajaxx_thundercrash',
+'spell_gen_arcane_charge');
+
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(28865, 'spell_four_horsemen_consumption'),
+(25599, 'spell_rajaxx_thundercrash'),
+(45072, 'spell_gen_arcane_charge');
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index ecb748be23e..428120cb6f2 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -479,31 +479,6 @@ void Spell::EffectSchoolDMG()
{
case SPELLFAMILY_GENERIC:
{
- ///@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;
- }
- }
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 f8810940af6..2b6283d980b 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -18,6 +18,7 @@
#include "ruins_of_ahnqiraj.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
+#include "SpellScript.h"
enum Yells
{
@@ -133,7 +134,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 59ced774447..8ea22c9c544 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -697,64 +697,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()
{
@@ -762,5 +767,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/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 48fdc440b97..411040c3394 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
@@ -4231,6 +4252,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);