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(); +}  | 
