diff options
| author | Vincent_Michael <Vincent_Michael@gmx.de> | 2013-01-13 01:25:56 +0100 | 
|---|---|---|
| committer | Vincent_Michael <Vincent_Michael@gmx.de> | 2013-01-13 01:25:56 +0100 | 
| commit | b08ea19affc7818af33a0af5cbf03eae7de362a5 (patch) | |
| tree | 08454bd226548e1fabb348126c7ed77bad7916f7 /src/server/scripts/Spells | |
| parent | 7fbd6d33dd9546fffe81aa241463af005b3dd7d1 (diff) | |
| parent | abe4b656c8775c2fe25649e83c135510442dc2b8 (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into mmaps
Diffstat (limited to 'src/server/scripts/Spells')
| -rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 76 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 276 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 539 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 502 | 
5 files changed, 700 insertions, 695 deletions
| diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index a0307f994c9..6dd453597de 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -29,18 +29,19 @@  enum DruidSpells  { -    DRUID_INCREASED_MOONFIRE_DURATION   = 38414, -    DRUID_NATURES_SPLENDOR              = 57865, -    DRUID_LIFEBLOOM_FINAL_HEAL          = 33778, -    DRUID_LIFEBLOOM_ENERGIZE            = 64372, -    DRUID_SURVIVAL_INSTINCTS            = 50322, -    DRUID_SAVAGE_ROAR                   = 62071, -    SPELL_DRUID_ITEM_T8_BALANCE_RELIC   = 64950, -    SPELL_KING_OF_THE_JUNGLE            = 48492, -    SPELL_TIGER_S_FURY_ENERGIZE         = 51178, -    SPELL_ENRAGE_MOD_DAMAGE             = 51185, +    SPELL_DRUID_ENRAGE_MOD_DAMAGE           = 51185, +    SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, +    SPELL_DRUID_KING_OF_THE_JUNGLE          = 48492, +    SPELL_DRUID_LIFEBLOOM_ENERGIZE          = 64372, +    SPELL_DRUID_LIFEBLOOM_FINAL_HEAL        = 33778, +    SPELL_DRUID_NATURES_SPLENDOR            = 57865, +    SPELL_DRUID_SURVIVAL_INSTINCTS          = 50322, +    SPELL_DRUID_SAVAGE_ROAR                 = 62071, +    SPELL_DRUID_TIGER_S_FURY_ENERGIZE       = 51178, +    SPELL_DRUID_ITEM_T8_BALANCE_RELIC       = 64950,  }; +// -5229 - Enrage  class spell_dru_enrage : public SpellScriptLoader  {      public: @@ -52,8 +53,8 @@ class spell_dru_enrage : public SpellScriptLoader              void OnHit()              { -                if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_KING_OF_THE_JUNGLE, EFFECT_0)) -                    GetHitUnit()->CastCustomSpell(SPELL_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true); +                if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0)) +                    GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);              }              void Register() @@ -68,7 +69,7 @@ class spell_dru_enrage : public SpellScriptLoader          }  }; -// 54846 Glyph of Starfire +// 54846 - Glyph of Starfire  class spell_dru_glyph_of_starfire : public SpellScriptLoader  {      public: @@ -78,9 +79,9 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader          {              PrepareSpellScript(spell_dru_glyph_of_starfire_SpellScript); -            bool Validate(SpellInfo const* /*spellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(DRUID_INCREASED_MOONFIRE_DURATION) || !sSpellMgr->GetSpellInfo(DRUID_NATURES_SPLENDOR)) +                if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_INCREASED_MOONFIRE_DURATION) || !sSpellMgr->GetSpellInfo(SPELL_DRUID_NATURES_SPLENDOR))                      return false;                  return true;              } @@ -95,9 +96,9 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader                          uint32 countMin = aura->GetMaxDuration();                          uint32 countMax = aura->GetSpellInfo()->GetMaxDuration() + 9000; -                        if (caster->HasAura(DRUID_INCREASED_MOONFIRE_DURATION)) +                        if (caster->HasAura(SPELL_DRUID_INCREASED_MOONFIRE_DURATION))                              countMax += 3000; -                        if (caster->HasAura(DRUID_NATURES_SPLENDOR)) +                        if (caster->HasAura(SPELL_DRUID_NATURES_SPLENDOR))                              countMax += 3000;                          if (countMin < countMax) @@ -120,6 +121,7 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader          }  }; +// -5570 - Insect Swarm  class spell_dru_insect_swarm : public SpellScriptLoader  {      public: @@ -148,6 +150,7 @@ class spell_dru_insect_swarm : public SpellScriptLoader          }  }; +// -33763 - Lifebloom  class spell_dru_lifebloom : public SpellScriptLoader  {      public: @@ -159,9 +162,9 @@ class spell_dru_lifebloom : public SpellScriptLoader              bool Validate(SpellInfo const* /*spell*/)              { -                if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_FINAL_HEAL)) +                if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL))                      return false; -                if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_ENERGIZE)) +                if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_ENERGIZE))                      return false;                  return true;              } @@ -180,15 +183,15 @@ class spell_dru_lifebloom : public SpellScriptLoader                      healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, stack);                      healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack); -                    GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); +                    GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());                      // restore mana                      int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2; -                    caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); +                    caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID());                      return;                  } -                GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); +                GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());              }              void HandleDispel(DispelInfo* dispelInfo) @@ -203,15 +206,15 @@ class spell_dru_lifebloom : public SpellScriptLoader                          {                              healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());                              healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges()); -                            target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID()); +                            target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());                              // restore mana                              int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * dispelInfo->GetRemovedCharges() / 2; -                            caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID()); +                            caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID());                              return;                          } -                        target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID()); +                        target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());                      }                  }              } @@ -273,6 +276,7 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader          }  }; +// -16972 - Predatory Strikes  class spell_dru_predatory_strikes : public SpellScriptLoader  {      public: @@ -388,6 +392,7 @@ class spell_dru_savage_defense : public SpellScriptLoader          }  }; +// 52610 - Savage Roar  class spell_dru_savage_roar : public SpellScriptLoader  {      public: @@ -418,7 +423,7 @@ class spell_dru_savage_roar : public SpellScriptLoader              bool Validate(SpellInfo const* /*spell*/)              { -                if (!sSpellMgr->GetSpellInfo(DRUID_SAVAGE_ROAR)) +                if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SAVAGE_ROAR))                      return false;                  return true;              } @@ -426,12 +431,12 @@ class spell_dru_savage_roar : public SpellScriptLoader              void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)              {                  Unit* target = GetTarget(); -                target->CastSpell(target, DRUID_SAVAGE_ROAR, true, NULL, aurEff, GetCasterGUID()); +                target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, true, NULL, aurEff, GetCasterGUID());              }              void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)              { -                GetTarget()->RemoveAurasDueToSpell(DRUID_SAVAGE_ROAR); +                GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR);              }              void Register() @@ -452,6 +457,7 @@ class spell_dru_savage_roar : public SpellScriptLoader          }  }; +// -50294 - Starfall (AOE)  class spell_dru_starfall_aoe : public SpellScriptLoader  {      public: @@ -478,6 +484,7 @@ class spell_dru_starfall_aoe : public SpellScriptLoader          }  }; +// -50286 - Starfall (Dummy)  class spell_dru_starfall_dummy : public SpellScriptLoader  {      public: @@ -523,6 +530,7 @@ class spell_dru_starfall_dummy : public SpellScriptLoader          }  }; +// 61336 - Survival Instincts  class spell_dru_survival_instincts : public SpellScriptLoader  {      public: @@ -553,7 +561,7 @@ class spell_dru_survival_instincts : public SpellScriptLoader              bool Validate(SpellInfo const* /*spell*/)              { -                if (!sSpellMgr->GetSpellInfo(DRUID_SURVIVAL_INSTINCTS)) +                if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SURVIVAL_INSTINCTS))                      return false;                  return true;              } @@ -562,12 +570,12 @@ class spell_dru_survival_instincts : public SpellScriptLoader              {                  Unit* target = GetTarget();                  int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount()); -                target->CastCustomSpell(target, DRUID_SURVIVAL_INSTINCTS, &bp0, NULL, NULL, true); +                target->CastCustomSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, &bp0, NULL, NULL, true);              }              void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)              { -                GetTarget()->RemoveAurasDueToSpell(DRUID_SURVIVAL_INSTINCTS); +                GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS);              }              void Register() @@ -622,6 +630,7 @@ class spell_dru_swift_flight_passive : public SpellScriptLoader          }  }; +// -5217 - Tiger's Fury  class spell_dru_tiger_s_fury : public SpellScriptLoader  {      public: @@ -633,8 +642,8 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader              void OnHit()              { -                if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_KING_OF_THE_JUNGLE, EFFECT_1)) -                    GetHitUnit()->CastCustomSpell(SPELL_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true); +                if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_1)) +                    GetHitUnit()->CastCustomSpell(SPELL_DRUID_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);              }              void Register() @@ -649,6 +658,7 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader          }  }; +// 70691 - Item T10 Restoration 4P Bonus  class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader  {      public: diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index cf10cfdab5c..61f0579190f 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -29,6 +29,10 @@  enum MageSpells  {      SPELL_MAGE_COLD_SNAP                         = 11958, +    SPELL_MAGE_FROST_WARDING_R1                  = 28332, +    SPELL_MAGE_FROST_WARDING_TRIGGERED           = 57776, +    SPELL_MAGE_INCANTERS_ABSORBTION_R1           = 44394, +    SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED    = 44413,      SPELL_MAGE_SQUIRREL_FORM                     = 32813,      SPELL_MAGE_GIRAFFE_FORM                      = 32816,      SPELL_MAGE_SERPENT_FORM                      = 32817, @@ -41,6 +45,7 @@ enum MageSpells      SPELL_MAGE_GLYPH_OF_BLAST_WAVE               = 62126,  }; +// -11113 - Blast Wave  class spell_mage_blast_wave : public SpellScriptLoader  {      public: @@ -50,7 +55,7 @@ class spell_mage_blast_wave : public SpellScriptLoader          {              PrepareSpellScript(spell_mage_blast_wave_SpellScript); -            bool Validate(SpellInfo const* /*spellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              {                  if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_BLAST_WAVE))                      return false; @@ -75,6 +80,7 @@ class spell_mage_blast_wave : public SpellScriptLoader          }  }; +// 11958 - Cold Snap  class spell_mage_cold_snap : public SpellScriptLoader  {      public: @@ -91,7 +97,6 @@ class spell_mage_cold_snap : public SpellScriptLoader              void HandleDummy(SpellEffIndex /*effIndex*/)              { -                  Player* caster = GetCaster()->ToPlayer();                  // immediately finishes the cooldown on Frost spells                  const SpellCooldowns& cm = caster->GetSpellCooldownMap(); @@ -112,7 +117,6 @@ class spell_mage_cold_snap : public SpellScriptLoader              void Register()              { -                // add dummy effect spell handler to Cold Snap                  OnEffectHit += SpellEffectFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          }; @@ -123,102 +127,7 @@ class spell_mage_cold_snap : public SpellScriptLoader          }  }; -enum SilvermoonPolymorph -{ -    NPC_AUROSALIA   = 18744, -}; - -// TODO: move out of here and rename - not a mage spell -class spell_mage_polymorph_cast_visual : public SpellScriptLoader -{ -    public: -        spell_mage_polymorph_cast_visual() : SpellScriptLoader("spell_mage_polymorph_visual") { } - -        class spell_mage_polymorph_cast_visual_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_mage_polymorph_cast_visual_SpellScript); - -            static const uint32 PolymorhForms[6]; - -            bool Validate(SpellInfo const* /*spellEntry*/) -            { -                // check if spell ids exist in dbc -                for (uint32 i = 0; i < 6; i++) -                    if (!sSpellMgr->GetSpellInfo(PolymorhForms[i])) -                        return false; -                return true; -            } - -            void HandleDummy(SpellEffIndex /*effIndex*/) -            { -                if (Unit* target = GetCaster()->FindNearestCreature(NPC_AUROSALIA, 30.0f)) -                    if (target->GetTypeId() == TYPEID_UNIT) -                        target->CastSpell(target, PolymorhForms[urand(0, 5)], true); -            } - -            void Register() -            { -                // add dummy effect spell handler to Polymorph visual -                OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); -            } -        }; - -        SpellScript* GetSpellScript() const -        { -            return new spell_mage_polymorph_cast_visual_SpellScript(); -        } -}; - -const uint32 spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_SpellScript::PolymorhForms[6] = -{ -    SPELL_MAGE_SQUIRREL_FORM, -    SPELL_MAGE_GIRAFFE_FORM, -    SPELL_MAGE_SERPENT_FORM, -    SPELL_MAGE_DRAGONHAWK_FORM, -    SPELL_MAGE_WORGEN_FORM, -    SPELL_MAGE_SHEEP_FORM -}; - -class spell_mage_summon_water_elemental : public SpellScriptLoader -{ -    public: -        spell_mage_summon_water_elemental() : SpellScriptLoader("spell_mage_summon_water_elemental") { } - -        class spell_mage_summon_water_elemental_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript); - -            bool Validate(SpellInfo const* /*spellEntry*/) -            { -                if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT)) -                    return false; -                return true; -            } - -            void HandleDummy(SpellEffIndex /*effIndex*/) -            { -                Unit* caster = GetCaster(); -                // Glyph of Eternal Water -                if (caster->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER)) -                    caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true); -                else -                    caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true); -            } - -            void Register() -            { -                // add dummy effect spell handler to Summon Water Elemental -                OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); -            } -        }; - -        SpellScript* GetSpellScript() const -        { -            return new spell_mage_summon_water_elemental_SpellScript(); -        } -}; - -// Frost Warding +// -543, -6143 - Frost Warding  class spell_mage_frost_warding_trigger : public SpellScriptLoader  {      public: @@ -228,13 +137,7 @@ class spell_mage_frost_warding_trigger : public SpellScriptLoader          {              PrepareAuraScript(spell_mage_frost_warding_trigger_AuraScript); -            enum Spells -            { -                SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776, -                SPELL_MAGE_FROST_WARDING_R1 = 28332, -            }; - -            bool Validate(SpellInfo const* /*spellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              {                  if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_R1))                      return false; @@ -274,13 +177,8 @@ class spell_mage_frost_warding_trigger : public SpellScriptLoader  class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript  {      public: -        enum Spells -        { -            SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413, -            SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394, -        }; -        bool Validate(SpellInfo const* /*spellEntry*/) +        bool Validate(SpellInfo const* /*spellInfo*/)          {              return sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED)                  && sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_R1); @@ -298,50 +196,51 @@ class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript          }  }; -// Incanter's Absorption +// -543, -6143, -11426 - Incanter's Absorption  class spell_mage_incanters_absorbtion_absorb : public SpellScriptLoader  { -public: -    spell_mage_incanters_absorbtion_absorb() : SpellScriptLoader("spell_mage_incanters_absorbtion_absorb") { } +    public: +        spell_mage_incanters_absorbtion_absorb() : SpellScriptLoader("spell_mage_incanters_absorbtion_absorb") { } + +        class spell_mage_incanters_absorbtion_absorb_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript +        { +            PrepareAuraScript(spell_mage_incanters_absorbtion_absorb_AuraScript); -    class spell_mage_incanters_absorbtion_absorb_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript -    { -        PrepareAuraScript(spell_mage_incanters_absorbtion_absorb_AuraScript); +            void Register() +            { +                 AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_incanters_absorbtion_absorb_AuraScript::Trigger, EFFECT_0); +            } +        }; -        void Register() +        AuraScript* GetAuraScript() const          { -             AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_incanters_absorbtion_absorb_AuraScript::Trigger, EFFECT_0); +            return new spell_mage_incanters_absorbtion_absorb_AuraScript();          } -    }; - -    AuraScript* GetAuraScript() const -    { -        return new spell_mage_incanters_absorbtion_absorb_AuraScript(); -    }  }; -// Incanter's Absorption +// -1463 - Incanter's Absorption  class spell_mage_incanters_absorbtion_manashield : public SpellScriptLoader  { -public: -    spell_mage_incanters_absorbtion_manashield() : SpellScriptLoader("spell_mage_incanters_absorbtion_manashield") { } +    public: +        spell_mage_incanters_absorbtion_manashield() : SpellScriptLoader("spell_mage_incanters_absorbtion_manashield") { } -    class spell_mage_incanters_absorbtion_manashield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript -    { -        PrepareAuraScript(spell_mage_incanters_absorbtion_manashield_AuraScript); +        class spell_mage_incanters_absorbtion_manashield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript +        { +            PrepareAuraScript(spell_mage_incanters_absorbtion_manashield_AuraScript); -        void Register() +            void Register() +            { +                 AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_incanters_absorbtion_manashield_AuraScript::Trigger, EFFECT_0); +            } +        }; + +        AuraScript* GetAuraScript() const          { -             AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_incanters_absorbtion_manashield_AuraScript::Trigger, EFFECT_0); +            return new spell_mage_incanters_absorbtion_manashield_AuraScript();          } -    }; - -    AuraScript* GetAuraScript() const -    { -        return new spell_mage_incanters_absorbtion_manashield_AuraScript(); -    }  }; +// -44457 - Living Bomb  class spell_mage_living_bomb : public SpellScriptLoader  {      public: @@ -380,6 +279,101 @@ class spell_mage_living_bomb : public SpellScriptLoader          }  }; +enum SilvermoonPolymorph +{ +    NPC_AUROSALIA   = 18744, +}; + +// TODO: move out of here and rename - not a mage spell +// 32826 - Polymorph (Visual) +class spell_mage_polymorph_cast_visual : public SpellScriptLoader +{ +    public: +        spell_mage_polymorph_cast_visual() : SpellScriptLoader("spell_mage_polymorph_visual") { } + +        class spell_mage_polymorph_cast_visual_SpellScript : public SpellScript +        { +            PrepareSpellScript(spell_mage_polymorph_cast_visual_SpellScript); + +            static const uint32 PolymorhForms[6]; + +            bool Validate(SpellInfo const* /*spellInfo*/) +            { +                // check if spell ids exist in dbc +                for (uint32 i = 0; i < 6; ++i) +                    if (!sSpellMgr->GetSpellInfo(PolymorhForms[i])) +                        return false; +                return true; +            } + +            void HandleDummy(SpellEffIndex /*effIndex*/) +            { +                if (Unit* target = GetCaster()->FindNearestCreature(NPC_AUROSALIA, 30.0f)) +                    if (target->GetTypeId() == TYPEID_UNIT) +                        target->CastSpell(target, PolymorhForms[urand(0, 5)], true); +            } + +            void Register() +            { +                OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +            } +        }; + +        SpellScript* GetSpellScript() const +        { +            return new spell_mage_polymorph_cast_visual_SpellScript(); +        } +}; + +const uint32 spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_SpellScript::PolymorhForms[6] = +{ +    SPELL_MAGE_SQUIRREL_FORM, +    SPELL_MAGE_GIRAFFE_FORM, +    SPELL_MAGE_SERPENT_FORM, +    SPELL_MAGE_DRAGONHAWK_FORM, +    SPELL_MAGE_WORGEN_FORM, +    SPELL_MAGE_SHEEP_FORM +}; + +// 31687 - Summon Water Elemental +class spell_mage_summon_water_elemental : public SpellScriptLoader +{ +    public: +        spell_mage_summon_water_elemental() : SpellScriptLoader("spell_mage_summon_water_elemental") { } + +        class spell_mage_summon_water_elemental_SpellScript : public SpellScript +        { +            PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript); + +            bool Validate(SpellInfo const* /*spellInfo*/) +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT)) +                    return false; +                return true; +            } + +            void HandleDummy(SpellEffIndex /*effIndex*/) +            { +                Unit* caster = GetCaster(); +                // Glyph of Eternal Water +                if (caster->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER)) +                    caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true); +                else +                    caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true); +            } + +            void Register() +            { +                OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +            } +        }; + +        SpellScript* GetSpellScript() const +        { +            return new spell_mage_summon_water_elemental_SpellScript(); +        } +}; +  void AddSC_mage_spell_scripts()  {      new spell_mage_blast_wave(); @@ -387,7 +381,7 @@ void AddSC_mage_spell_scripts()      new spell_mage_frost_warding_trigger();      new spell_mage_incanters_absorbtion_absorb();      new spell_mage_incanters_absorbtion_manashield(); +    new spell_mage_living_bomb();      new spell_mage_polymorph_cast_visual();      new spell_mage_summon_water_elemental(); -    new spell_mage_living_bomb();  } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 07d903c9587..d3fc86302e1 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -29,28 +29,28 @@  enum PaladinSpells  { -    PALADIN_SPELL_DIVINE_PLEA                    = 54428, -    PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF     = 67480, +    SPELL_PALADIN_DIVINE_PLEA                    = 54428, +    SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF     = 67480, -    PALADIN_SPELL_HOLY_SHOCK_R1                  = 20473, -    PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE           = 25912, -    PALADIN_SPELL_HOLY_SHOCK_R1_HEALING          = 25914, +    SPELL_PALADIN_HOLY_SHOCK_R1                  = 20473, +    SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE           = 25912, +    SPELL_PALADIN_HOLY_SHOCK_R1_HEALING          = 25914, -    SPELL_BLESSING_OF_LOWER_CITY_DRUID           = 37878, -    SPELL_BLESSING_OF_LOWER_CITY_PALADIN         = 37879, -    SPELL_BLESSING_OF_LOWER_CITY_PRIEST          = 37880, -    SPELL_BLESSING_OF_LOWER_CITY_SHAMAN          = 37881, +    SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID   = 37878, +    SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN = 37879, +    SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST  = 37880, +    SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN  = 37881, -    SPELL_DIVINE_STORM                           = 53385, -    SPELL_DIVINE_STORM_DUMMY                     = 54171, -    SPELL_DIVINE_STORM_HEAL                      = 54172, +    SPELL_PALADIN_DIVINE_STORM                   = 53385, +    SPELL_PALADIN_DIVINE_STORM_DUMMY             = 54171, +    SPELL_PALADIN_DIVINE_STORM_HEAL              = 54172, -    SPELL_FORBEARANCE                            = 25771, -    SPELL_AVENGING_WRATH_MARKER                  = 61987, -    SPELL_IMMUNE_SHIELD_MARKER                   = 61988, +    SPELL_PALADIN_FORBEARANCE                    = 25771, +    SPELL_PALADIN_AVENGING_WRATH_MARKER          = 61987, +    SPELL_PALADIN_IMMUNE_SHIELD_MARKER           = 61988, -    SPELL_HAND_OF_SACRIFICE                      = 6940, -    SPELL_DIVINE_SACRIFICE                       = 64205, +    SPELL_PALADIN_HAND_OF_SACRIFICE              = 6940, +    SPELL_PALADIN_DIVINE_SACRIFICE               = 64205,  };  // 31850 - Ardent Defender @@ -129,6 +129,7 @@ class spell_pal_ardent_defender : public SpellScriptLoader          }  }; +// 37877 - Blessing of Faith  class spell_pal_blessing_of_faith : public SpellScriptLoader  {      public: @@ -138,9 +139,9 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader          {              PrepareSpellScript(spell_pal_blessing_of_faith_SpellScript); -            bool Validate(SpellInfo const* /*spellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_DRUID) || !sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_PALADIN) || !sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_PRIEST) || !sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_SHAMAN)) +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN))                      return false;                  return true;              } @@ -152,11 +153,20 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader                      uint32 spell_id = 0;                      switch (unitTarget->getClass())                      { -                        case CLASS_DRUID:   spell_id = SPELL_BLESSING_OF_LOWER_CITY_DRUID; break; -                        case CLASS_PALADIN: spell_id = SPELL_BLESSING_OF_LOWER_CITY_PALADIN; break; -                        case CLASS_PRIEST:  spell_id = SPELL_BLESSING_OF_LOWER_CITY_PRIEST; break; -                        case CLASS_SHAMAN:  spell_id = SPELL_BLESSING_OF_LOWER_CITY_SHAMAN; break; -                        default: return;                    // ignore for non-healing classes +                        case CLASS_DRUID: +                            spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID; +                            break; +                        case CLASS_PALADIN: +                            spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN; +                            break; +                        case CLASS_PRIEST: +                            spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST; +                            break; +                        case CLASS_SHAMAN: +                            spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN; +                            break; +                        default: +                            return; // ignore for non-healing classes                      }                      Unit* caster = GetCaster();                      caster->CastSpell(caster, spell_id, true); @@ -165,7 +175,6 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader              void Register()              { -                // add dummy effect spell handler to Blessing of Faith                  OnEffectHitTarget += SpellEffectFn(spell_pal_blessing_of_faith_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          }; @@ -187,9 +196,9 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader          {              PrepareAuraScript(spell_pal_blessing_of_sanctuary_AuraScript); -            bool Validate(SpellInfo const* /*entry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF)) +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF))                      return false;                  return true;              } @@ -198,13 +207,13 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader              {                  Unit* target = GetTarget();                  if (Unit* caster = GetCaster()) -                    caster->CastSpell(target, PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, true); +                    caster->CastSpell(target, SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF, true);              }              void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)              {                  Unit* target = GetTarget(); -                target->RemoveAura(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID()); +                target->RemoveAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID());              }              void Register() @@ -220,141 +229,63 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader          }  }; -// 63521 Guarded by The Light -class spell_pal_guarded_by_the_light : public SpellScriptLoader -{ -    public: -        spell_pal_guarded_by_the_light() : SpellScriptLoader("spell_pal_guarded_by_the_light") { } - -        class spell_pal_guarded_by_the_light_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pal_guarded_by_the_light_SpellScript); - -            bool Validate(SpellInfo const* /*spellEntry*/) -            { -                if (!sSpellMgr->GetSpellInfo(PALADIN_SPELL_DIVINE_PLEA)) -                    return false; -                return true; -            } - -            void HandleScriptEffect(SpellEffIndex /*effIndex*/) -            { -                // Divine Plea -                if (Aura* aura = GetCaster()->GetAura(PALADIN_SPELL_DIVINE_PLEA)) -                    aura->RefreshDuration(); -            } - -            void Register() -            { -                OnEffectHitTarget += SpellEffectFn(spell_pal_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); -            } -        }; - -        SpellScript* GetSpellScript() const -        { -            return new spell_pal_guarded_by_the_light_SpellScript(); -        } -}; - -class spell_pal_holy_shock : public SpellScriptLoader +// 64205 - Divine Sacrifice +class spell_pal_divine_sacrifice : public SpellScriptLoader  {      public: -        spell_pal_holy_shock() : SpellScriptLoader("spell_pal_holy_shock") { } +        spell_pal_divine_sacrifice() : SpellScriptLoader("spell_pal_divine_sacrifice") { } -        class spell_pal_holy_shock_SpellScript : public SpellScript +        class spell_pal_divine_sacrifice_AuraScript : public AuraScript          { -            PrepareSpellScript(spell_pal_holy_shock_SpellScript); - -            bool Validate(SpellInfo const* spell) -            { -                if (!sSpellMgr->GetSpellInfo(PALADIN_SPELL_HOLY_SHOCK_R1)) -                    return false; - -                // can't use other spell than holy shock due to spell_ranks dependency -                if (sSpellMgr->GetFirstSpellInChain(PALADIN_SPELL_HOLY_SHOCK_R1) != sSpellMgr->GetFirstSpellInChain(spell->Id)) -                    return false; - -                uint8 rank = sSpellMgr->GetSpellRank(spell->Id); -                if (!sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank, true) || !sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, rank, true)) -                    return false; +            PrepareAuraScript(spell_pal_divine_sacrifice_AuraScript); -                return true; -            } +            uint32 groupSize, minHpPct; +            int32 remainingAmount; -            void HandleDummy(SpellEffIndex /*effIndex*/) +            bool Load()              { -                Unit* caster = GetCaster(); -                if (Unit* unitTarget = GetHitUnit()) -                { -                    uint8 rank = sSpellMgr->GetSpellRank(GetSpellInfo()->Id); -                    if (caster->IsFriendlyTo(unitTarget)) -                        caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, rank), true, 0); -                    else -                        caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank), true, 0); -                } -            } -            SpellCastResult CheckCast() -            { -                Unit* caster = GetCaster(); -                if (Unit* target = GetExplTargetUnit()) +                if (Unit* caster = GetCaster())                  { -                    if (!caster->IsFriendlyTo(target)) +                    if (caster->GetTypeId() == TYPEID_PLAYER)                      { -                        if (!caster->IsValidAttackTarget(target)) -                            return SPELL_FAILED_BAD_TARGETS; - -                        if (!caster->isInFront(target)) -                            return SPELL_FAILED_UNIT_NOT_INFRONT; +                        if (caster->ToPlayer()->GetGroup()) +                            groupSize = caster->ToPlayer()->GetGroup()->GetMembersCount(); +                        else +                            groupSize = 1;                      } -                } -                else -                    return SPELL_FAILED_BAD_TARGETS; -                return SPELL_CAST_OK; -            } +                    else +                        return false; -            void Register() -            { -                // add dummy effect spell handler to Holy Shock -                OnCheckCast += SpellCheckCastFn(spell_pal_holy_shock_SpellScript::CheckCast); -                OnEffectHitTarget += SpellEffectFn(spell_pal_holy_shock_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +                    remainingAmount = (caster->CountPctFromMaxHealth(GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster)) * groupSize); +                    minHpPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster); +                    return true; +                } +                return false;              } -        }; - -        SpellScript* GetSpellScript() const -        { -            return new spell_pal_holy_shock_SpellScript(); -        } -}; -class spell_pal_judgement_of_command : public SpellScriptLoader -{ -    public: -        spell_pal_judgement_of_command() : SpellScriptLoader("spell_pal_judgement_of_command") { } - -        class spell_pal_judgement_of_command_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_pal_judgement_of_command_SpellScript) -            void HandleDummy(SpellEffIndex /*effIndex*/) +            void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)              { -                if (Unit* unitTarget = GetHitUnit()) -                    if (SpellInfo const* spell_proto = sSpellMgr->GetSpellInfo(GetEffectValue())) -                        GetCaster()->CastSpell(unitTarget, spell_proto, true, NULL); +                remainingAmount -= splitAmount; +                // break when absorbed everything it could, or if the casters hp drops below 20% +                if (Unit* caster = GetCaster()) +                    if (remainingAmount <= 0 || (caster->GetHealthPct() < minHpPct)) +                        caster->RemoveAura(SPELL_PALADIN_DIVINE_SACRIFICE);              }              void Register()              { -                // add dummy effect spell handler to Judgement of Command -                OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_of_command_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +                OnEffectSplit += AuraEffectSplitFn(spell_pal_divine_sacrifice_AuraScript::Split, EFFECT_0);              }          }; -        SpellScript* GetSpellScript() const +        AuraScript* GetAuraScript() const          { -            return new spell_pal_judgement_of_command_SpellScript(); +            return new spell_pal_divine_sacrifice_AuraScript();          }  }; +// 53385 - Divine Storm  class spell_pal_divine_storm : public SpellScriptLoader  {      public: @@ -366,9 +297,9 @@ class spell_pal_divine_storm : public SpellScriptLoader              uint32 healPct; -            bool Validate(SpellInfo const* /* spell */) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM_DUMMY)) +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_DUMMY))                      return false;                  return true;              } @@ -382,7 +313,7 @@ class spell_pal_divine_storm : public SpellScriptLoader              void TriggerHeal()              {                  Unit* caster = GetCaster(); -                caster->CastCustomSpell(SPELL_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * healPct) / 100, caster, true); +                caster->CastCustomSpell(SPELL_PALADIN_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * healPct) / 100, caster, true);              }              void Register() @@ -397,6 +328,7 @@ class spell_pal_divine_storm : public SpellScriptLoader          }  }; +// 54171 - Divine Storm (Dummy)  class spell_pal_divine_storm_dummy : public SpellScriptLoader  {      public: @@ -406,9 +338,9 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader          {              PrepareSpellScript(spell_pal_divine_storm_dummy_SpellScript); -            bool Validate(SpellInfo const* /* spell */) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM_HEAL)) +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_HEAL))                      return false;                  return true;              } @@ -418,13 +350,13 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader                  _targetCount = targetList.size();              } -            void HandleDummy(SpellEffIndex /* effIndex */) +            void HandleDummy(SpellEffIndex /*effIndex*/)              {                  if (!_targetCount || ! GetHitUnit())                      return;                  int32 heal = GetEffectValue() / _targetCount; -                GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_DIVINE_STORM_HEAL, &heal, NULL, NULL, true); +                GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_PALADIN_DIVINE_STORM_HEAL, &heal, NULL, NULL, true);              }          private:              uint32 _targetCount; @@ -442,229 +374,314 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader          }  }; -class spell_pal_lay_on_hands : public SpellScriptLoader +// 33695 - Exorcism and Holy Wrath Damage +class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader  {      public: -        spell_pal_lay_on_hands() : SpellScriptLoader("spell_pal_lay_on_hands") { } +        spell_pal_exorcism_and_holy_wrath_damage() : SpellScriptLoader("spell_pal_exorcism_and_holy_wrath_damage") { } -        class spell_pal_lay_on_hands_SpellScript : public SpellScript +        class spell_pal_exorcism_and_holy_wrath_damage_AuraScript : public AuraScript          { -            PrepareSpellScript(spell_pal_lay_on_hands_SpellScript); +            PrepareAuraScript(spell_pal_exorcism_and_holy_wrath_damage_AuraScript); -            bool Validate(SpellInfo const* /*spell*/) +            void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_FORBEARANCE)) -                    return false; -                if (!sSpellMgr->GetSpellInfo(SPELL_AVENGING_WRATH_MARKER)) -                    return false; -                if (!sSpellMgr->GetSpellInfo(SPELL_IMMUNE_SHIELD_MARKER)) +                if (!spellMod) +                { +                    spellMod = new SpellModifier(aurEff->GetBase()); +                    spellMod->op = SPELLMOD_DAMAGE; +                    spellMod->type = SPELLMOD_FLAT; +                    spellMod->spellId = GetId(); +                    spellMod->mask[1] = 0x200002; +                } + +                spellMod->value = aurEff->GetAmount(); +            } + +            void Register() +            { +                DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_pal_exorcism_and_holy_wrath_damage_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); +            } +        }; + +        AuraScript* GetAuraScript() const +        { +            return new spell_pal_exorcism_and_holy_wrath_damage_AuraScript(); +        } +}; + +// 63521 - Guarded by The Light +class spell_pal_guarded_by_the_light : public SpellScriptLoader +{ +    public: +        spell_pal_guarded_by_the_light() : SpellScriptLoader("spell_pal_guarded_by_the_light") { } + +        class spell_pal_guarded_by_the_light_SpellScript : public SpellScript +        { +            PrepareSpellScript(spell_pal_guarded_by_the_light_SpellScript); + +            bool Validate(SpellInfo const* /*spellInfo*/) +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_PLEA))                      return false;                  return true;              } -            SpellCastResult CheckCast() +            void HandleScriptEffect(SpellEffIndex /*effIndex*/)              { -                Unit* caster = GetCaster(); -                if (Unit* target = GetExplTargetUnit()) -                    if (caster == target) -                        if (target->HasAura(SPELL_FORBEARANCE) || target->HasAura(SPELL_AVENGING_WRATH_MARKER) || target->HasAura(SPELL_IMMUNE_SHIELD_MARKER)) -                            return SPELL_FAILED_TARGET_AURASTATE; +                // Divine Plea +                if (Aura* aura = GetCaster()->GetAura(SPELL_PALADIN_DIVINE_PLEA)) +                    aura->RefreshDuration(); +            } -                return SPELL_CAST_OK; +            void Register() +            { +                OnEffectHitTarget += SpellEffectFn(spell_pal_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);              } +        }; -            void HandleScript() +        SpellScript* GetSpellScript() const +        { +            return new spell_pal_guarded_by_the_light_SpellScript(); +        } +}; + +// 6940 - Hand of Sacrifice +class spell_pal_hand_of_sacrifice : public SpellScriptLoader +{ +    public: +        spell_pal_hand_of_sacrifice() : SpellScriptLoader("spell_pal_hand_of_sacrifice") { } + +        class spell_pal_hand_of_sacrifice_AuraScript : public AuraScript +        { +            PrepareAuraScript(spell_pal_hand_of_sacrifice_AuraScript); + +            int32 remainingAmount; + +            bool Load()              { -                Unit* caster = GetCaster(); -                if (caster == GetHitUnit()) +                if (Unit* caster = GetCaster()) +                { +                    remainingAmount = caster->GetMaxHealth(); +                    return true; +                } +                return false; +            } + +            void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount) +            { +                remainingAmount -= splitAmount; + +                if (remainingAmount <= 0)                  { -                    caster->CastSpell(caster, SPELL_FORBEARANCE, true); -                    caster->CastSpell(caster, SPELL_AVENGING_WRATH_MARKER, true); -                    caster->CastSpell(caster, SPELL_IMMUNE_SHIELD_MARKER, true); +                    GetTarget()->RemoveAura(SPELL_PALADIN_HAND_OF_SACRIFICE);                  }              }              void Register()              { -                OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands_SpellScript::CheckCast); -                AfterHit += SpellHitFn(spell_pal_lay_on_hands_SpellScript::HandleScript); +                OnEffectSplit += AuraEffectSplitFn(spell_pal_hand_of_sacrifice_AuraScript::Split, EFFECT_0);              }          }; -        SpellScript* GetSpellScript() const +        AuraScript* GetAuraScript() const          { -            return new spell_pal_lay_on_hands_SpellScript(); +            return new spell_pal_hand_of_sacrifice_AuraScript();          }  }; -class spell_pal_righteous_defense : public SpellScriptLoader +// -20473 - Holy Shock +class spell_pal_holy_shock : public SpellScriptLoader  {      public: -        spell_pal_righteous_defense() : SpellScriptLoader("spell_pal_righteous_defense") { } +        spell_pal_holy_shock() : SpellScriptLoader("spell_pal_holy_shock") { } -        class spell_pal_righteous_defense_SpellScript : public SpellScript +        class spell_pal_holy_shock_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_pal_righteous_defense_SpellScript); +            PrepareSpellScript(spell_pal_holy_shock_SpellScript); -            SpellCastResult CheckCast() +            bool Validate(SpellInfo const* spell) +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_SHOCK_R1)) +                    return false; + +                // can't use other spell than holy shock due to spell_ranks dependency +                if (sSpellMgr->GetFirstSpellInChain(SPELL_PALADIN_HOLY_SHOCK_R1) != sSpellMgr->GetFirstSpellInChain(spell->Id)) +                    return false; + +                uint8 rank = sSpellMgr->GetSpellRank(spell->Id); +                if (!sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE, rank, true) || !sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_HEALING, rank, true)) +                    return false; + +                return true; +            } + +            void HandleDummy(SpellEffIndex /*effIndex*/)              {                  Unit* caster = GetCaster(); -                if (caster->GetTypeId() != TYPEID_PLAYER) -                    return SPELL_FAILED_DONT_REPORT; +                if (Unit* unitTarget = GetHitUnit()) +                { +                    uint8 rank = sSpellMgr->GetSpellRank(GetSpellInfo()->Id); +                    if (caster->IsFriendlyTo(unitTarget)) +                        caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_HEALING, rank), true, 0); +                    else +                        caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE, rank), true, 0); +                } +            } +            SpellCastResult CheckCast() +            { +                Unit* caster = GetCaster();                  if (Unit* target = GetExplTargetUnit())                  { -                    if (!target->IsFriendlyTo(caster) || target->getAttackers().empty()) -                        return SPELL_FAILED_BAD_TARGETS; +                    if (!caster->IsFriendlyTo(target)) +                    { +                        if (!caster->IsValidAttackTarget(target)) +                            return SPELL_FAILED_BAD_TARGETS; + +                        if (!caster->isInFront(target)) +                            return SPELL_FAILED_UNIT_NOT_INFRONT; +                    }                  }                  else                      return SPELL_FAILED_BAD_TARGETS; -                  return SPELL_CAST_OK;              }              void Register()              { -                OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast); +                OnCheckCast += SpellCheckCastFn(spell_pal_holy_shock_SpellScript::CheckCast); +                OnEffectHitTarget += SpellEffectFn(spell_pal_holy_shock_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_pal_righteous_defense_SpellScript(); +            return new spell_pal_holy_shock_SpellScript();          }  }; -class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader +// 20425 - Judgement of Command +class spell_pal_judgement_of_command : public SpellScriptLoader  {      public: -        spell_pal_exorcism_and_holy_wrath_damage() : SpellScriptLoader("spell_pal_exorcism_and_holy_wrath_damage") { } +        spell_pal_judgement_of_command() : SpellScriptLoader("spell_pal_judgement_of_command") { } -        class spell_pal_exorcism_and_holy_wrath_damage_AuraScript : public AuraScript +        class spell_pal_judgement_of_command_SpellScript : public SpellScript          { -            PrepareAuraScript(spell_pal_exorcism_and_holy_wrath_damage_AuraScript); +            PrepareSpellScript(spell_pal_judgement_of_command_SpellScript); -            void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod) +            void HandleDummy(SpellEffIndex /*effIndex*/)              { -                if (!spellMod) -                { -                    spellMod = new SpellModifier(aurEff->GetBase()); -                    spellMod->op = SPELLMOD_DAMAGE; -                    spellMod->type = SPELLMOD_FLAT; -                    spellMod->spellId = GetId(); -                    spellMod->mask[1] = 0x200002; -                } - -                spellMod->value = aurEff->GetAmount(); +                if (Unit* unitTarget = GetHitUnit()) +                    if (SpellInfo const* spell_proto = sSpellMgr->GetSpellInfo(GetEffectValue())) +                        GetCaster()->CastSpell(unitTarget, spell_proto, true, NULL);              }              void Register()              { -                DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_pal_exorcism_and_holy_wrath_damage_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); +                OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_of_command_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          }; -        AuraScript* GetAuraScript() const +        SpellScript* GetSpellScript() const          { -            return new spell_pal_exorcism_and_holy_wrath_damage_AuraScript(); +            return new spell_pal_judgement_of_command_SpellScript();          }  }; -class spell_pal_hand_of_sacrifice : public SpellScriptLoader +// -633 - Lay on Hands +class spell_pal_lay_on_hands : public SpellScriptLoader  {      public: -        spell_pal_hand_of_sacrifice() : SpellScriptLoader("spell_pal_hand_of_sacrifice") { } +        spell_pal_lay_on_hands() : SpellScriptLoader("spell_pal_lay_on_hands") { } -        class spell_pal_hand_of_sacrifice_AuraScript : public AuraScript +        class spell_pal_lay_on_hands_SpellScript : public SpellScript          { -            PrepareAuraScript(spell_pal_hand_of_sacrifice_AuraScript); - -            int32 remainingAmount; +            PrepareSpellScript(spell_pal_lay_on_hands_SpellScript); -            bool Load() +            bool Validate(SpellInfo const* /*spell*/)              { -                if (Unit* caster = GetCaster()) -                { -                    remainingAmount = caster->GetMaxHealth(); -                    return true; -                } -                return false; +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_FORBEARANCE)) +                    return false; +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_AVENGING_WRATH_MARKER)) +                    return false; +                if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_IMMUNE_SHIELD_MARKER)) +                    return false; +                return true;              } -            void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount) +            SpellCastResult CheckCast()              { -                remainingAmount -= splitAmount; +                Unit* caster = GetCaster(); +                if (Unit* target = GetExplTargetUnit()) +                    if (caster == target) +                        if (target->HasAura(SPELL_PALADIN_FORBEARANCE) || target->HasAura(SPELL_PALADIN_AVENGING_WRATH_MARKER) || target->HasAura(SPELL_PALADIN_IMMUNE_SHIELD_MARKER)) +                            return SPELL_FAILED_TARGET_AURASTATE; -                if (remainingAmount <= 0) +                return SPELL_CAST_OK; +            } + +            void HandleScript() +            { +                Unit* caster = GetCaster(); +                if (caster == GetHitUnit())                  { -                    GetTarget()->RemoveAura(SPELL_HAND_OF_SACRIFICE); +                    caster->CastSpell(caster, SPELL_PALADIN_FORBEARANCE, true); +                    caster->CastSpell(caster, SPELL_PALADIN_AVENGING_WRATH_MARKER, true); +                    caster->CastSpell(caster, SPELL_PALADIN_IMMUNE_SHIELD_MARKER, true);                  }              }              void Register()              { -                OnEffectSplit += AuraEffectSplitFn(spell_pal_hand_of_sacrifice_AuraScript::Split, EFFECT_0); +                OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands_SpellScript::CheckCast); +                AfterHit += SpellHitFn(spell_pal_lay_on_hands_SpellScript::HandleScript);              }          }; -        AuraScript* GetAuraScript() const +        SpellScript* GetSpellScript() const          { -            return new spell_pal_hand_of_sacrifice_AuraScript(); +            return new spell_pal_lay_on_hands_SpellScript();          }  }; -class spell_pal_divine_sacrifice : public SpellScriptLoader +// 31789 - Righteous Defense +class spell_pal_righteous_defense : public SpellScriptLoader  {      public: -        spell_pal_divine_sacrifice() : SpellScriptLoader("spell_pal_divine_sacrifice") { } +        spell_pal_righteous_defense() : SpellScriptLoader("spell_pal_righteous_defense") { } -        class spell_pal_divine_sacrifice_AuraScript : public AuraScript +        class spell_pal_righteous_defense_SpellScript : public SpellScript          { -            PrepareAuraScript(spell_pal_divine_sacrifice_AuraScript); - -            uint32 groupSize, minHpPct; -            int32 remainingAmount; +            PrepareSpellScript(spell_pal_righteous_defense_SpellScript); -            bool Load() +            SpellCastResult CheckCast()              { +                Unit* caster = GetCaster(); +                if (caster->GetTypeId() != TYPEID_PLAYER) +                    return SPELL_FAILED_DONT_REPORT; -                if (Unit* caster = GetCaster()) +                if (Unit* target = GetExplTargetUnit())                  { -                    if (caster->GetTypeId() == TYPEID_PLAYER) -                    { -                        if (caster->ToPlayer()->GetGroup()) -                            groupSize = caster->ToPlayer()->GetGroup()->GetMembersCount(); -                        else -                            groupSize = 1; -                    } -                    else -                        return false; - -                    remainingAmount = (caster->CountPctFromMaxHealth(GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster)) * groupSize); -                    minHpPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster); -                    return true; +                    if (!target->IsFriendlyTo(caster) || target->getAttackers().empty()) +                        return SPELL_FAILED_BAD_TARGETS;                  } -                return false; -            } +                else +                    return SPELL_FAILED_BAD_TARGETS; -            void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount) -            { -                remainingAmount -= splitAmount; -                // break when absorbed everything it could, or if the casters hp drops below 20% -                if (Unit* caster = GetCaster()) -                    if (remainingAmount <= 0 || (caster->GetHealthPct() < minHpPct)) -                        caster->RemoveAura(SPELL_DIVINE_SACRIFICE); +                return SPELL_CAST_OK;              }              void Register()              { -                OnEffectSplit += AuraEffectSplitFn(spell_pal_divine_sacrifice_AuraScript::Split, EFFECT_0); +                OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast);              }          }; -        AuraScript* GetAuraScript() const +        SpellScript* GetSpellScript() const          { -            return new spell_pal_divine_sacrifice_AuraScript(); +            return new spell_pal_righteous_defense_SpellScript();          }  }; @@ -673,14 +690,14 @@ void AddSC_paladin_spell_scripts()      new spell_pal_ardent_defender();      new spell_pal_blessing_of_faith();      new spell_pal_blessing_of_sanctuary(); +    new spell_pal_divine_sacrifice(); +    new spell_pal_divine_storm(); +    new spell_pal_divine_storm_dummy(); +    new spell_pal_exorcism_and_holy_wrath_damage();      new spell_pal_guarded_by_the_light(); +    new spell_pal_hand_of_sacrifice();      new spell_pal_holy_shock();      new spell_pal_judgement_of_command(); -    new spell_pal_divine_storm(); -    new spell_pal_divine_storm_dummy();      new spell_pal_lay_on_hands();      new spell_pal_righteous_defense(); -    new spell_pal_exorcism_and_holy_wrath_damage(); -    new spell_pal_hand_of_sacrifice(); -    new spell_pal_divine_sacrifice();  } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 68a9337f8ea..1c416a0d28a 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -249,7 +249,6 @@ class spell_pri_penance : public SpellScriptLoader              void Register()              { -                // add dummy effect spell handler to Penance                  OnEffectHitTarget += SpellEffectFn(spell_pri_penance_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);                  OnCheckCast += SpellCheckCastFn(spell_pri_penance_SpellScript::CheckCast);              } @@ -282,7 +281,6 @@ class spell_pri_prayer_of_mending_heal : public SpellScriptLoader                          SetHitHeal(heal);                      }                  } -              }              void Register() diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 7b6ac8fed12..f84265b89de 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -28,137 +28,173 @@  enum WarriorSpells  { -    WARRIOR_SPELL_LAST_STAND_TRIGGERED           = 12976, +    SPELL_WARRIOR_BLOODTHIRST                       = 23885, +    SPELL_WARRIOR_BLOODTHIRST_DAMAGE                = 23881, +    SPELL_WARRIOR_CHARGE                            = 34846, +    SPELL_WARRIOR_DEEP_WOUNDS_RANK_1                = 12162, +    SPELL_WARRIOR_DEEP_WOUNDS_RANK_2                = 12850, +    SPELL_WARRIOR_DEEP_WOUNDS_RANK_3                = 12868, +    SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC         = 12721, +    SPELL_WARRIOR_EXECUTE                           = 20647, +    SPELL_WARRIOR_GLYPH_OF_EXECUTION                = 58367, +    SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF        = 65156, +    SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT      = 64976, +    SPELL_WARRIOR_LAST_STAND_TRIGGERED              = 12976, +    SPELL_WARRIOR_SLAM                              = 50783, +    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_PALADIN_BLESSING_OF_SANCTUARY             = 20911, +    SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY     = 25899, +    SPELL_PRIEST_RENEWED_HOPE                       = 63944, +    SPELL_GEN_DAMAGE_REDUCTION_AURA                 = 68066,  }; -class spell_warr_last_stand : public SpellScriptLoader +enum WarriorSpellIcons +{ +    WARRIOR_ICON_ID_SUDDEN_DEATH        = 1989, +}; + +// 23881 - Bloodthirst +class spell_warr_bloodthirst : public SpellScriptLoader  {      public: -        spell_warr_last_stand() : SpellScriptLoader("spell_warr_last_stand") { } +        spell_warr_bloodthirst() : SpellScriptLoader("spell_warr_bloodthirst") { } -        class spell_warr_last_stand_SpellScript : public SpellScript +        class spell_warr_bloodthirst_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_last_stand_SpellScript); +            PrepareSpellScript(spell_warr_bloodthirst_SpellScript); -            bool Validate(SpellInfo const* /*spellEntry*/) +            void HandleDamage(SpellEffIndex /*effIndex*/)              { -                if (!sSpellMgr->GetSpellInfo(WARRIOR_SPELL_LAST_STAND_TRIGGERED)) -                    return false; -                return true; +                int32 damage = GetEffectValue(); +                ApplyPct(damage, GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK)); + +                if (Unit* target = GetHitUnit()) +                { +                    damage = GetCaster()->SpellDamageBonusDone(target, GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE); +                    damage = target->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE); +                } +                SetHitDamage(damage);              }              void HandleDummy(SpellEffIndex /*effIndex*/)              { -                if (Unit* caster = GetCaster()) -                { -                    int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30)); -                    caster->CastCustomSpell(caster, WARRIOR_SPELL_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL); -                } +                int32 damage = GetEffectValue(); +                GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, NULL, NULL, true, NULL);              }              void Register()              { -                // add dummy effect spell handler to Last Stand -                OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +                OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); +                OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_last_stand_SpellScript(); +            return new spell_warr_bloodthirst_SpellScript();          }  }; -class spell_warr_improved_spell_reflection : public SpellScriptLoader +// 23880 - Bloodthirst (Heal) +class spell_warr_bloodthirst_heal : public SpellScriptLoader  {      public: -        spell_warr_improved_spell_reflection() : SpellScriptLoader("spell_warr_improved_spell_reflection") { } +        spell_warr_bloodthirst_heal() : SpellScriptLoader("spell_warr_bloodthirst_heal") { } -        class spell_warr_improved_spell_reflection_SpellScript : public SpellScript +        class spell_warr_bloodthirst_heal_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_improved_spell_reflection_SpellScript); +            PrepareSpellScript(spell_warr_bloodthirst_heal_SpellScript); -            void FilterTargets(std::list<WorldObject*>& unitList) +            void HandleHeal(SpellEffIndex /*effIndex*/)              { -                if (GetCaster()) -                    unitList.remove(GetCaster()); +                if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_BLOODTHIRST_DAMAGE)) +                    SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster())));              }              void Register()              { -                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); +                OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_improved_spell_reflection_SpellScript(); +            return new spell_warr_bloodthirst_heal_SpellScript();          }  }; -enum DamageReductionAura +// -100 - Charge +class spell_warr_charge : public SpellScriptLoader  { -    SPELL_BLESSING_OF_SANCTUARY         = 20911, -    SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899, -    SPELL_RENEWED_HOPE                  = 63944, -    SPELL_DAMAGE_REDUCTION_AURA         = 68066, -}; +    public: +        spell_warr_charge() : SpellScriptLoader("spell_warr_charge") { } -class spell_warr_vigilance : public SpellScriptLoader -{ -public: -    spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { } +        class spell_warr_charge_SpellScript : public SpellScript +        { +            PrepareSpellScript(spell_warr_charge_SpellScript); -    class spell_warr_vigilance_AuraScript : public AuraScript -    { -        PrepareAuraScript(spell_warr_vigilance_AuraScript); +            bool Validate(SpellInfo const* /*spellInfo*/) +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_CHARGE)) +                    return false; +                return true; +            } -        bool Validate(SpellInfo const* /*SpellEntry*/) -        { -            if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA)) -                return false; -            return true; -        } +            void HandleDummy(SpellEffIndex /*effIndex*/) +            { +                int32 chargeBasePoints0 = GetEffectValue(); +                Unit* caster = GetCaster(); +                caster->CastCustomSpell(caster, SPELL_WARRIOR_CHARGE, &chargeBasePoints0, NULL, NULL, true); -        void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) -        { -            if (Unit* target = GetTarget()) -                target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true); -        } +                // Juggernaut crit bonus +                if (caster->HasAura(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT)) +                    caster->CastSpell(caster, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF, true); +            } -        void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) -        { -            if (Unit* target = GetTarget()) +            void Register()              { -                if (target->HasAura(SPELL_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_BLESSING_OF_SANCTUARY) || -                    target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) || -                    target->HasAura(SPELL_RENEWED_HOPE))) -                        target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA); +                OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);              } -        } +        }; -        void Register() +        SpellScript* GetSpellScript() const          { -            OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); -            OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); +            return new spell_warr_charge_SpellScript();          } - -    }; - -    AuraScript* GetAuraScript() const -    { -        return new spell_warr_vigilance_AuraScript(); -    }  }; -enum DeepWounds +// 12809 - Concussion Blow +class spell_warr_concussion_blow : public SpellScriptLoader  { -    SPELL_DEEP_WOUNDS_RANK_1         = 12162, -    SPELL_DEEP_WOUNDS_RANK_2         = 12850, -    SPELL_DEEP_WOUNDS_RANK_3         = 12868, -    SPELL_DEEP_WOUNDS_RANK_PERIODIC  = 12721, +    public: +        spell_warr_concussion_blow() : SpellScriptLoader("spell_warr_concussion_blow") { } + +        class spell_warr_concussion_blow_SpellScript : public SpellScript +        { +            PrepareSpellScript(spell_warr_concussion_blow_SpellScript); + +            void HandleDummy(SpellEffIndex /*effIndex*/) +            { +                SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue())); +            } + +            void Register() +            { +                OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY); +            } +        }; + +        SpellScript* GetSpellScript() const +        { +            return new spell_warr_concussion_blow_SpellScript(); +        }  }; +// -12162 - Deep Wounds  class spell_warr_deep_wounds : public SpellScriptLoader  {      public: @@ -168,14 +204,14 @@ class spell_warr_deep_wounds : public SpellScriptLoader          {              PrepareSpellScript(spell_warr_deep_wounds_SpellScript); -            bool Validate(SpellInfo const* /*SpellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_3)) +                if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_3))                      return false;                  return true;              } -            void HandleDummy(SpellEffIndex /* effIndex */) +            void HandleDummy(SpellEffIndex /*effIndex*/)              {                  int32 damage = GetEffectValue();                  Unit* caster = GetCaster(); @@ -188,16 +224,16 @@ class spell_warr_deep_wounds : public SpellScriptLoader                      damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE); -                    SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_PERIODIC); +                    SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC);                      uint32 ticks = spellInfo->GetDuration() / spellInfo->Effects[EFFECT_0].Amplitude;                      // Add remaining ticks to damage done -                    if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_DEEP_WOUNDS_RANK_PERIODIC, EFFECT_0, caster->GetGUID())) +                    if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, EFFECT_0, caster->GetGUID()))                          damage += aurEff->GetAmount() * (ticks - aurEff->GetTickNumber()); -                    damage = damage / ticks; +                    damage /= ticks; -                    caster->CastCustomSpell(target, SPELL_DEEP_WOUNDS_RANK_PERIODIC, &damage, NULL, NULL, true); +                    caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, &damage, NULL, NULL, true);                  }              } @@ -213,311 +249,261 @@ class spell_warr_deep_wounds : public SpellScriptLoader          }  }; -enum Charge -{ -    SPELL_JUGGERNAUT_CRIT_BONUS_TALENT      = 64976, -    SPELL_JUGGERNAUT_CRIT_BONUS_BUFF        = 65156, -    SPELL_CHARGE                            = 34846, -}; - -class spell_warr_charge : public SpellScriptLoader +// -5308 - Execute +class spell_warr_execute : public SpellScriptLoader  {      public: -        spell_warr_charge() : SpellScriptLoader("spell_warr_charge") { } +        spell_warr_execute() : SpellScriptLoader("spell_warr_execute") { } -        class spell_warr_charge_SpellScript : public SpellScript +        class spell_warr_execute_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_charge_SpellScript); +            PrepareSpellScript(spell_warr_execute_SpellScript); -            bool Validate(SpellInfo const* /*SpellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_JUGGERNAUT_CRIT_BONUS_TALENT) || !sSpellMgr->GetSpellInfo(SPELL_JUGGERNAUT_CRIT_BONUS_BUFF) || !sSpellMgr->GetSpellInfo(SPELL_CHARGE)) +                if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_EXECUTE) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_EXECUTION))                      return false;                  return true;              } -            void HandleDummy(SpellEffIndex /* effIndex */) + +            void HandleDummy(SpellEffIndex effIndex)              { -                int32 chargeBasePoints0 = GetEffectValue();                  Unit* caster = GetCaster(); -                caster->CastCustomSpell(caster, SPELL_CHARGE, &chargeBasePoints0, NULL, NULL, true); +                if (Unit* target = GetHitUnit()) +                { +                    SpellInfo const* spellInfo = GetSpellInfo(); +                    int32 rageUsed = std::min<int32>(300 - spellInfo->CalcPowerCost(caster, SpellSchoolMask(spellInfo->SchoolMask)), caster->GetPower(POWER_RAGE)); +                    int32 newRage = std::max<int32>(0, caster->GetPower(POWER_RAGE) - rageUsed); + +                    // Sudden Death rage save +                    if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_GENERIC, WARRIOR_ICON_ID_SUDDEN_DEATH, EFFECT_0)) +                    { +                        int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue() * 10; +                        newRage = std::max(newRage, ragesave); +                    } -                //Juggernaut crit bonus -                if (caster->HasAura(SPELL_JUGGERNAUT_CRIT_BONUS_TALENT)) -                    caster->CastSpell(caster, SPELL_JUGGERNAUT_CRIT_BONUS_BUFF, true); +                    caster->SetPower(POWER_RAGE, uint32(newRage)); +                    // Glyph of Execution bonus +                    if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_EXECUTION, EFFECT_0)) +                        rageUsed += aurEff->GetAmount() * 10; + + +                    int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f); +                    caster->CastCustomSpell(target, SPELL_WARRIOR_EXECUTE, &bp, NULL, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID()); +                }              }              void Register()              { -                OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); +                OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_charge_SpellScript(); +            return new spell_warr_execute_SpellScript();          }  }; -enum Slam -{ -    SPELL_SLAM      = 50783, -}; - -class spell_warr_slam : public SpellScriptLoader +// 59725 - Improved Spell Reflection +class spell_warr_improved_spell_reflection : public SpellScriptLoader  {      public: -        spell_warr_slam() : SpellScriptLoader("spell_warr_slam") { } +        spell_warr_improved_spell_reflection() : SpellScriptLoader("spell_warr_improved_spell_reflection") { } -        class spell_warr_slam_SpellScript : public SpellScript +        class spell_warr_improved_spell_reflection_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_slam_SpellScript); +            PrepareSpellScript(spell_warr_improved_spell_reflection_SpellScript); -            bool Validate(SpellInfo const* /*SpellEntry*/) -            { -                if (!sSpellMgr->GetSpellInfo(SPELL_SLAM)) -                    return false; -                return true; -            } -            void HandleDummy(SpellEffIndex /* effIndex */) +            void FilterTargets(std::list<WorldObject*>& unitList)              { -                int32 bp0 = GetEffectValue(); -                if (GetHitUnit()) -                    GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SLAM, &bp0, NULL, NULL, true, 0); +                if (GetCaster()) +                    unitList.remove(GetCaster());              }              void Register()              { -                OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_slam_SpellScript(); +            return new spell_warr_improved_spell_reflection_SpellScript();          }  }; -enum Execute -{ -    SPELL_EXECUTE               = 20647, -    SPELL_GLYPH_OF_EXECUTION    = 58367, -    ICON_ID_SUDDEN_DEATH        = 1989, -}; - -class spell_warr_execute : public SpellScriptLoader +// 12975 - Last Stand +class spell_warr_last_stand : public SpellScriptLoader  {      public: -        spell_warr_execute() : SpellScriptLoader("spell_warr_execute") { } +        spell_warr_last_stand() : SpellScriptLoader("spell_warr_last_stand") { } -        class spell_warr_execute_SpellScript : public SpellScript +        class spell_warr_last_stand_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_execute_SpellScript); +            PrepareSpellScript(spell_warr_last_stand_SpellScript); -            bool Validate(SpellInfo const* /*SpellEntry*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (!sSpellMgr->GetSpellInfo(SPELL_EXECUTE) || !sSpellMgr->GetSpellInfo(SPELL_GLYPH_OF_EXECUTION)) +                if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_LAST_STAND_TRIGGERED))                      return false;                  return true;              } -            void HandleDummy(SpellEffIndex effIndex) + +            void HandleDummy(SpellEffIndex /*effIndex*/)              { -                Unit* caster = GetCaster(); -                if (Unit* target = GetHitUnit()) +                if (Unit* caster = GetCaster())                  { -                    SpellInfo const* spellInfo = GetSpellInfo(); -                    int32 rageUsed = std::min<int32>(300 - spellInfo->CalcPowerCost(caster, SpellSchoolMask(spellInfo->SchoolMask)), caster->GetPower(POWER_RAGE)); -                    int32 newRage = std::max<int32>(0, caster->GetPower(POWER_RAGE) - rageUsed); - -                    // Sudden Death rage save -                    if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_GENERIC, ICON_ID_SUDDEN_DEATH, EFFECT_0)) -                    { -                        int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue() * 10; -                        newRage = std::max(newRage, ragesave); -                    } - -                    caster->SetPower(POWER_RAGE, uint32(newRage)); -                    // Glyph of Execution bonus -                    if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_GLYPH_OF_EXECUTION, EFFECT_0)) -                        rageUsed += aurEff->GetAmount() * 10; - - -                    int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f); -                    caster->CastCustomSpell(target,SPELL_EXECUTE,&bp,0,0,true,0,0,GetOriginalCaster()->GetGUID()); +                    int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30)); +                    caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);                  }              }              void Register()              { -                OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +                OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_execute_SpellScript(); +            return new spell_warr_last_stand_SpellScript();          }  }; -class spell_warr_concussion_blow : public SpellScriptLoader +// 7384, 7887, 11584, 11585 - Overpower +class spell_warr_overpower : public SpellScriptLoader  {      public: -        spell_warr_concussion_blow() : SpellScriptLoader("spell_warr_concussion_blow") { } +        spell_warr_overpower() : SpellScriptLoader("spell_warr_overpower") { } -        class spell_warr_concussion_blow_SpellScript : public SpellScript +        class spell_warr_overpower_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_concussion_blow_SpellScript); +            PrepareSpellScript(spell_warr_overpower_SpellScript); -            void HandleDummy(SpellEffIndex /* effIndex */) +            void HandleEffect(SpellEffIndex /*effIndex*/)              { -                SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue())); +                uint32 spellId = 0; +                if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1)) +                    spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1; +                else if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2)) +                    spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2; + +                if (!spellId) +                    return; + +                if (Player* target = GetHitPlayer()) +                    if (target->HasUnitState(UNIT_STATE_CASTING)) +                        target->CastSpell(target, spellId, true);              }              void Register()              { -                OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY); +                OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_concussion_blow_SpellScript(); +            return new spell_warr_overpower_SpellScript();          }  }; -enum Bloodthirst -{ -    SPELL_BLOODTHIRST = 23885, -}; - -class spell_warr_bloodthirst : public SpellScriptLoader +// -1464 - Slam +class spell_warr_slam : public SpellScriptLoader  {      public: -        spell_warr_bloodthirst() : SpellScriptLoader("spell_warr_bloodthirst") { } +        spell_warr_slam() : SpellScriptLoader("spell_warr_slam") { } -        class spell_warr_bloodthirst_SpellScript : public SpellScript +        class spell_warr_slam_SpellScript : public SpellScript          { -            PrepareSpellScript(spell_warr_bloodthirst_SpellScript); +            PrepareSpellScript(spell_warr_slam_SpellScript); -            void HandleDamage(SpellEffIndex /*effIndex*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                int32 damage = GetEffectValue(); -                ApplyPct(damage, GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK)); - -                if (Unit* target = GetHitUnit()) -                { -                    damage = GetCaster()->SpellDamageBonusDone(target, GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE); -                    damage = target->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE); -                } -                SetHitDamage(damage); +                if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SLAM)) +                    return false; +                return true;              }              void HandleDummy(SpellEffIndex /*effIndex*/)              { -                int32 damage = GetEffectValue(); -                GetCaster()->CastCustomSpell(GetCaster(), SPELL_BLOODTHIRST, &damage, NULL, NULL, true, NULL); +                int32 bp0 = GetEffectValue(); +                if (GetHitUnit()) +                    GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_WARRIOR_SLAM, &bp0, NULL, NULL, true, 0);              }              void Register()              { -                OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); -                OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); +                OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);              }          };          SpellScript* GetSpellScript() const          { -            return new spell_warr_bloodthirst_SpellScript(); +            return new spell_warr_slam_SpellScript();          }  }; -enum BloodthirstHeal -{ -    SPELL_BLOODTHIRST_DAMAGE = 23881, -}; - -class spell_warr_bloodthirst_heal : public SpellScriptLoader +// 50720 - Vigilance +class spell_warr_vigilance : public SpellScriptLoader  {      public: -        spell_warr_bloodthirst_heal() : SpellScriptLoader("spell_warr_bloodthirst_heal") { } +        spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { } -        class spell_warr_bloodthirst_heal_SpellScript : public SpellScript +        class spell_warr_vigilance_AuraScript : public AuraScript          { -            PrepareSpellScript(spell_warr_bloodthirst_heal_SpellScript); +            PrepareAuraScript(spell_warr_vigilance_AuraScript); -            void HandleHeal(SpellEffIndex /*effIndex*/) +            bool Validate(SpellInfo const* /*spellInfo*/)              { -                if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_BLOODTHIRST_DAMAGE)) -                    SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster()))); +                if (!sSpellMgr->GetSpellInfo(SPELL_GEN_DAMAGE_REDUCTION_AURA)) +                    return false; +                return true;              } -            void Register() +            void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)              { -                OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); +                if (Unit* target = GetTarget()) +                    target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true);              } -        }; -        SpellScript* GetSpellScript() const -        { -            return new spell_warr_bloodthirst_heal_SpellScript(); -        } -}; - -enum Overpower -{ -    SPELL_UNRELENTING_ASSAULT_RANK_1        = 46859, -    SPELL_UNRELENTING_ASSAULT_RANK_2        = 46860, -    SPELL_UNRELENTING_ASSAULT_TRIGGER_1     = 64849, -    SPELL_UNRELENTING_ASSAULT_TRIGGER_2     = 64850, -}; - -class spell_warr_overpower : public SpellScriptLoader -{ -public: -    spell_warr_overpower() : SpellScriptLoader("spell_warr_overpower") { } +            void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) +            { +                if (Unit* target = GetTarget()) +                { +                    if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) || +                        target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) || +                        target->HasAura(SPELL_PRIEST_RENEWED_HOPE))) +                            target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA); +                } +            } -    class spell_warr_overpower_SpellScript : public SpellScript -    { -        PrepareSpellScript(spell_warr_overpower_SpellScript); +            void Register() +            { +                OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); +                OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); +            } -        void HandleEffect(SpellEffIndex /* effIndex */) -        { -            uint32 spellId = 0; -            if (GetCaster()->HasAura(SPELL_UNRELENTING_ASSAULT_RANK_1)) -                spellId = SPELL_UNRELENTING_ASSAULT_TRIGGER_1; -            else if (GetCaster()->HasAura(SPELL_UNRELENTING_ASSAULT_RANK_2)) -                spellId = SPELL_UNRELENTING_ASSAULT_TRIGGER_2; - -            if (!spellId) -                return; - -            if (Player* target = GetHitPlayer()) -                if (target->HasUnitState(UNIT_STATE_CASTING)) -                    target->CastSpell(target, spellId, true); -        } +        }; -        void Register() +        AuraScript* GetAuraScript() const          { -            OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY); +            return new spell_warr_vigilance_AuraScript();          } -    }; - -    SpellScript* GetSpellScript() const -    { -        return new spell_warr_overpower_SpellScript(); -    }  };  void AddSC_warrior_spell_scripts()  { -    new spell_warr_last_stand(); -    new spell_warr_improved_spell_reflection(); -    new spell_warr_vigilance(); -    new spell_warr_deep_wounds(); -    new spell_warr_charge(); -    new spell_warr_slam(); -    new spell_warr_execute(); -    new spell_warr_concussion_blow();      new spell_warr_bloodthirst();      new spell_warr_bloodthirst_heal(); +    new spell_warr_charge(); +    new spell_warr_concussion_blow(); +    new spell_warr_deep_wounds(); +    new spell_warr_execute(); +    new spell_warr_improved_spell_reflection(); +    new spell_warr_last_stand();      new spell_warr_overpower(); +    new spell_warr_slam(); +    new spell_warr_vigilance();  } | 
