aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp1
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp173
2 files changed, 81 insertions, 93 deletions
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
index 1fa895824e3..115c75c2f17 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -301,6 +301,7 @@ public:
//enrage at 20%
if (HealthBelowPct(20))
events.ScheduleEvent(EVENT_SUMMON_TRAVELER, 5000);
+ break;
}
}
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
index 786eb662a57..b96418097f3 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
@@ -30,53 +30,51 @@ EndScriptData */
enum Murmur
{
+ // Spell
SPELL_RESONANCE = 33657,
SPELL_MAGNETIC_PULL = 33689,
SPELL_SONIC_SHOCK = 38797,
SPELL_THUNDERING_STORM = 39365,
+ SPELL_SONIC_BOOM_CAST = 33923,
+ SPELL_SONIC_BOOM_EFFECT = 33666,
+ SPELL_MURMURS_TOUCH = 33711,
+ // Text
EMOTE_SONIC_BOOM = 0
};
-#define SPELL_SONIC_BOOM_CAST DUNGEON_MODE(33923, 38796)
-#define SPELL_SONIC_BOOM_EFFECT DUNGEON_MODE(33666, 38795)
-
-#define SPELL_MURMURS_TOUCH DUNGEON_MODE(33711, 38794)
-
+enum Events
+{
+ EVENT_SONIC_BOOM = 1,
+ EVENT_MURMURS_TOUCH = 2,
+ EVENT_RESONANCE = 3,
+ EVENT_MAGNETIC_PULL = 4,
+ EVENT_THUNDERING_STORM = 5,
+ EVENT_SONIC_SHOCK = 6
+};
class boss_murmur : public CreatureScript
{
public:
boss_murmur() : CreatureScript("boss_murmur") { }
- CreatureAI* GetAI(Creature* creature) const
+ struct boss_murmurAI : public BossAI
{
- return new boss_murmurAI (creature);
- }
-
- struct boss_murmurAI : public ScriptedAI
- {
- boss_murmurAI(Creature* creature) : ScriptedAI(creature)
+ boss_murmurAI(Creature* creature) : BossAI(creature, DATA_MURMUREVENT)
{
SetCombatMovement(false);
}
- uint32 SonicBoom_Timer;
- uint32 MurmursTouch_Timer;
- uint32 Resonance_Timer;
- uint32 MagneticPull_Timer;
- uint32 SonicShock_Timer;
- uint32 ThunderingStorm_Timer;
- bool SonicBoom;
-
void Reset()
{
- SonicBoom_Timer = 30000;
- MurmursTouch_Timer = urand(8000, 20000);
- Resonance_Timer = 5000;
- MagneticPull_Timer = urand(15000, 30000);
- ThunderingStorm_Timer = 15000;
- SonicShock_Timer = 10000;
- SonicBoom = false;
+ events.ScheduleEvent(EVENT_SONIC_BOOM, 30000);
+ events.ScheduleEvent(EVENT_MURMURS_TOUCH, urand(8000, 20000));
+ events.ScheduleEvent(EVENT_RESONANCE, 5000);
+ events.ScheduleEvent(EVENT_MAGNETIC_PULL, urand(15000, 30000));
+ if (IsHeroic())
+ {
+ events.ScheduleEvent(EVENT_THUNDERING_STORM, 15000);
+ events.ScheduleEvent(EVENT_SONIC_SHOCK, 10000);
+ }
//database should have `RegenHealth`=0 to prevent regen
uint32 hp = me->CountPctFromMaxHealth(40);
@@ -117,81 +115,65 @@ public:
if (!UpdateVictim() || me->IsNonMeleeSpellCasted(false))
return;
- // Sonic Boom
- if (SonicBoom)
- {
- DoCast(me, SPELL_SONIC_BOOM_EFFECT, true);
- SonicBoomEffect();
-
- SonicBoom = false;
- Resonance_Timer = 1500;
- }
- if (SonicBoom_Timer <= diff)
- {
- Talk(EMOTE_SONIC_BOOM);
- DoCast(me, SPELL_SONIC_BOOM_CAST);
- SonicBoom_Timer = 30000;
- SonicBoom = true;
- return;
- } else SonicBoom_Timer -= diff;
-
- // Murmur's Touch
- if (MurmursTouch_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true))
- DoCast(target, SPELL_MURMURS_TOUCH);
- MurmursTouch_Timer = urand(25000, 35000);
- } else MurmursTouch_Timer -= diff;
+ events.Update(diff);
- // Resonance
- if (!SonicBoom && !(me->IsWithinMeleeRange(me->GetVictim())))
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (Resonance_Timer <= diff)
+ switch (eventId)
{
- DoCast(me, SPELL_RESONANCE);
- Resonance_Timer = 5000;
- } else Resonance_Timer -= diff;
- }
-
- // Magnetic Pull
- if (MagneticPull_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive())
+ case EVENT_SONIC_BOOM:
+ Talk(EMOTE_SONIC_BOOM);
+ DoCast(me, SPELL_SONIC_BOOM_CAST);
+ DoCast(me, SPELL_SONIC_BOOM_EFFECT, true);
+ SonicBoomEffect();
+ events.ScheduleEvent(EVENT_SONIC_BOOM, 30000);
+ events.ScheduleEvent(EVENT_RESONANCE, 1500);
+ break;
+ case EVENT_MURMURS_TOUCH:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true))
+ DoCast(target, SPELL_MURMURS_TOUCH);
+ events.ScheduleEvent(EVENT_MURMURS_TOUCH, urand(25000, 35000));
+ break;
+ case EVENT_RESONANCE:
+ if (!(me->IsWithinMeleeRange(me->GetVictim())))
+ {
+ DoCast(me, SPELL_RESONANCE);
+ events.ScheduleEvent(EVENT_RESONANCE, 5000);
+ }
+ break;
+ case EVENT_MAGNETIC_PULL:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive())
+ {
+ DoCast(target, SPELL_MAGNETIC_PULL);
+ events.ScheduleEvent(EVENT_MAGNETIC_PULL, 15000+rand()%15000);
+ break;
+ }
+ events.ScheduleEvent(EVENT_MAGNETIC_PULL, 500);
+ break;
+ case EVENT_THUNDERING_STORM:
{
- DoCast(target, SPELL_MAGNETIC_PULL);
- MagneticPull_Timer = 15000+rand()%15000;
- return;
- }
- MagneticPull_Timer = 500;
- } else MagneticPull_Timer -= diff;
-
- if (IsHeroic())
- {
- // Thundering Storm
- if (ThunderingStorm_Timer <= diff)
- {
- ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
- for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)
- if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid()))
- if (target->IsAlive() && !me->IsWithinDist(target, 35, false))
- DoCast(target, SPELL_THUNDERING_STORM, true);
- ThunderingStorm_Timer = 15000;
- } else ThunderingStorm_Timer -= diff;
-
- // Sonic Shock
- if (SonicShock_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20, false))
- if (target->IsAlive())
- DoCast(target, SPELL_SONIC_SHOCK);
- SonicShock_Timer = 10000+rand()%10000;
- } else SonicShock_Timer -= diff;
+ ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
+ for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)
+ if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid()))
+ if (target->IsAlive() && !me->IsWithinDist(target, 35, false))
+ DoCast(target, SPELL_THUNDERING_STORM, true);
+ events.ScheduleEvent(EVENT_THUNDERING_STORM, 15000);
+ break;
+ }
+ case EVENT_SONIC_SHOCK:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20, false))
+ if (target->IsAlive())
+ DoCast(target, SPELL_SONIC_SHOCK);
+ events.ScheduleEvent(EVENT_SONIC_SHOCK, 10000+rand()%10000);
+ break;
+ }
}
// Select nearest most aggro target if top aggro too far
if (!me->isAttackReady())
return;
+
if (!me->IsWithinMeleeRange(me->GetVictim()))
{
ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList();
@@ -206,6 +188,11 @@ public:
DoMeleeAttackIfReady();
}
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_murmurAI (creature);
+ }
};
};