aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp8
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp8
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp105
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;
};
};