diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/scripts/Northrend/zone_borean_tundra.cpp | 8 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_grizzly_hills.cpp | 8 | ||||
| -rw-r--r-- | src/server/scripts/Outland/zone_shadowmoon_valley.cpp | 105 | 
3 files changed, 111 insertions, 10 deletions
| diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index fd898a61d41..fae13e92fd1 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -602,6 +602,7 @@ public:                      IntroTimer = 2000;                      break;                  case 41: +                    SetEscortPaused(true);                      IntroPhase = 4;                      IntroTimer = 2000;                      break; @@ -628,7 +629,7 @@ public:                              IntroTimer = 7500;                              break;                          case 3: -                            me->SetReactState(REACT_AGGRESSIVE); +                            me->SetReactState(REACT_DEFENSIVE);                              IntroPhase = 0;                              IntroTimer = 0;                              break; @@ -643,14 +644,12 @@ public:                              IntroPhase = 6;                              IntroTimer = 2500;                              break; -                          case 6:                              if (Player* player = GetPlayerForEscort())                                  player->AreaExploredOrEventHappens(QUEST_ESCAPE_WINTERFIN_CAVERNS);                              IntroPhase = 7;                              IntroTimer = 2500;                              break; -                          case 7:                              me->DespawnOrUnsummon();                              IntroPhase = 0; @@ -672,8 +671,7 @@ public:                  if (GameObject* go = me->FindNearestGameObject(GO_CAGE, 5.0f))                  {                      go->SetRespawnTime(0); -                    go->SetGoType(GAMEOBJECT_TYPE_BUTTON); -                    go->UseDoorOrButton(20); +                    go->UseDoorOrButton(20000);                  }                  Start(true, false, player->GetGUID()); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index de646c0c6a0..5b8bb0d3d8b 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -564,6 +564,11 @@ public:      {          npc_venture_co_stragglerAI(Creature* creature) : ScriptedAI(creature) { } +	void EnterCombat(Unit* /*who*/) override +	{ +	    _events.ScheduleEvent(EVENT_CHOP, Seconds(3), Seconds(6)); +	} +          void Reset() override          {              _playerGUID.Clear(); @@ -602,7 +607,7 @@ public:                      case EVENT_CHOP:                          if (UpdateVictim())                              DoCastVictim(SPELL_CHOP); -                        _events.ScheduleEvent(EVENT_CHOP, 10000, 12000); +                        _events.Repeat(Seconds(10), Seconds(12));                          break;                      default:                          break; @@ -611,7 +616,6 @@ public:              if (!UpdateVictim())                  return; -              DoMeleeAttackIfReady();          } diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 1b0ccbf094f..5f15ebacaa8 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1376,7 +1376,7 @@ public:  enum Enraged_Dpirits  { -// QUESTS +    // QUESTS      QUEST_ENRAGED_SPIRITS_FIRE_EARTH        = 10458,      QUEST_ENRAGED_SPIRITS_AIR               = 10481,      QUEST_ENRAGED_SPIRITS_WATER             = 10480, @@ -1391,6 +1391,22 @@ enum Enraged_Dpirits      NPC_ENRAGED_AIR_SPIRIT                  = 21060,      NPC_ENRAGED_WATER_SPIRIT                = 21059, +    // ENRAGED WATER SPIRIT SPELLS +    SPELL_STORMBOLT                         = 38032, + +    // ENRAGED AIR SPIRIT SPELLS +    SPELL_AIR_SPIRIT_CHAIN_LIGHTNING        = 12058, +    SPELL_HURRICANE                         = 32717, +    SPELL_ENRAGE                            = 8599, + +    // ENRAGED FIRE SPIRIT SPELLS - Will be using the enrage spell from Air Spirit +    SPELL_FEL_FIREBALL                      = 36247, +    SPELL_FEL_FIRE_AURA                     = 36006, // Earth spirit uses this one + +    // ENRAGED EARTH SPIRIT SPELLS +    SPELL_FIERY_BOULDER                     = 38498, +    SPELL_SUMMON_ENRAGED_EARTH_SHARD        = 38365, +          // SOULS      NPC_EARTHEN_SOUL                        = 21073,      NPC_FIERY_SOUL                          = 21097, @@ -1413,6 +1429,15 @@ enum Enraged_Dpirits      SPELL_SOUL_CAPTURED                     = 36115  }; +enum Enraged_Spirits_Events +{ +    EVENT_ENRAGED_WATER_SPIRIT                  = 1, +    EVENT_ENRAGED_FIRE_SPIRIT                   = 2, +    EVENT_ENRAGED_EARTH_SPIRIT                  = 3, +    EVENT_ENRAGED_AIR_SPIRIT_CHAIN_LIGHTNING    = 4, +    EVENT_ENRAGED_AIR_SPIRIT_HURRICANE          = 5 +}; +  class npc_enraged_spirit : public CreatureScript  {  public: @@ -1420,7 +1445,7 @@ public:      CreatureAI* GetAI(Creature* creature) const override      { -    return new npc_enraged_spiritAI(creature); +        return new npc_enraged_spiritAI(creature);      }      struct npc_enraged_spiritAI : public ScriptedAI @@ -1429,7 +1454,77 @@ public:          void Reset() override { } -        void EnterCombat(Unit* /*who*/) override { } +        void EnterCombat(Unit* /*who*/) override +        { +            switch (me->GetEntry()) +            { +                case NPC_ENRAGED_WATER_SPIRIT: +                    _events.ScheduleEvent(EVENT_ENRAGED_WATER_SPIRIT, Seconds(0), Seconds(1)); +                    break; +                case NPC_ENRAGED_FIRE_SPIRIT: +                    if (!me->GetAura(SPELL_FEL_FIRE_AURA)) +                        DoCastSelf(SPELL_FEL_FIRE_AURA); +                    _events.ScheduleEvent(EVENT_ENRAGED_FIRE_SPIRIT, Seconds(2), Seconds(10)); +                    break; +                case NPC_ENRAGED_EARTH_SPIRIT: +                    if (!me->GetAura(SPELL_FEL_FIRE_AURA)) +                        DoCastSelf(SPELL_FEL_FIRE_AURA); +                    _events.ScheduleEvent(EVENT_ENRAGED_EARTH_SPIRIT, Seconds(3), Seconds(4)); +                    break; +                case NPC_ENRAGED_AIR_SPIRIT: +                    _events.ScheduleEvent(EVENT_ENRAGED_AIR_SPIRIT_CHAIN_LIGHTNING, Seconds(10)); +                    break; +                default: +                    break; +            } +        } + +        void UpdateAI(uint32 diff) override +        { +            if (!UpdateVictim()) +                return; +            _events.Update(diff); + +            while (uint32 eventId = _events.ExecuteEvent()) +            { +                switch (eventId) +                { +                    case EVENT_ENRAGED_WATER_SPIRIT: +                        if (UpdateVictim()) +                            DoCastVictim(SPELL_STORMBOLT); +                        _events.Repeat(Seconds(17), Seconds(23)); +                        break; +                    case EVENT_ENRAGED_FIRE_SPIRIT: +                        if (UpdateVictim()) +                            DoCastVictim(SPELL_FEL_FIREBALL); +                        _events.Repeat(Seconds(6), Seconds(12)); +                        break; +                    case EVENT_ENRAGED_EARTH_SPIRIT: +                        if (UpdateVictim()) +                            DoCastVictim(SPELL_FIERY_BOULDER); +                        _events.Repeat(Seconds(6), Seconds(9)); +                        break; +                    case EVENT_ENRAGED_AIR_SPIRIT_CHAIN_LIGHTNING: +                        if (UpdateVictim()) +                            DoCastVictim(SPELL_CHAIN_LIGHTNING); +                        _events.ScheduleEvent(EVENT_ENRAGED_AIR_SPIRIT_HURRICANE, Seconds(3), Seconds(5)); +                        break; +                    case EVENT_ENRAGED_AIR_SPIRIT_HURRICANE: +                        if (UpdateVictim()) +                            DoCastVictim(SPELL_HURRICANE); +                        _events.ScheduleEvent(EVENT_ENRAGED_AIR_SPIRIT_CHAIN_LIGHTNING, Seconds(15), Seconds(20)); +                        break; +                    default: +                        break; +                } +            } + +		if (me->GetEntry() == NPC_ENRAGED_FIRE_SPIRIT || me->GetEntry() == NPC_ENRAGED_AIR_SPIRIT) +			if (HealthBelowPct(35) && !me->GetAura(SPELL_ENRAGE)) +				DoCastSelf(SPELL_ENRAGE); + +		DoMeleeAttackIfReady(); +	    }          void JustDied(Unit* /*killer*/) override          { @@ -1450,6 +1545,7 @@ public:                      entry  = NPC_EARTHEN_SOUL;                      //credit = SPELL_EARTHEN_SOUL_CAPTURED_CREDIT;                      credit = NPC_CREDIT_EARTH; +                    DoCastSelf(SPELL_SUMMON_ENRAGED_EARTH_SHARD);                      break;                    case NPC_ENRAGED_AIR_SPIRIT:                      entry  = NPC_ENRAGED_AIRY_SOUL; @@ -1488,6 +1584,9 @@ public:                   }              }          } + +    private: +        EventMap _events;      };  }; | 
