aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAqua Deus <95978183+aquadeus@users.noreply.github.com>2025-06-29 23:03:56 +0200
committerGitHub <noreply@github.com>2025-06-29 23:03:56 +0200
commit9cc6cf45b62254f181da29a432b742179afa4ac6 (patch)
tree6a74011fea869ff2eafb8e296949e207ba08e6d0 /src
parent44b40191275db5a10d55100f7b4857741de83b41 (diff)
Scripts/Spells: Implement mage talent Meteor (#31094)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.cpp6
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp60
2 files changed, 66 insertions, 0 deletions
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);