diff options
| -rw-r--r-- | sql/updates/world/2013_07_26_00_world_spell_script_names_434.sql | 2 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 70 |
2 files changed, 70 insertions, 2 deletions
diff --git a/sql/updates/world/2013_07_26_00_world_spell_script_names_434.sql b/sql/updates/world/2013_07_26_00_world_spell_script_names_434.sql index ecfaf2e6a2f..0167401a42d 100644 --- a/sql/updates/world/2013_07_26_00_world_spell_script_names_434.sql +++ b/sql/updates/world/2013_07_26_00_world_spell_script_names_434.sql @@ -1 +1,3 @@ DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_warr_vigilance'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(50720, 'spell_warr_vigilance'); diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 6105f882d72..c2b7c1950bd 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -38,7 +38,6 @@ enum WarriorSpells SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC = 12721, SPELL_WARRIOR_EXECUTE = 20647, SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367, - SPELL_WARRIOR_GLYPH_OF_VIGILANCE = 63326, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF = 65156, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT = 64976, SPELL_WARRIOR_LAST_STAND_TRIGGERED = 12976, @@ -56,7 +55,9 @@ enum WarriorSpells SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1 = 46859, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849, - SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850 + SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850, + SPELL_WARRIOR_VIGILANCE_PROC = 50725, + SPELL_WARRIOR_VENGEANCE = 76691 }; enum MiscSpells @@ -926,6 +927,70 @@ class spell_warr_victorious : public SpellScriptLoader } }; +// 50720 - Vigilance +class spell_warr_vigilance : public SpellScriptLoader +{ + public: + spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { } + + class spell_warr_vigilance_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warr_vigilance_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_VENGEANCE)) + return false; + return true; + } + + bool Load() OVERRIDE + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + _procTarget = GetCaster(); + return _procTarget && eventInfo.GetDamageInfo(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 damage = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue())); + + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, NULL, aurEff); + _procTarget->CastCustomSpell(_procTarget, SPELL_WARRIOR_VENGEANCE, &damage, &damage, &damage, true, NULL, aurEff); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + { + if (caster->HasAura(SPELL_WARRIOR_VENGEANCE)) + caster->RemoveAurasDueToSpell(SPELL_WARRIOR_VENGEANCE); + } + } + + void Register() OVERRIDE + { + DoCheckProc += AuraCheckProcFn(spell_warr_vigilance_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_warr_vigilance_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_warr_vigilance_AuraScript(); + } +}; + // 50725 Vigilance class spell_warr_vigilance_trigger : public SpellScriptLoader { @@ -981,5 +1046,6 @@ void AddSC_warrior_spell_scripts() new spell_warr_sweeping_strikes(); new spell_warr_sword_and_board(); new spell_warr_victorious(); + new spell_warr_vigilance(); new spell_warr_vigilance_trigger(); } |
