diff options
Diffstat (limited to 'src')
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(); +} |