From 0640dc97c7d2a5f61246d1663dd111db49d48470 Mon Sep 17 00:00:00 2001 From: Ovah Date: Thu, 30 Nov 2017 13:10:23 +0000 Subject: [PATCH] Core/Spells: fixed mage Early Frost talent --- .../world/4.3.4/2017_11_30_12_world.sql | 5 ++ src/server/scripts/Spells/spell_mage.cpp | 72 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 sql/updates/world/4.3.4/2017_11_30_12_world.sql diff --git a/sql/updates/world/4.3.4/2017_11_30_12_world.sql b/sql/updates/world/4.3.4/2017_11_30_12_world.sql new file mode 100644 index 00000000000..f0c1be6909e --- /dev/null +++ b/sql/updates/world/4.3.4/2017_11_30_12_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_mage_early_frost'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(83162, 'spell_mage_early_frost'), +(83239, 'spell_mage_early_frost'); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 9aa8f3cd5e3..6c4d1f21059 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -44,6 +44,11 @@ enum MageSpells SPELL_MAGE_BLAZING_SPEED = 31643, SPELL_MAGE_BURNOUT = 29077, SPELL_MAGE_COLD_SNAP = 11958, + SPELL_MAGE_EARLY_FROST_R1 = 83049, + SPELL_MAGE_EARLY_FROST_R2 = 83050, + SPELL_MAGE_EARLY_FROST_TRIGGERED_R1 = 83162, + SPELL_MAGE_EARLY_FROST_TRIGGERED_R2 = 83239, + SPELL_MAGE_EARLY_FROST_VISUAL = 94315, SPELL_MAGE_FOCUS_MAGIC_PROC = 54648, SPELL_MAGE_FROST_NOVA = 122, SPELL_MAGE_FROST_WARDING_R1 = 11189, @@ -101,6 +106,8 @@ enum MageIcons ICON_MAGE_IMPROVED_FREEZE = 94, ICON_MAGE_INCANTER_S_ABSORPTION = 2941, ICON_MAGE_IMPROVED_MANA_GEM = 1036, + ICON_MAGE_EARLY_FROST_SKILL = 189, + ICON_MAGE_EARLY_FROST = 2114, SPELL_ICON_MAGE_LIVING_BOMB = 3000 }; @@ -614,6 +621,37 @@ class spell_mage_frostbolt : public SpellScriptLoader { PrepareSpellScript(spell_mage_frostbolt_SpellScript); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_MAGE_EARLY_FROST_R1, + SPELL_MAGE_EARLY_FROST_R2, + SPELL_MAGE_EARLY_FROST_TRIGGERED_R1, + SPELL_MAGE_EARLY_FROST_TRIGGERED_R2, + SPELL_MAGE_EARLY_FROST_VISUAL + }); + } + + void HandleEarlyFrost() + { + if (Unit* caster = GetCaster()) + { + if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_MAGE, ICON_MAGE_EARLY_FROST_SKILL, 0)) + { + if (!caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_MAGE, ICON_MAGE_EARLY_FROST, 0)) + { + if (aurEff->GetId() == SPELL_MAGE_EARLY_FROST_R1) + caster->CastSpell(caster, SPELL_MAGE_EARLY_FROST_TRIGGERED_R1, true); + else if (aurEff->GetId() == SPELL_MAGE_EARLY_FROST_R2) + caster->CastSpell(caster, SPELL_MAGE_EARLY_FROST_TRIGGERED_R2, true); + + caster->RemoveAurasDueToSpell(SPELL_MAGE_EARLY_FROST_VISUAL); + } + } + } + } + void RecalculateDamage(SpellEffIndex /*effIndex*/) { if (GetHitUnit() && GetHitUnit()->HasAuraState(AURA_STATE_FROZEN, GetSpellInfo(), GetCaster())) @@ -629,6 +667,7 @@ class spell_mage_frostbolt : public SpellScriptLoader void Register() { + OnCast += SpellCastFn(spell_mage_frostbolt_SpellScript::HandleEarlyFrost); OnEffectHitTarget += SpellEffectFn(spell_mage_frostbolt_SpellScript::RecalculateDamage, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); } }; @@ -1609,6 +1648,38 @@ public: } }; +class spell_mage_early_frost : public SpellScriptLoader +{ +public: + spell_mage_early_frost() : SpellScriptLoader("spell_mage_early_frost") { } + + class spell_mage_early_frost_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_early_frost_AuraScript); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ SPELL_MAGE_EARLY_FROST_VISUAL }); + } + + void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->CastSpell(caster, SPELL_MAGE_EARLY_FROST_VISUAL , true, NULL, aurEff); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_early_frost_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_mage_early_frost_AuraScript(); + } +}; + void AddSC_mage_spell_scripts() { new spell_mage_arcane_potency(); @@ -1619,6 +1690,7 @@ void AddSC_mage_spell_scripts() new spell_mage_cone_of_cold(); new spell_mage_conjure_refreshment(); RegisterAuraScript(spell_mage_dragon_breath); + new spell_mage_early_frost(); new spell_mage_fire_frost_ward(); new spell_mage_focus_magic(); new spell_mage_frostbolt();