diff options
author | Aqua Deus <95978183+aquadeus@users.noreply.github.com> | 2025-06-29 23:03:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-29 23:03:56 +0200 |
commit | 9cc6cf45b62254f181da29a432b742179afa4ac6 (patch) | |
tree | 6a74011fea869ff2eafb8e296949e207ba08e6d0 | |
parent | 44b40191275db5a10d55100f7b4857741de83b41 (diff) |
Scripts/Spells: Implement mage talent Meteor (#31094)
-rw-r--r-- | sql/updates/world/master/2025_06_29_00_world.sql | 6 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 60 |
3 files changed, 72 insertions, 0 deletions
diff --git a/sql/updates/world/master/2025_06_29_00_world.sql b/sql/updates/world/master/2025_06_29_00_world.sql new file mode 100644 index 00000000000..e1f706792b1 --- /dev/null +++ b/sql/updates/world/master/2025_06_29_00_world.sql @@ -0,0 +1,6 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_mage_meteor'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(153561, 'spell_mage_meteor'); + +UPDATE `areatrigger_create_properties` SET `ScriptName`='at_mage_meteor' WHERE `Id`=3467; +UPDATE `areatrigger_create_properties` SET `ScriptName`='at_mage_meteor_burn' WHERE `Id`=1712; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index d5856da1873..c3bbd3d3516 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -5420,6 +5420,12 @@ void SpellMgr::LoadSpellInfoTargetCaps() spellInfo->_LoadSqrtTargetLimit(8, 0, {}, EFFECT_2, {}, {}); }); + // Meteor + ApplySpellFix({ 351140 }, [](SpellInfo* spellInfo) + { + spellInfo->_LoadSqrtTargetLimit(8, 0, {}, {}, {}, {}); + }); + TC_LOG_INFO("server.loading", ">> Loaded SpellInfo target caps in {} ms", GetMSTimeDiffToNow(oldMSTime)); } diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 4b433912121..c61bab59c8f 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -74,6 +74,9 @@ enum MageSpells SPELL_MAGE_LIVING_BOMB_PERIODIC = 217694, SPELL_MAGE_MANA_SURGE = 37445, SPELL_MAGE_MASTER_OF_TIME = 342249, + SPELL_MAGE_METEOR_AREATRIGGER = 177345, + SPELL_MAGE_METEOR_BURN_DAMAGE = 155158, + SPELL_MAGE_METEOR_MISSILE = 153564, SPELL_MAGE_RADIANT_SPARK_PROC_BLOCKER = 376105, SPELL_MAGE_RAY_OF_FROST_BONUS = 208141, SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST = 269748, @@ -1188,6 +1191,60 @@ class spell_mage_living_bomb_periodic : public AuraScript } }; +// 153561 - Meteor +class spell_mage_meteor : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_METEOR_AREATRIGGER }); + } + + void EffectHit(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(*GetHitDest(), SPELL_MAGE_METEOR_AREATRIGGER, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_mage_meteor::EffectHit, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 177345 - Meteor +// Id - 3467 +struct at_mage_meteor : public AreaTriggerAI +{ + using AreaTriggerAI::AreaTriggerAI; + + void OnRemove() override + { + if (Unit* caster = at->GetCaster()) + caster->CastSpell(at->GetPosition(), SPELL_MAGE_METEOR_MISSILE); + } +}; + +// 175396 - Meteor Burn +// Id - 1712 +struct at_mage_meteor_burn : public AreaTriggerAI +{ + using AreaTriggerAI::AreaTriggerAI; + + void OnUnitEnter(Unit* unit) override + { + if (Unit* caster = at->GetCaster()) + if (caster->IsValidAttackTarget(unit)) + caster->CastSpell(unit, SPELL_MAGE_METEOR_BURN_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); + } + + void OnUnitExit(Unit* unit) override + { + unit->RemoveAurasDueToSpell(SPELL_MAGE_METEOR_BURN_DAMAGE, at->GetCasterGuid()); + } +}; + enum SilvermoonPolymorph { NPC_AUROSALIA = 18744 @@ -1578,6 +1635,9 @@ void AddSC_mage_spell_scripts() RegisterSpellScript(spell_mage_living_bomb); RegisterSpellScript(spell_mage_living_bomb_explosion); RegisterSpellScript(spell_mage_living_bomb_periodic); + RegisterSpellScript(spell_mage_meteor); + RegisterAreaTriggerAI(at_mage_meteor); + RegisterAreaTriggerAI(at_mage_meteor_burn); RegisterSpellScript(spell_mage_polymorph_visual); RegisterSpellScript(spell_mage_prismatic_barrier); RegisterSpellScript(spell_mage_radiant_spark); |