aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp43
-rw-r--r--src/server/scripts/Outland/CMakeLists.txt2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp44
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp124
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp127
5 files changed, 303 insertions, 37 deletions
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index bc29d96d1b8..28fe883feb9 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -575,7 +575,7 @@ void AddSC_boss_grandmaster_vorpil();
void AddSC_boss_murmur();
void AddSC_instance_shadow_labyrinth();
-//Black Temple
+// Black Temple
void AddSC_black_temple();
void AddSC_boss_illidan();
void AddSC_boss_shade_of_akama();
@@ -588,7 +588,7 @@ void AddSC_boss_najentus();
void AddSC_boss_illidari_council();
void AddSC_instance_black_temple();
-//Coilfang Reservoir - Serpent Shrine Cavern
+// Coilfang Reservoir - Serpent Shrine Cavern
void AddSC_boss_fathomlord_karathress();
void AddSC_boss_hydross_the_unstable();
void AddSC_boss_lady_vashj();
@@ -597,22 +597,24 @@ void AddSC_boss_morogrim_tidewalker();
void AddSC_instance_serpentshrine_cavern();
void AddSC_boss_the_lurker_below();
-//Coilfang Reservoir - The Steam Vault
+// Coilfang Reservoir - The Steam Vault
void AddSC_boss_hydromancer_thespia();
void AddSC_boss_mekgineer_steamrigger();
void AddSC_boss_warlord_kalithresh();
void AddSC_instance_steam_vault();
-//Coilfang Reservoir - The Slave Pens
+// Coilfang Reservoir - The Slave Pens
void AddSC_instance_the_slave_pens();
void AddSC_boss_mennu_the_betrayer();
+void AddSC_boss_rokmar_the_crackler();
+void AddSC_boss_quagmirran();
-//Coilfang Reservoir - The Underbog
+// Coilfang Reservoir - The Underbog
void AddSC_instance_the_underbog();
void AddSC_boss_hungarfen();
void AddSC_boss_the_black_stalker();
-//Gruul's Lair
+// Gruul's Lair
void AddSC_boss_gruul();
void AddSC_boss_high_king_maulgar();
void AddSC_instance_gruuls_lair();
@@ -1111,7 +1113,8 @@ void AddOutlandScripts()
AddSC_boss_murmur();
AddSC_instance_shadow_labyrinth();
- AddSC_black_temple(); //Black Temple
+ // Black Temple
+ AddSC_black_temple();
AddSC_boss_illidan();
AddSC_boss_shade_of_akama();
AddSC_boss_supremus();
@@ -1122,23 +1125,35 @@ void AddOutlandScripts()
AddSC_boss_najentus();
AddSC_boss_illidari_council();
AddSC_instance_black_temple();
- AddSC_boss_fathomlord_karathress(); //CR Serpent Shrine Cavern
+
+ // Coilfang Reservoir - Serpent Shrine Cavern
+ AddSC_boss_fathomlord_karathress();
AddSC_boss_hydross_the_unstable();
AddSC_boss_lady_vashj();
AddSC_boss_leotheras_the_blind();
AddSC_boss_morogrim_tidewalker();
AddSC_instance_serpentshrine_cavern();
AddSC_boss_the_lurker_below();
- AddSC_boss_hydromancer_thespia(); //CR Steam Vault
+
+ // Coilfang Reservoir - The Steam Vault
+ AddSC_instance_steam_vault();
+ AddSC_boss_hydromancer_thespia();
AddSC_boss_mekgineer_steamrigger();
AddSC_boss_warlord_kalithresh();
- AddSC_instance_steam_vault();
- AddSC_instance_the_slave_pens(); //The Slave Pens
+
+ // Coilfang Reservoir - The Slave Pens
+ AddSC_instance_the_slave_pens();
AddSC_boss_mennu_the_betrayer();
- AddSC_boss_hungarfen(); //CR Underbog
- AddSC_boss_the_black_stalker();
+ AddSC_boss_rokmar_the_crackler();
+ AddSC_boss_quagmirran();
+
+ // Coilfang Reservoir - The Underbog
AddSC_instance_the_underbog();
- AddSC_boss_gruul(); //Gruul's Lair
+ AddSC_boss_hungarfen();
+ AddSC_boss_the_black_stalker();
+
+ // Gruul's Lair
+ AddSC_boss_gruul();
AddSC_boss_high_king_maulgar();
AddSC_instance_gruuls_lair();
AddSC_boss_broggok(); //HC Blood Furnace
diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt
index e07424a77d2..ab10ee2dfe4 100644
--- a/src/server/scripts/Outland/CMakeLists.txt
+++ b/src/server/scripts/Outland/CMakeLists.txt
@@ -45,6 +45,8 @@ set(scripts_STAT_SRCS
Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp
Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h
Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
+ Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
+ Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp
Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
index d015919d978..ba59aa3b463 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
@@ -17,7 +17,7 @@
/* ScriptData
SDName: boss_mennu_the_betrayer
-SD%Complete: 100%
+SD%Complete: 95%
SDComment:
SDCategory: Coilfang Reservoir, The Slave Pens
EndScriptData */
@@ -35,11 +35,11 @@ enum Say
enum Spells
{
- SPELL_TAINTED_STONESKIN_TOTEM = 31985,
- SPELL_TAINTED_EARTHGRAB_TOTEM = 31981,
- SPELL_CORRUPTED_NOVA_TOTEM = 31991,
- SPELL_MENNUS_HEALING_WARD = 34980,
- SPELL_LIGHTNING_BOLT = 35010
+ SPELL_TAINTED_STONESKIN_TOTEM = 31985, // every 30 sec if health below 100%
+ SPELL_TAINTED_EARTHGRAB_TOTEM = 31981, // ?
+ SPELL_CORRUPTED_NOVA_TOTEM = 31991, // ?
+ SPELL_MENNUS_HEALING_WARD = 34980, // every 14 - 25 sec
+ SPELL_LIGHTNING_BOLT = 35010 // every 14 - 19 sec
};
enum Events
@@ -47,7 +47,8 @@ enum Events
EVENT_TAINTED_STONESKIN_TOTEM = 1,
EVENT_TAINTED_EARTHGRAB_TOTEM = 2,
EVENT_CORRUPTED_NOVA_TOTEM = 3,
- EVENT_LIGHTNING_BOLT = 4
+ EVENT_MENNUS_HEALING_WARD = 4,
+ EVENT_LIGHTNING_BOLT = 5
};
class boss_mennu_the_betrayer : public CreatureScript
@@ -62,7 +63,6 @@ class boss_mennu_the_betrayer : public CreatureScript
void Reset() OVERRIDE
{
_Reset();
- healingWardDropped = false;
}
void JustDied(Unit* /*killer*/) OVERRIDE
@@ -74,10 +74,11 @@ class boss_mennu_the_betrayer : public CreatureScript
void EnterCombat(Unit* /*who*/) OVERRIDE
{
_EnterCombat();
- events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 18000);
- events.ScheduleEvent(EVENT_TAINTED_EARTHGRAB_TOTEM, 19000);
- events.ScheduleEvent(EVENT_CORRUPTED_NOVA_TOTEM, 20000);
- events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(5000, 8000));
+ events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30000);
+ events.ScheduleEvent(EVENT_TAINTED_EARTHGRAB_TOTEM, 20000);
+ events.ScheduleEvent(EVENT_CORRUPTED_NOVA_TOTEM, 60000);
+ events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, urand(14000, 25000));
+ events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(14000, 19000));
Talk(SAY_AGGRO);
}
@@ -101,7 +102,9 @@ class boss_mennu_the_betrayer : public CreatureScript
switch (eventId)
{
case EVENT_TAINTED_STONESKIN_TOTEM:
- DoCast(me, SPELL_TAINTED_STONESKIN_TOTEM);
+ if (HealthBelowPct(100))
+ DoCast(me, SPELL_TAINTED_STONESKIN_TOTEM);
+ events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30000);
break;
case EVENT_TAINTED_EARTHGRAB_TOTEM:
DoCast(me, SPELL_TAINTED_EARTHGRAB_TOTEM);
@@ -109,26 +112,21 @@ class boss_mennu_the_betrayer : public CreatureScript
case EVENT_CORRUPTED_NOVA_TOTEM:
DoCast(me, SPELL_CORRUPTED_NOVA_TOTEM);
break;
+ case EVENT_MENNUS_HEALING_WARD:
+ DoCast(me, SPELL_MENNUS_HEALING_WARD);
+ events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, urand(14000, 25000));
+ break;
case EVENT_LIGHTNING_BOLT:
DoCastVictim(SPELL_LIGHTNING_BOLT, true);
- events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(7000, 11000));
+ events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(14000, 25000));
break;
default:
break;
}
}
- if (HealthBelowPct(60) && !healingWardDropped)
- {
- DoCast(me, SPELL_MENNUS_HEALING_WARD);
- healingWardDropped = true;
- }
-
DoMeleeAttackIfReady();
}
-
- private:
- bool healingWardDropped;
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
new file mode 100644
index 00000000000..6cef7291542
--- /dev/null
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* ScriptData
+SDName: boss_quagmirran
+SD%Complete: 100%
+SDComment:
+SDCategory: Coilfang Reservoir, The Slave Pens
+EndScriptData */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "the_slave_pens.h"
+
+enum Spells
+{
+ SPELL_ACID_SPRAY = 38153,
+ SPELL_CLEAVE = 40504,
+ SPELL_UPPERCUT = 32055,
+ SPELL_POISON_BOLT_VOLLEY = 34780 // 39340
+};
+
+enum Events
+{
+ EVENT_ACID_SPRAY = 1,
+ EVENT_CLEAVE = 2,
+ EVENT_UPPERCUT = 3,
+ EVENT_POISON_BOLT_VOLLEY = 4
+};
+
+class boss_quagmirran : public CreatureScript
+{
+ public:
+ boss_quagmirran() : CreatureScript("boss_quagmirran") { }
+
+ struct boss_quagmirranAI : public BossAI
+ {
+ boss_quagmirranAI(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) { }
+
+ void Reset() OVERRIDE
+ {
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/) OVERRIDE
+ {
+ _JustDied();
+ }
+
+ void EnterCombat(Unit* /*who*/) OVERRIDE
+ {
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_ACID_SPRAY, 25000);
+ events.ScheduleEvent(EVENT_CLEAVE, 9000);
+ events.ScheduleEvent(EVENT_UPPERCUT, 20000);
+ events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 31000);
+ }
+
+ void KilledUnit(Unit* /*victim*/) OVERRIDE { }
+
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_ACID_SPRAY:
+ DoCastAOE(SPELL_ACID_SPRAY);
+ events.ScheduleEvent(EVENT_ACID_SPRAY, urand(20000, 25000));
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE, true);
+ events.ScheduleEvent(EVENT_CLEAVE, urand(18000, 34000));
+ break;
+ case EVENT_UPPERCUT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 10.0f, true))
+ DoCast(target, SPELL_UPPERCUT);
+ events.ScheduleEvent(EVENT_UPPERCUT, 22000);
+ break;
+ case EVENT_POISON_BOLT_VOLLEY:
+ DoCast(me, SPELL_POISON_BOLT_VOLLEY);
+ events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 24000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return new boss_quagmirranAI(creature);
+ }
+};
+
+void AddSC_boss_quagmirran()
+{
+ new boss_quagmirran();
+}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
new file mode 100644
index 00000000000..a025df5c3ae
--- /dev/null
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* ScriptData
+SDName: boss_rokmar_the_crackler
+SD%Complete: 100%
+SDComment:
+SDCategory: Coilfang Reservoir, The Slave Pens
+EndScriptData */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "the_slave_pens.h"
+
+enum Spells
+{
+ SPELL_GRIEVOUS_WOUND = 31956,
+ SPELL_ENSNARING_MOSS = 31948,
+ SPELL_WATER_SPIT = 35008,
+ SPELL_FRENZY = 34970
+};
+
+enum Events
+{
+ EVENT_GRIEVOUS_WOUND = 1,
+ EVENT_ENSNARING_MOSS = 2,
+ EVENT_WATER_SPIT = 3
+};
+
+class boss_rokmar_the_crackler : public CreatureScript
+{
+ public:
+ boss_rokmar_the_crackler() : CreatureScript("boss_rokmar_the_crackler") { }
+
+ struct boss_rokmar_the_cracklerAI : public BossAI
+ {
+ boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
+
+ void Reset() OVERRIDE
+ {
+ _Reset();
+ rokmarFrenzy = false;
+ }
+
+ void JustDied(Unit* /*killer*/) OVERRIDE
+ {
+ _JustDied();
+ }
+
+ void EnterCombat(Unit* /*who*/) OVERRIDE
+ {
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 10000);
+ events.ScheduleEvent(EVENT_ENSNARING_MOSS, 20000);
+ events.ScheduleEvent(EVENT_WATER_SPIT, 14000);
+ }
+
+ void KilledUnit(Unit* /*victim*/) OVERRIDE { }
+
+ void UpdateAI(uint32 diff) OVERRIDE
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_GRIEVOUS_WOUND:
+ DoCastVictim(SPELL_GRIEVOUS_WOUND, true);
+ events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, urand(20000, 30000));
+ break;
+ case EVENT_ENSNARING_MOSS:
+ DoCastAOE(SPELL_ENSNARING_MOSS);
+ events.ScheduleEvent(EVENT_ENSNARING_MOSS, urand(20000, 30000));
+ break;
+ case EVENT_WATER_SPIT:
+ DoCastAOE(SPELL_WATER_SPIT);
+ events.ScheduleEvent(EVENT_WATER_SPIT, urand(14000, 18000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (HealthBelowPct(10) && !rokmarFrenzy)
+ {
+ DoCast(me, SPELL_FRENZY);
+ rokmarFrenzy = true;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ bool rokmarFrenzy;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const OVERRIDE
+ {
+ return new boss_rokmar_the_cracklerAI(creature);
+ }
+};
+
+void AddSC_boss_rokmar_the_crackler()
+{
+ new boss_rokmar_the_crackler();
+}