diff options
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); |