diff options
| author | Vincent-Michael <Vincent_Michael@gmx.de> | 2013-07-17 00:42:46 +0200 | 
|---|---|---|
| committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2013-07-17 00:42:46 +0200 | 
| commit | 187878f9c4da4fcc9fc373e72c7aa6c55d40c0e2 (patch) | |
| tree | acd714d7da948001627d83c49a9558ba64543d1c /src | |
| parent | 8edbc2152e6f8afa7c98e3b836948b280609b63b (diff) | |
Core/Spells: Update warrior/utgarde keep "Second Wind" for 4.3.4
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 23 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp | 51 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 90 | 
3 files changed, 141 insertions, 23 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index df871820bc2..5c4e415d5d2 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5528,29 +5528,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere                  triggered_spell_id = 22858;                  break;              } -            // Second Wind -            if (dummySpell->SpellIconID == 1697) -            { -                // only for spells and hit/crit (trigger start always) and not start from self casted spells (5530 Mace Stun Effect for example) -                if (procSpell == 0 || !(procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) || this == victim) -                    return false; -                // Need stun or root mechanic -                if (!(procSpell->GetAllEffectsMechanicMask() & ((1<<MECHANIC_ROOT)|(1<<MECHANIC_STUN)))) -                    return false; - -                switch (dummySpell->Id) -                { -                    case 29838: triggered_spell_id=29842; break; -                    case 29834: triggered_spell_id=29841; break; -                    case 42770: triggered_spell_id=42771; break; -                    default: -                        TC_LOG_ERROR(LOG_FILTER_UNITS, "Unit::HandleDummyAuraProc: non handled spell id: %u (SW)", dummySpell->Id); -                    return false; -                } - -                target = this; -                break; -            }              // Glyph of Sunder Armor              if (dummySpell->Id == 58387)              { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 9c086d8bd81..1cd0fde4107 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -21,6 +21,11 @@  #include "SpellScript.h"  #include "SpellAuraEffects.h" +enum Spells +{ +    SPELL_UK_SECOUND_WIND_TRIGGER    = 42771 +}; +  uint32 entry_search[3] =  {      186609, @@ -337,10 +342,56 @@ public:      }  }; +class spell_uk_second_wind_proc : public SpellScriptLoader +{ +    public: +        spell_uk_second_wind_proc() : SpellScriptLoader("spell_uk_second_wind_proc") { } + +        class spell_uk_second_wind_proc_AuraScript : public AuraScript +        { +            PrepareAuraScript(spell_uk_second_wind_proc_AuraScript); + +            bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_UK_SECOUND_WIND_TRIGGER)) +                    return false; +                return true; +            } + +            bool CheckProc(ProcEventInfo& eventInfo) +            { +                if (eventInfo.GetProcTarget() == GetTarget()) +                    return false; +                if (!(eventInfo.GetDamageInfo() || eventInfo.GetDamageInfo()->GetSpellInfo()->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_STUN)))) +                    return false; +                return true; +            } + +            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) +            { +                PreventDefaultAction(); +                GetTarget()->CastCustomSpell(SPELL_UK_SECOUND_WIND_TRIGGER, SPELLVALUE_BASE_POINT0, 5, GetTarget(), true, NULL, aurEff); +            } + +            void Register() OVERRIDE +            { +                DoCheckProc += AuraCheckProcFn(spell_uk_second_wind_proc_AuraScript::CheckProc); +                OnEffectProc += AuraEffectProcFn(spell_uk_second_wind_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +            } + +        }; + +        AuraScript* GetAuraScript() const OVERRIDE +        { +            return new spell_uk_second_wind_proc_AuraScript(); +        } +}; +  void AddSC_utgarde_keep()  {      new npc_dragonflayer_forge_master();      new npc_enslaved_proto_drake();      new spell_ticking_time_bomb();      new spell_fixate(); +    new spell_uk_second_wind_proc();  } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index ad1decb02a8..691264015a1 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -42,6 +42,10 @@ enum WarriorSpells      SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT      = 64976,      SPELL_WARRIOR_LAST_STAND_TRIGGERED              = 12976,      SPELL_WARRIOR_RALLYING_CRY                      = 97463, +    SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_1          = 29834, +    SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_2          = 29838, +    SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_1       = 29841, +    SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_2       = 29842,      SPELL_WARRIOR_SLAM                              = 50782,      SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK     = 26654,      SPELL_WARRIOR_TAUNT                             = 355, @@ -590,6 +594,90 @@ class spell_warr_slam : public SpellScriptLoader          }  }; +class spell_warr_second_wind_proc : public SpellScriptLoader +{ +    public: +        spell_warr_second_wind_proc() : SpellScriptLoader("spell_warr_second_wind_proc") { } + +        class spell_warr_second_wind_proc_AuraScript : public AuraScript +        { +            PrepareAuraScript(spell_warr_second_wind_proc_AuraScript); + +            bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_1) || +                    !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_2) || +                    !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_1) || +                    !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_2)) +                    return false; +                return true; +            } + +            bool CheckProc(ProcEventInfo& eventInfo) +            { +                if (eventInfo.GetProcTarget() == GetTarget()) +                    return false; +                if (!(eventInfo.GetDamageInfo() || eventInfo.GetDamageInfo()->GetSpellInfo()->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_STUN)))) +                    return false; +                return true; +            } + +            void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) +            { +                PreventDefaultAction(); +                uint32 spellId = 0; + +                if (GetSpellInfo()->Id == SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_1) +                    spellId = SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_1; +                else if (GetSpellInfo()->Id == SPELL_WARRIOR_SECOUND_WIND_PROC_RANK_2) +                    spellId = SPELL_WARRIOR_SECOUND_WIND_TRIGGER_RANK_2; +                if (!spellId) +                    return; + +                GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff); + +            } + +            void Register() OVERRIDE +            { +                DoCheckProc += AuraCheckProcFn(spell_warr_second_wind_proc_AuraScript::CheckProc); +                OnEffectProc += AuraEffectProcFn(spell_warr_second_wind_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); +            } + +        }; + +        AuraScript* GetAuraScript() const OVERRIDE +        { +            return new spell_warr_second_wind_proc_AuraScript(); +        } +}; + +class spell_warr_second_wind_trigger : public SpellScriptLoader +{ +    public: +        spell_warr_second_wind_trigger() : SpellScriptLoader("spell_warr_second_wind_trigger") { } + +        class spell_warr_second_wind_trigger_AuraScript : public AuraScript +        { +            PrepareAuraScript(spell_warr_second_wind_trigger_AuraScript); + +            void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) +            { +                amount = int32(GetUnitOwner()->CountPctFromMaxHealth(amount)); +            } + +            void Register() OVERRIDE +            { +                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_second_wind_trigger_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_PERIODIC_HEAL); +            } +        }; + +        AuraScript* GetAuraScript() const OVERRIDE +        { +            return new spell_warr_second_wind_trigger_AuraScript(); +        } +}; +  // 12328, 18765, 35429 - Sweeping Strikes  class spell_warr_sweeping_strikes : public SpellScriptLoader  { @@ -780,6 +868,8 @@ void AddSC_warrior_spell_scripts()      new spell_warr_overpower();      new spell_warr_rallying_cry();      new spell_warr_rend(); +    new spell_warr_second_wind_proc(); +    new spell_warr_second_wind_trigger();      new spell_warr_shattering_throw();      new spell_warr_slam();      new spell_warr_sweeping_strikes();  | 
