diff options
-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 6590046a80e..3cb7d03631b 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -599,6 +599,7 @@ public: IntroTimer = 2000; break; case 41: + SetEscortPaused(true); IntroPhase = 4; IntroTimer = 2000; break; @@ -625,7 +626,7 @@ public: IntroTimer = 7500; break; case 3: - me->SetReactState(REACT_AGGRESSIVE); + me->SetReactState(REACT_DEFENSIVE); IntroPhase = 0; IntroTimer = 0; break; @@ -640,14 +641,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; @@ -669,8 +668,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 6394ffffaf2..29722dae326 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -559,6 +559,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(); @@ -597,7 +602,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; @@ -606,7 +611,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 fb702cb6a42..eff2df7aa04 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1374,7 +1374,7 @@ public: enum Enraged_Dpirits { -// QUESTS + // QUESTS QUEST_ENRAGED_SPIRITS_FIRE_EARTH = 10458, QUEST_ENRAGED_SPIRITS_AIR = 10481, QUEST_ENRAGED_SPIRITS_WATER = 10480, @@ -1389,6 +1389,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, @@ -1411,6 +1427,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: @@ -1418,7 +1443,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 @@ -1427,7 +1452,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 { @@ -1448,6 +1543,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; @@ -1486,6 +1582,9 @@ public: } } } + + private: + EventMap _events; }; }; |