diff options
author | Shocker <shocker@freakz.ro> | 2011-11-26 14:36:55 -0800 |
---|---|---|
committer | Shocker <shocker@freakz.ro> | 2011-11-26 14:36:55 -0800 |
commit | 6cd61ce730dd37ef96c94b8d56c6959b5354cb29 (patch) | |
tree | 69d0eb5fa0485cd408a79d7b31ef4b98c169e686 | |
parent | 9bea8708a77c0d8b23c4040d6d03a3479dec0c07 (diff) | |
parent | 61866831caca9f2c980e518bf6b0b8b8691ad151 (diff) |
Merge pull request #4093 from PKX/fix_damage_taken_buffs
Core/Spells: Fix Damage Taken for Blessing of Sanctuary, Renewed Hope and Vigilance
-rw-r--r-- | sql/updates/world/2011_11_27_00_world_spell_script.sql | 6 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 64 |
2 files changed, 70 insertions, 0 deletions
diff --git a/sql/updates/world/2011_11_27_00_world_spell_script.sql b/sql/updates/world/2011_11_27_00_world_spell_script.sql new file mode 100644 index 00000000000..2919c3e6538 --- /dev/null +++ b/sql/updates/world/2011_11_27_00_world_spell_script.sql @@ -0,0 +1,6 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_damage_reduction_aura'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(20911,'spell_gen_damage_reduction_aura'), -- Blessing of Sanctuary +(25899,'spell_gen_damage_reduction_aura'), -- Greater Blessing of Sanctuary +(63944,'spell_gen_damage_reduction_aura'), -- Renewed Hope +(50720,'spell_gen_damage_reduction_aura'); -- Vigilance
\ No newline at end of file diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index f0b48a5ad90..90abf2073ee 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1359,6 +1359,69 @@ public: } }; +enum DamageReductionAura +{ + SPELL_BLESSING_OF_SANCTUARY = 20911, + SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899, + SPELL_RENEWED_HOPE = 63944, + SPELL_VIGILANCE = 50720, + SPELL_DAMAGE_REDUCTION_AURA = 68066, +}; + +class spell_gen_damage_reduction_aura : public SpellScriptLoader +{ +public: + spell_gen_damage_reduction_aura() : SpellScriptLoader("spell_gen_damage_reduction_aura") { } + + class spell_gen_damage_reduction_auraScript : public AuraScript + { + PrepareAuraScript(spell_gen_damage_reduction_auraScript); + + bool Validate(SpellInfo const* /*SpellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA)) + return false; + return true; + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (!target || target->HasAura(SPELL_DAMAGE_REDUCTION_AURA)) + return; + + target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true); + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (!target || !target->HasAura(SPELL_DAMAGE_REDUCTION_AURA)) + return; + + if (target->HasAura(SPELL_BLESSING_OF_SANCTUARY) || + target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) || + target->HasAura(SPELL_RENEWED_HOPE) || + target->HasAura(SPELL_VIGILANCE)) + return; + + target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA); + } + + void Register() + { + OnEffectApply += AuraEffectApplyFn(spell_gen_damage_reduction_auraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_gen_damage_reduction_auraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + + }; + + AuraScript* GetAuraScript() const + { + return new spell_gen_damage_reduction_auraScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -1390,4 +1453,5 @@ void AddSC_generic_spell_scripts() new spell_gen_launch(); new spell_gen_vehicle_scaling(); new spell_gen_oracle_wolvar_reputation(); + new spell_gen_damage_reduction_aura(); } |