aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2021_03_13_00_world_mage_fingers_of_frost.sql7
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp37
2 files changed, 44 insertions, 0 deletions
diff --git a/sql/updates/world/master/2021_03_13_00_world_mage_fingers_of_frost.sql b/sql/updates/world/master/2021_03_13_00_world_mage_fingers_of_frost.sql
new file mode 100644
index 00000000000..72857299ccc
--- /dev/null
+++ b/sql/updates/world/master/2021_03_13_00_world_mage_fingers_of_frost.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_mage_fingers_of_frost';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(112965,'spell_mage_fingers_of_frost');
+
+DELETE FROM `spell_proc` WHERE `SpellId`=112965;
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(112965,0,3,0,0x2000000,0x80,0,0x10000,0,0x1,0,0,0,0,100,0,0); -- Fingers of Frost, proc on launch of Frostbolt and Frozen Orb
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 5e0cd6e682b..8dc3e31f781 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -278,6 +278,42 @@ class spell_mage_conjure_refreshment : public SpellScript
}
};
+// 112965 - Fingers of Frost
+class spell_mage_fingers_of_frost : public AuraScript
+{
+ PrepareAuraScript(spell_mage_fingers_of_frost);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_FINGERS_OF_FROST });
+ }
+
+ bool CheckFrostboltProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ return eventInfo.GetSpellInfo() && eventInfo.GetSpellInfo()->IsAffected(SPELLFAMILY_MAGE, flag128(0, 0x2000000, 0, 0))
+ && roll_chance_i(aurEff->GetAmount());
+ }
+
+ bool CheckFrozenOrbProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ return eventInfo.GetSpellInfo() && eventInfo.GetSpellInfo()->IsAffected(SPELLFAMILY_MAGE, flag128(0, 0, 0x80, 0))
+ && roll_chance_i(aurEff->GetAmount());
+ }
+
+ void Trigger(AuraEffect* aurEff, ProcEventInfo& eventInfo)
+ {
+ eventInfo.GetActor()->CastSpell(GetTarget(), SPELL_MAGE_FINGERS_OF_FROST, true, nullptr, aurEff);
+ }
+
+ void Register() override
+ {
+ DoCheckEffectProc += AuraCheckEffectProcFn(spell_mage_fingers_of_frost::CheckFrostboltProc, EFFECT_0, SPELL_AURA_DUMMY);
+ DoCheckEffectProc += AuraCheckEffectProcFn(spell_mage_fingers_of_frost::CheckFrozenOrbProc, EFFECT_1, SPELL_AURA_DUMMY);
+ AfterEffectProc += AuraEffectProcFn(spell_mage_fingers_of_frost::Trigger, EFFECT_0, SPELL_AURA_DUMMY);
+ AfterEffectProc += AuraEffectProcFn(spell_mage_fingers_of_frost::Trigger, EFFECT_1, SPELL_AURA_DUMMY);
+ }
+};
+
// 11426 - Ice Barrier
class spell_mage_ice_barrier : public AuraScript
{
@@ -831,6 +867,7 @@ void AddSC_mage_spell_scripts()
RegisterSpellScript(spell_mage_cold_snap);
RegisterSpellScript(spell_mage_cone_of_cold);
RegisterSpellScript(spell_mage_conjure_refreshment);
+ RegisterAuraScript(spell_mage_fingers_of_frost);
RegisterAuraScript(spell_mage_ice_barrier);
RegisterSpellScript(spell_mage_ice_lance);
RegisterSpellScript(spell_mage_ice_lance_damage);