diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Examples/example_spell.cpp | 11 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 94 |
3 files changed, 97 insertions, 10 deletions
diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp index 2a9d9a605c4..a62c53e413a 100644 --- a/src/server/scripts/Examples/example_spell.cpp +++ b/src/server/scripts/Examples/example_spell.cpp @@ -268,10 +268,9 @@ class spell_ex_66244 : public SpellScriptLoader { return new spell_ex_66244AuraScript(); } - - }; +// example usage of OnEffectAbsorb and AfterEffectAbsorb hooks class spell_ex_absorb_aura : public SpellScriptLoader { public: @@ -297,17 +296,11 @@ class spell_ex_absorb_aura : public SpellScriptLoader sLog->outString("Our aura has absorbed %u damage!", absorbAmount); } - /*void HandleAfterAbsorb(DamageInfo & dmgInfo) - { - sLog->outString("Our auras have just absorbed damage done to us!"); - }*/ - // function registering void Register() { OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0); AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0); - //AfterAbsorb += AuraAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterAbsorb); } }; @@ -318,6 +311,8 @@ class spell_ex_absorb_aura : public SpellScriptLoader } }; +// example usage of OnEffectManaShield and AfterEffectManaShield hooks +// see spell_ex_absorb_aura, these hooks work the same as OnEffectAbsorb and AfterEffectAbsorb // this function has to be added to function set in ScriptLoader.cpp void AddSC_example_spell_scripts() diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 35656dd9af4..e5a3f4b12a2 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -170,7 +170,7 @@ public: amount = SpellMgr::CalculateSpellEffectAmount(talentSpell, EFFECT_0, GetCaster()); // assume caster is a player here if (Unit * caster = GetCaster()) - amount += 2 * caster->ToPlayer()->GetTotalAttackPowerValue(BASE_ATTACK); + amount += int32(2 * caster->ToPlayer()->GetTotalAttackPowerValue(BASE_ATTACK)); } void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index d4794e10b68..8c982d5ff39 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -209,7 +209,7 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader } }; -// Frost Ward and Fire Ward +// Frost Warding class spell_mage_frost_warding_trigger : public SpellScriptLoader { public: @@ -259,11 +259,103 @@ public: } }; +// Incanter's Absorption +class spell_mage_incanters_absorbtion_absorb : public SpellScriptLoader +{ +public: + spell_mage_incanters_absorbtion_absorb() : SpellScriptLoader("spell_mage_incanters_absorbtion_absorb") { } + + class spell_mage_incanters_absorbtion_absorb_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_incanters_absorbtion_absorb_AuraScript); + + enum Spells + { + SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413, + SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394, + }; + + bool Validate(SpellEntry const * /*spellEntry*/) + { + return sSpellStore.LookupEntry(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED) + && sSpellStore.LookupEntry(SPELL_MAGE_INCANTERS_ABSORBTION_R1); + } + + void Trigger(AuraEffect * aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount) + { + Unit * target = GetTarget(); + + if (AuraEffect * talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_INCANTERS_ABSORBTION_R1, EFFECT_0)) + { + int32 bp = CalculatePctN(absorbAmount, talentAurEff->GetAmount()); + target->CastCustomSpell(target, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); + } + } + + void Register() + { + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_incanters_absorbtion_absorb_AuraScript::Trigger, EFFECT_0); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_mage_incanters_absorbtion_absorb_AuraScript(); + } +}; + +// Incanter's Absorption +class spell_mage_incanters_absorbtion_manashield : public SpellScriptLoader +{ +public: + spell_mage_incanters_absorbtion_manashield() : SpellScriptLoader("spell_mage_incanters_absorbtion_manashield") { } + + class spell_mage_incanters_absorbtion_manashield_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_incanters_absorbtion_manashield_AuraScript); + + enum Spells + { + SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413, + SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394, + }; + + bool Validate(SpellEntry const * /*spellEntry*/) + { + return sSpellStore.LookupEntry(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED) + && sSpellStore.LookupEntry(SPELL_MAGE_INCANTERS_ABSORBTION_R1); + } + + void Trigger(AuraEffect * aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount) + { + Unit * target = GetTarget(); + + if (AuraEffect * talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_INCANTERS_ABSORBTION_R1, EFFECT_0)) + { + int32 bp = CalculatePctN(absorbAmount, talentAurEff->GetAmount()); + target->CastCustomSpell(target, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); + } + } + + void Register() + { + AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_incanters_absorbtion_manashield_AuraScript::Trigger, EFFECT_0); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_mage_incanters_absorbtion_manashield_AuraScript(); + } +}; + void AddSC_mage_spell_scripts() { new spell_mage_blast_wave; new spell_mage_cold_snap; new spell_mage_frost_warding_trigger(); + new spell_mage_incanters_absorbtion_absorb(); + new spell_mage_incanters_absorbtion_manashield(); new spell_mage_polymorph_cast_visual; new spell_mage_summon_water_elemental; } |
