diff options
| author | Malcrom <malcromdev@gmail.com> | 2014-09-21 19:05:59 -0230 |
|---|---|---|
| committer | Malcrom <malcromdev@gmail.com> | 2014-09-21 19:05:59 -0230 |
| commit | cc6e4d4608d10a8a95548ae91879456d52339334 (patch) | |
| tree | 25d4d1be6b832822723bd6445192cd888aa0b60e /src | |
| parent | 243b80defb0515a74238f967908931a7cb2c7c41 (diff) | |
Sripting/Blackrock Caverns: Start scripting for Blackrock Caverns
Diffstat (limited to 'src')
10 files changed, 1599 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 4b68aa6648b..bff413d73f4 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -112,6 +112,13 @@ void AddSC_boss_alizabal(); //Baradin Hold void AddSC_boss_occuthar(); void AddSC_boss_pit_lord_argaloth(); void AddSC_instance_baradin_hold(); +void AddSC_boss_romogg_bonecrusher(); //Blackrock Caverns +void AddSC_boss_corla(); +void AddSC_boss_karsh_steelbender(); +void AddSC_boss_beauty(); +void AddSC_boss_ascendant_lord_obsidius(); +void AddSC_blackrock_caverns(); +void AddSC_instance_blackrock_caverns(); void AddSC_blackrock_depths(); //Blackrock Depths void AddSC_boss_ambassador_flamelash(); void AddSC_boss_anubshiah(); @@ -832,6 +839,13 @@ void AddEasternKingdomsScripts() AddSC_boss_occuthar(); AddSC_boss_pit_lord_argaloth(); AddSC_instance_baradin_hold(); + AddSC_boss_romogg_bonecrusher(); //Blackrock Caverns + AddSC_boss_corla(); + AddSC_boss_karsh_steelbender(); + AddSC_boss_beauty(); + AddSC_boss_ascendant_lord_obsidius(); + AddSC_blackrock_caverns(); + AddSC_instance_blackrock_caverns(); AddSC_blackrock_depths(); //Blackrock Depths AddSC_boss_ambassador_flamelash(); AddSC_boss_anubshiah(); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp new file mode 100644 index 00000000000..9261eb85ba7 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp @@ -0,0 +1,864 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "blackrock_caverns.h" +#include "SpellScript.h" +#include "SpellAuras.h" +#include "player.h" + +/*##### +# npc_fire_cyclone +#####*/ + +enum FireCycloneSpells +{ + SPELL_FIRE_CYCLONE_AURA = 74851 +}; + +enum FireCycloneEvents +{ + EVENT_FIRE_CYCLONE_AURA = 1 +}; + +class npc_fire_cyclone : public CreatureScript +{ + public: npc_fire_cyclone() : CreatureScript("npc_fire_cyclone") {} + + struct npc_fire_cycloneAI : public ScriptedAI + { + npc_fire_cycloneAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + me->AddUnitState(UNIT_STATE_ROOT); + _events.ScheduleEvent(EVENT_FIRE_CYCLONE_AURA, 100); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_FIRE_CYCLONE_AURA: + DoCast(me, SPELL_FIRE_CYCLONE_AURA, true); + _events.ScheduleEvent(EVENT_FIRE_CYCLONE_AURA, 4000); + break; + default: + break; + } + } + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_fire_cycloneAI>(creature); + } +}; + +/*##### +# npc_twilight_flame_caller +#####*/ + +enum TwilightFlameCallerSpells +{ + SPELL_FIRE_CHANNELING_1 = 74911, + SPELL_FIRE_CHANNELING_2 = 74912, + SPELL_BLAST_WAVE = 76473, + SPELL_CALL_FLAMES = 76325 + +}; + +enum TwilightFlameCallerEvents +{ + EVENT_CHANNEL = 2, + EVENT_BLAST_WAVE = 3, + EVENT_CALL_FLAMES = 4 +}; + +class npc_twilight_flame_caller : public CreatureScript +{ + public: npc_twilight_flame_caller() : CreatureScript("npc_twilight_flame_caller") {} + + struct npc_twilight_flame_callerAI : public ScriptedAI + { + npc_twilight_flame_callerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + _flamecaller1GUID = 0; + _flamecaller2GUID = 0; + if (me->GetPositionX() > 172 && me->GetPositionX() < 173 && me->GetPositionY() > 1086 && me->GetPositionY() < 1087) + _flamecaller1GUID = me->GetGUID(); + if (me->GetPositionX() > 247 && me->GetPositionX() < 248 && me->GetPositionY() > 1081 && me->GetPositionY() < 1082) + _flamecaller2GUID = me->GetGUID(); + _events.ScheduleEvent(EVENT_CHANNEL, 100); + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_BLAST_WAVE, urand(8000, 10000)); + _events.ScheduleEvent(EVENT_CALL_FLAMES, urand(10000, 14000)); + } + + void UpdateAI(uint32 diff) override + { + + _events.Update(diff); + + if (!UpdateVictim()) + { + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CHANNEL: + if (me->GetGUID() == _flamecaller1GUID) + DoCast(me, SPELL_FIRE_CHANNELING_1); + if (me->GetGUID() == _flamecaller2GUID) + DoCast(me, SPELL_FIRE_CHANNELING_2); + _events.ScheduleEvent(EVENT_CHANNEL, 12000); + break; + default: + break; + } + } + return; + } + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_BLAST_WAVE: + DoCast(me, SPELL_BLAST_WAVE); + _events.ScheduleEvent(EVENT_BLAST_WAVE, 16000, 20000); + break; + case EVENT_CALL_FLAMES: + DoCast(me, SPELL_CALL_FLAMES); + _events.ScheduleEvent(EVENT_CALL_FLAMES, 12000, 15000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + uint64 _flamecaller1GUID; + uint64 _flamecaller2GUID; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_twilight_flame_callerAI>(creature); + } +}; + +/*##### +# npc_twilight_torturer +#####*/ + +enum TwilightTorturerSpells +{ + SPELL_INFLICT_PAIN = 75590, + SPELL_RED_HOT_POKER = 76478, + SPELL_SHACKLES = 76484, + SPELL_WILD_BEATDOWN = 76487 +}; + +enum TwilightTorturerEvents +{ + EVENT_INFLICT_PAIN_TT = 5, + EVENT_RED_HOT_POKER = 6, + EVENT_SHACKLES = 7, + EVENT_WILD_BEATDOWN = 8 +}; + +class npc_twilight_torturer : public CreatureScript +{ + public: npc_twilight_torturer() : CreatureScript("npc_twilight_torturer") {} + + struct npc_twilight_torturerAI : public ScriptedAI + { + npc_twilight_torturerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_RED_HOT_POKER, 9000); + _events.ScheduleEvent(EVENT_SHACKLES, 13000); + _events.ScheduleEvent(EVENT_WILD_BEATDOWN, 17000); + } + + void UpdateAI(uint32 diff) override + { + + _events.Update(diff); + + if (!UpdateVictim()) + { + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_INFLICT_PAIN_TT: + DoCast(me, SPELL_INFLICT_PAIN); + _events.ScheduleEvent(EVENT_INFLICT_PAIN_TT, urand(25000, 32000)); + break; + default: + break; + } + } + return; + } + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_RED_HOT_POKER: + DoCast(me, SPELL_RED_HOT_POKER); + _events.ScheduleEvent(EVENT_RED_HOT_POKER, 16000, 20000); + break; + case EVENT_SHACKLES: + DoCast(me, SPELL_SHACKLES); + _events.ScheduleEvent(EVENT_SHACKLES, 12000, 15000); + break; + case EVENT_WILD_BEATDOWN: + DoCast(me, SPELL_WILD_BEATDOWN); + _events.ScheduleEvent(EVENT_WILD_BEATDOWN, 12000, 15000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_twilight_torturerAI>(creature); + } +}; + +/*##### +# npc_twilight_sadist +#####*/ + +enum TwilightSadistSpells +{ + SPELL_INFLICT_PAIN_1 = 76497, + SPELL_HEAT_SEEKER_BLADE = 76502, + SPELL_SHORT_THROW = 76572, + SPELL_SINISTER_STRIKE = 76500 +}; + +enum TwilightSadistEvents +{ + EVENT_INFLICT_PAIN_TS = 9, + EVENT_HEAT_SEEKER_BLADE = 10, + EVENT_SHORT_THROW = 11, + EVENT_SINISTER_STRIKE = 12 +}; + +class npc_twilight_sadist : public CreatureScript +{ + public: npc_twilight_sadist() : CreatureScript("npc_twilight_sadist") {} + + struct npc_twilight_sadistAI : public ScriptedAI + { + npc_twilight_sadistAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + if(!me->GetWaypointPath()) + _events.ScheduleEvent(EVENT_INFLICT_PAIN_TS, urand(6000, 18000)); + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_INFLICT_PAIN_TS, 9000); + _events.ScheduleEvent(EVENT_HEAT_SEEKER_BLADE, 13000); + _events.ScheduleEvent(EVENT_SHORT_THROW, 17000); + _events.ScheduleEvent(EVENT_SINISTER_STRIKE, 17000); + } + + void UpdateAI(uint32 diff) override + { + + _events.Update(diff); + + if (!UpdateVictim()) + { + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_INFLICT_PAIN_TS: + DoCast(me, SPELL_INFLICT_PAIN); + _events.ScheduleEvent(EVENT_INFLICT_PAIN_TS, urand(25000, 32000)); + break; + default: + break; + } + } + return; + } + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_RED_HOT_POKER: + DoCast(me, SPELL_RED_HOT_POKER); + _events.ScheduleEvent(EVENT_RED_HOT_POKER, 16000, 20000); + break; + case EVENT_SHACKLES: + DoCast(me, SPELL_SHACKLES); + _events.ScheduleEvent(EVENT_SHACKLES, 12000, 15000); + break; + case EVENT_WILD_BEATDOWN: + DoCast(me, SPELL_WILD_BEATDOWN); + _events.ScheduleEvent(EVENT_WILD_BEATDOWN, 12000, 15000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_twilight_sadistAI>(creature); + } +}; + +/*##### +# npc_mad_prisoner +#####*/ + +enum MadPrisonerSpells +{ + SPELL_HEAD_CRACK = 77568, + SPELL_INFECTED_WOUND = 76512, + SPELL_ENRAGE = 8599 +}; + +enum MadPrisonerEvents +{ + EVENT_INFLICT_PAIN_MP1 = 13, + EVENT_HEAD_CRACK = 14, + EVENT_INFECTED_WOUND = 15, + EVENT_ENRAGE = 16 +}; + +class npc_mad_prisoner : public CreatureScript +{ + public: npc_mad_prisoner() : CreatureScript("npc_mad_prisoner") {} + + struct npc_mad_prisonerAI : public ScriptedAI + { + npc_mad_prisonerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + _events.ScheduleEvent(EVENT_INFLICT_PAIN_MP1, urand(6000, 18000)); + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_HEAD_CRACK, 9000); + _events.ScheduleEvent(EVENT_INFECTED_WOUND, 13000); + _events.ScheduleEvent(EVENT_ENRAGE, 17000); + } + + void UpdateAI(uint32 diff) override + { + + _events.Update(diff); + + if (!UpdateVictim()) + { + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_INFLICT_PAIN_MP1: + DoCast(me, SPELL_INFLICT_PAIN); + _events.ScheduleEvent(EVENT_INFLICT_PAIN_MP1, urand(25000, 32000)); + break; + default: + break; + } + } + return; + } + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_HEAD_CRACK: + DoCast(me, SPELL_HEAD_CRACK); + _events.ScheduleEvent(EVENT_HEAD_CRACK, 16000, 20000); + break; + case EVENT_INFECTED_WOUND: + DoCast(me, SPELL_INFECTED_WOUND); + _events.ScheduleEvent(EVENT_INFECTED_WOUND, 12000, 15000); + break; + case EVENT_ENRAGE: + DoCast(me, SPELL_ENRAGE); + _events.ScheduleEvent(EVENT_ENRAGE, 12000, 15000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_mad_prisonerAI>(creature); + } +}; + +/*##### +# npc_crazed_mage +#####*/ + +enum CrazedMageEvents +{ + EVENT_INFLICT_PAIN_MP2 = 17, + EVENT_HEAD_CRACK2 = 18, + EVENT_INFECTED_WOUND2 = 19, + EVENT_ENRAGE2 = 20 +}; + +class npc_crazed_mage : public CreatureScript +{ + public: npc_crazed_mage() : CreatureScript("npc_crazed_mage") {} + + struct npc_crazed_mageAI : public ScriptedAI + { + npc_crazed_mageAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + _events.ScheduleEvent(EVENT_INFLICT_PAIN_MP2, urand(6000, 18000)); + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_HEAD_CRACK2, 9000); + _events.ScheduleEvent(EVENT_INFECTED_WOUND2, 13000); + _events.ScheduleEvent(EVENT_ENRAGE2, 17000); + } + + void UpdateAI(uint32 diff) override + { + + _events.Update(diff); + + if (!UpdateVictim()) + { + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_INFLICT_PAIN_MP2: + DoCast(me, SPELL_INFLICT_PAIN); + _events.ScheduleEvent(EVENT_INFLICT_PAIN_MP2, urand(25000, 32000)); + break; + default: + break; + } + } + return; + } + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_HEAD_CRACK2: + DoCast(me, SPELL_HEAD_CRACK); + _events.ScheduleEvent(EVENT_HEAD_CRACK2, 16000, 20000); + break; + case EVENT_INFECTED_WOUND2: + DoCast(me, SPELL_INFECTED_WOUND); + _events.ScheduleEvent(EVENT_INFECTED_WOUND2, 12000, 15000); + break; + case EVENT_ENRAGE2: + DoCast(me, SPELL_ENRAGE); + _events.ScheduleEvent(EVENT_ENRAGE2, 12000, 15000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_crazed_mageAI>(creature); + } +}; + +/*##### +# npc_raz_the_crazed +#####*/ + +enum RazTheCrazedSpells +{ + SPELL_AGGRO_NEARBY_TARGETS = 80196, + SPELL_SHADOW_PRISON = 79725 +}; + +enum RazTheCrazedEvents +{ +}; + +class npc_raz_the_crazed : public CreatureScript +{ + public: npc_raz_the_crazed() : CreatureScript("npc_raz_the_crazed") {} + + struct npc_raz_the_crazedAI : public ScriptedAI + { + npc_raz_the_crazedAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void Reset() override + { + } + + void EnterCombat(Unit* /*who*/) override + { + } + + void IsSummonedBy(Unit* summoner) override + { + if (summoner->GetEntry() == NPC_ROMOGG_BONECRUSHER) + { + me->SetDisableGravity(true); + DoCast(me, SPELL_AGGRO_NEARBY_TARGETS); + DoCast(me, SPELL_SHADOW_PRISON); + } + } + + void UpdateAI(uint32 diff) override + { + + _events.Update(diff); + + if (!UpdateVictim()) + return; + + /*while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + default: + break; + } + }*/ + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_raz_the_crazedAI>(creature); + } +}; + +/*##### +# npc_chains_of_woe +#####*/ + +enum ChainsOfWoeSpells +{ + SPELL_CHAINS_OF_WOE_1 = 75437, + SPELL_CHAINS_OF_WOE_2 = 75441, + SPELL_CHAINS_OF_WOE_3 = 75464, + SPELL_CHAINS_OF_WOE_4 = 82189, + SPELL_CHAINS_OF_WOE_5 = 82192 +}; + +enum ChainsOfWoeModel +{ + MODEL_INVISIBLE = 38330 +}; + +class npc_chains_of_woe : public CreatureScript +{ + public: npc_chains_of_woe() : CreatureScript("npc_chains_of_woe") {} + + struct npc_chains_of_woeAI : public ScriptedAI + { + npc_chains_of_woeAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + + void IsSummonedBy(Unit* /*summoner*/) + { + me->SetDisplayId(MODEL_INVISIBLE); + DoCast(me, SPELL_CHAINS_OF_WOE_1, true); + DoCast(me, SPELL_CHAINS_OF_WOE_2, true); + } + + private: + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetBlackrockCavernsAI<npc_chains_of_woeAI>(creature); + } +}; + + +/*##### +# spell_chains_of_woe_1 +#####*/ + +class spell_chains_of_woe_1 : public SpellScriptLoader +{ + public: spell_chains_of_woe_1() : SpellScriptLoader("spell_chains_of_woe_1") { } + + class spell_chains_of_woe_1_SpellScript : public SpellScript + { + PrepareSpellScript(spell_chains_of_woe_1_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_CHAINS_OF_WOE_1)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* playerTarget = GetHitPlayer()) + { + Unit* caster = GetCaster(); + playerTarget->CastSpell(caster, SPELL_CHAINS_OF_WOE_3, true, NULL); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_chains_of_woe_1_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_chains_of_woe_1_SpellScript(); + } +}; + +/*##### +# spell_chains_of_woe_4 +#####*/ + +class spell_chains_of_woe_4 : public SpellScriptLoader +{ + public: spell_chains_of_woe_4() : SpellScriptLoader("spell_chains_of_woe_4") { } + + class spell_chains_of_woe_4_SpellScript : public SpellScript + { + PrepareSpellScript(spell_chains_of_woe_4_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_CHAINS_OF_WOE_4)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Player* playerTarget = GetHitPlayer()) + { + playerTarget->CastSpell(playerTarget, SPELL_CHAINS_OF_WOE_5, true, NULL); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_chains_of_woe_4_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_chains_of_woe_4_SpellScript(); + } +}; + +/*##### +# spell_nether_dragon_essence_1 +#####*/ + +enum NetherDragonEssence +{ + SPELL_NETHER_DRAGON_ESSENCE_1 = 75649, + SPELL_NETHER_DRAGON_ESSENCE_2 = 75650, + SPELL_NETHER_DRAGON_ESSENCE_3 = 75653, + SPELL_NETHER_DRAGON_ESSENCE_4 = 75654 +}; + +class spell_nether_dragon_essence_1 : public SpellScriptLoader +{ +public: spell_nether_dragon_essence_1() : SpellScriptLoader("spell_nether_dragon_essence_1") { } + + class spell_nether_dragon_essence_1_AuraScript : public AuraScript + { + PrepareAuraScript(spell_nether_dragon_essence_1_AuraScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_NETHER_DRAGON_ESSENCE_2) || !sSpellMgr->GetSpellInfo(SPELL_NETHER_DRAGON_ESSENCE_3) || !sSpellMgr->GetSpellInfo(SPELL_NETHER_DRAGON_ESSENCE_4)) + return false; + return true; + } + + void HandleTriggerSpell(AuraEffect const* /*aurEff*/) + { + if (Unit* caster = GetCaster()) + caster->CastSpell(caster, RAND(SPELL_NETHER_DRAGON_ESSENCE_2, SPELL_NETHER_DRAGON_ESSENCE_3, SPELL_NETHER_DRAGON_ESSENCE_4)); + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_nether_dragon_essence_1_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_nether_dragon_essence_1_AuraScript(); + } +}; + +/*##### +# spell_nether_dragon_essence_2 +#####*/ + +class spell_nether_dragon_essence_2 : public SpellScriptLoader +{ + public: spell_nether_dragon_essence_2() : SpellScriptLoader("spell_nether_dragon_essence_2") { } + + class spell_nether_dragon_essence_2_SpellScript : public SpellScript + { + PrepareSpellScript(spell_nether_dragon_essence_2_SpellScript); + + void ModDestHeight(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + { + float posZ = 0; + + switch (GetSpellInfo()->Id) + { + case SPELL_NETHER_DRAGON_ESSENCE_2: + posZ = 25.0f; + break; + case SPELL_NETHER_DRAGON_ESSENCE_3: + posZ = 17.0f; + break; + case SPELL_NETHER_DRAGON_ESSENCE_4: + posZ = 33.0f; + break; + } + + float posX = frand(-35.0f, 35.0f); + float posY = frand(-25.0f, 25.0f); + Position offset = {posX, posY, posZ, 0.0f}; + const_cast<WorldLocation*>(GetExplTargetDest())->RelocateOffset(offset); + } + } + + void Register() + { + OnEffectLaunch += SpellEffectFn(spell_nether_dragon_essence_2_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_nether_dragon_essence_2_SpellScript(); + } +}; + +void AddSC_blackrock_caverns() +{ + // Creature Scripts + new npc_fire_cyclone(); + new npc_twilight_flame_caller(); + new npc_twilight_torturer(); + new npc_twilight_sadist(); + new npc_mad_prisoner(); + new npc_crazed_mage(); + new npc_raz_the_crazed(); + new npc_chains_of_woe(); + // Spell Scripts + new spell_chains_of_woe_1(); + new spell_chains_of_woe_4(); + new spell_nether_dragon_essence_1(); + new spell_nether_dragon_essence_2(); +} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h new file mode 100644 index 00000000000..bdfdda87736 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h @@ -0,0 +1,51 @@ +/* + * 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/>. + */ + +#ifndef DEF_BLACKROCKCAVERNS_H +#define DEF_BLACKROCKCAVERNS_H + +#define BCScriptName "instance_blackrock_caverns" + +uint32 const EncounterCount = 5; + +enum DataTypes +{ + DATA_ROMOGG_BONECRUSHER = 0, + DATA_CORLA = 1, + DATA_KARSH_STEELBENDER = 2, + DATA_BEAUTY = 3, + DATA_ASCENDANT_LORD_OBSIDIUS = 4 +}; + +enum CreatureIds +{ + NPC_TWILIGHT_FLAME_CALLER = 39708, + NPC_RAZ_THE_CRAZED = 39670, + NPC_ROMOGG_BONECRUSHER = 39665 +}; + +template<class AI> +CreatureAI* GetBlackrockCavernsAI(Creature* creature) +{ + if (InstanceMap* instance = creature->GetMap()->ToInstanceMap()) + if (instance->GetInstanceScript()) + if (instance->GetScriptId() == sObjectMgr->GetScriptId(BCScriptName)) + return new AI(creature); + return NULL; +} + +#endif diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_ascendant_lord_obsidius.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_ascendant_lord_obsidius.cpp new file mode 100644 index 00000000000..fc64a1a65d9 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_ascendant_lord_obsidius.cpp @@ -0,0 +1,112 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "blackrock_caverns.h" + +enum Text +{ + YELL_AGGRO = 0, + YELL_KILL = 1, + YELL_SWITCHING_SHADOWS = 2, + YELL_DEATH = 3, + EMOTE_SWITCHING_SHADOWS = 4 +}; + +enum Spells +{ + SPELL_MANA_TAP = 36021, + SPELL_ARCANE_TORRENT = 36022, + SPELL_DOMINATION = 35280, +}; + +enum Events +{ + EVENT_MANA_TAP = 0, + EVENT_ARCANE_TORRENT = 1, + EVENT_DOMINATION = 2 +}; + +class boss_ascendant_lord_obsidius : public CreatureScript +{ + public: + boss_ascendant_lord_obsidius(): CreatureScript("boss_ascendant_lord_obsidius") {} + + struct boss_ascendant_lord_obsidiusAI : public BossAI + { + boss_ascendant_lord_obsidiusAI(Creature* creature) : BossAI(creature, DATA_ASCENDANT_LORD_OBSIDIUS) { } + + void Reset() override + { + + } + + void EnterCombat(Unit* /*who*/) override + { + _EnterCombat(); + events.ScheduleEvent(EVENT_MANA_TAP, 30000); + Talk(YELL_AGGRO); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(YELL_KILL); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(YELL_DEATH); + } + + 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_MANA_TAP: + DoCastVictim(SPELL_MANA_TAP, true); + events.ScheduleEvent(EVENT_MANA_TAP, urand(14000, 22000)); + break; + } + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_ascendant_lord_obsidiusAI (creature); + } +}; + +void AddSC_boss_ascendant_lord_obsidius() +{ + new boss_ascendant_lord_obsidius(); +} + diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp new file mode 100644 index 00000000000..bc6a8ffbc20 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp @@ -0,0 +1,118 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "blackrock_caverns.h" + +enum Sounds +{ + SOUND_AGGRO = 18559, + SOUND_DEATH = 18563 +}; + +enum Spells +{ + SPELL_TERRIFYING_ROAR = 76028, // Not yet Implemented + SPELL_BERSERKER_CHARGE = 76030, + SPELL_MAGMA_SPIT = 76031, + SPELL_FLAMEBREAK = 76032, + SPELL_BERSERK = 82395 // Not yet Implemented +}; + +enum Events +{ + EVENT_TERRIFYING_ROAR = 0, + EVENT_BERSERKER_CHARGE = 1, + EVENT_MAGMA_SPIT = 2, + EVENT_FLAMEBREAK = 3, + EVENT_BERSERK = 4, +}; + +class boss_beauty : public CreatureScript +{ + public: boss_beauty(): CreatureScript("boss_beauty") {} + + struct boss_beautyAI : public BossAI + { + boss_beautyAI(Creature* creature) : BossAI(creature, DATA_BEAUTY) {} + + void Reset() override + { + + } + + void EnterCombat(Unit* who) override + { + _EnterCombat(); + events.ScheduleEvent(SPELL_MAGMA_SPIT, urand(7000, 10000)); + events.ScheduleEvent(EVENT_BERSERKER_CHARGE, urand(16000, 19000)); + events.ScheduleEvent(EVENT_FLAMEBREAK, urand(18000, 22000)); + DoPlaySoundToSet(me, SOUND_AGGRO); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + DoPlaySoundToSet(me, SOUND_DEATH); + } + + 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 SPELL_MAGMA_SPIT: + DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_MAGMA_SPIT, true); + events.ScheduleEvent(SPELL_MAGMA_SPIT, urand(7000, 10000)); + break; + case EVENT_BERSERKER_CHARGE: + DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_BERSERKER_CHARGE, true); + events.ScheduleEvent(EVENT_BERSERKER_CHARGE, urand(16000, 19000)); + break; + case EVENT_FLAMEBREAK: + DoCast(me, SPELL_FLAMEBREAK); + events.ScheduleEvent(EVENT_FLAMEBREAK, urand(18000, 22000)); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_beautyAI(creature); + } +}; + +void AddSC_boss_beauty() +{ + new boss_beauty(); +} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp new file mode 100644 index 00000000000..c51316812ff --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp @@ -0,0 +1,92 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "blackrock_caverns.h" + +enum Text +{ + YELL_AGGRO = 0, + YELL_KILL = 1, + YELL_EVOLVED_ZEALOT = 2, + YELL_DEATH = 3, + EMOTE_EVOLVED_ZEALOT = 4 +}; + +enum Spells +{ + SPELL_SHADOW_POWER = 35322, + H_SPELL_SHADOW_POWER = 39193 +}; + +enum Events +{ + +}; + +class boss_corla : public CreatureScript +{ + public: + boss_corla(): CreatureScript("boss_corla") {} + + struct boss_corlaAI : public BossAI + { + boss_corlaAI(Creature* creature) : BossAI(creature, DATA_CORLA) {} + + void Reset() override + { + + } + + void EnterCombat(Unit* /*who*/) override + { + _EnterCombat(); + Talk(YELL_AGGRO); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(YELL_KILL); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(YELL_DEATH); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_corlaAI(creature); + } +}; + +void AddSC_boss_corla() +{ + new boss_corla(); +} + diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp new file mode 100644 index 00000000000..89b518992aa --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp @@ -0,0 +1,113 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "blackrock_caverns.h" + +enum Text +{ + YELL_AGGRO = 0, + YELL_KILL = 1, + YELL_QUICKSILVER_ARMOR = 2, + YELL_DEATH = 3, + EMOTE_QUICKSILVER_ARMOR = 4 +}; + +enum Spells +{ + SPELL_CLEAVE = 15284, + SPELL_QUICKSILVER_ARMOR = 75842, + SPELL_SUPERHEATED_QUICKSILVER_ARMOR = 75846 +}; + +enum Events +{ + EVENT_CLEAVE = 0, + EVENT_QUICKSILVER_ARMOR = 1, + EVENT_SUPERHEATED_QUICKSILVER_ARMOR = 2 +}; + +class boss_karsh_steelbender : public CreatureScript +{ + public: + boss_karsh_steelbender() : CreatureScript("boss_karsh_steelbender") { } + + struct boss_karsh_steelbenderAI : public BossAI + { + boss_karsh_steelbenderAI(Creature* creature) : BossAI(creature, DATA_KARSH_STEELBENDER) { } + + void Reset() override + { + + } + + void EnterCombat(Unit* /*who*/) override + { + _EnterCombat(); + Talk(YELL_AGGRO); + events.ScheduleEvent(EVENT_CLEAVE, 10000); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(YELL_KILL); + } + + void JustDied(Unit* /*victim*/) override + { + _JustDied(); + Talk(YELL_DEATH); + } + + 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_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + events.ScheduleEvent(EVENT_CLEAVE, 10000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_karsh_steelbenderAI(creature); + } +}; + +void AddSC_boss_karsh_steelbender() +{ + new boss_karsh_steelbender(); +} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp new file mode 100644 index 00000000000..240d1f661b7 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp @@ -0,0 +1,140 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "blackrock_caverns.h" + +enum Say +{ + YELL_AGGRO = 0, + YELL_KILL = 1, + YELL_SKULLCRACKER = 2, + YELL_DEATH = 3, + EMOTE_CALL_FOR_HELP = 4, + EMOTE_SKULLCRACKER = 5 +}; + +enum Spells +{ + SPELL_CALL_FOR_HELP = 82137, // Needs Scripting + SPELL_CHAINS_OF_WOE = 75539, + SPELL_QUAKE = 75272, + SPELL_SKULLCRACKER = 75543, + SPELL_WOUNDING_STRIKE = 75571 +}; + +enum Events +{ + EVENT_CHAINS_OF_WOE = 1, + EVENT_QUAKE = 2, // Not yet sure of timing + EVENT_SKULLCRACKER = 3, + EVENT_WOUNDING_STRIKE = 4 +}; + +Position const SummonPos[1] = +{ + { 249.2639f, 949.1614f, 191.7866f, 3.141593f } +}; + +class boss_romogg_bonecrusher : public CreatureScript +{ + public: + boss_romogg_bonecrusher() : CreatureScript("boss_romogg_bonecrusher") {} + + struct boss_romogg_bonecrusherAI : public BossAI + { + boss_romogg_bonecrusherAI(Creature* creature) : BossAI(creature, DATA_ROMOGG_BONECRUSHER) {} + + void Reset() override + { + if(instance) + me->SummonCreature(NPC_RAZ_THE_CRAZED, SummonPos[0], TEMPSUMMON_MANUAL_DESPAWN, 200000); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(YELL_DEATH); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(YELL_KILL); + } + + void EnterCombat(Unit* /*who*/) override + { + _EnterCombat(); + events.ScheduleEvent(EVENT_CHAINS_OF_WOE, urand(22000, 32000)); + events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(26000, 32000)); + events.ScheduleEvent(EVENT_QUAKE, 45000); + Talk(YELL_AGGRO); + Talk(EMOTE_CALL_FOR_HELP); + DoCast(me, SPELL_CALL_FOR_HELP); + } + + 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_CHAINS_OF_WOE: + Talk(YELL_SKULLCRACKER); + DoCast(me, SPELL_CHAINS_OF_WOE); + events.ScheduleEvent(EVENT_CHAINS_OF_WOE, urand(22000, 32000)); + events.ScheduleEvent(EVENT_SKULLCRACKER, 3000); + break; + case EVENT_SKULLCRACKER: + Talk(EMOTE_SKULLCRACKER); + DoCast(me, SPELL_SKULLCRACKER); + break; + case EVENT_QUAKE: + DoCast(me, SPELL_QUAKE); + events.ScheduleEvent(EVENT_QUAKE, urand(32000, 40000)); + break; + case EVENT_WOUNDING_STRIKE: + DoCastVictim(SPELL_WOUNDING_STRIKE, true); + events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(26000, 32000)); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_romogg_bonecrusherAI (creature); + } +}; + +void AddSC_boss_romogg_bonecrusher() +{ + new boss_romogg_bonecrusher(); +} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp new file mode 100644 index 00000000000..0279ee268d6 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp @@ -0,0 +1,87 @@ +/* + * 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/>. + */ + +#include "ScriptMgr.h" +#include "InstanceScript.h" +#include "blackrock_caverns.h" + +class instance_blackrock_caverns : public InstanceMapScript +{ + public: + instance_blackrock_caverns(): InstanceMapScript(BCScriptName, 645) { } + + struct instance_blackrock_caverns_InstanceMapScript : public InstanceScript + { + instance_blackrock_caverns_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetBossNumber(EncounterCount); + } + + void OnCreatureCreate(Creature* creature) + { + switch (creature->GetEntry()) + { + case NPC_TWILIGHT_FLAME_CALLER: + break; + default: + break; + } + } + + uint64 GetData64(uint32 type) const + { + switch (type) + { + case NPC_TWILIGHT_FLAME_CALLER: + default: + break; + } + + return 0; + } + + bool SetBossState(uint32 type, EncounterState state) + { + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_ROMOGG_BONECRUSHER: + case DATA_CORLA: + case DATA_KARSH_STEELBENDER: + case DATA_BEAUTY: + case DATA_ASCENDANT_LORD_OBSIDIUS: + break; + default: + break; + } + + return true; + } + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const + { + return new instance_blackrock_caverns_InstanceMapScript(map); + } +}; + +void AddSC_instance_blackrock_caverns() +{ + new instance_blackrock_caverns(); +} diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt index 7f3ca8c6b3f..83fdf513f01 100644 --- a/src/server/scripts/EasternKingdoms/CMakeLists.txt +++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt @@ -20,6 +20,14 @@ set(scripts_STAT_SRCS EasternKingdoms/BaradinHold/boss_occuthar.cpp EasternKingdoms/BaradinHold/boss_pit_lord_argaloth.cpp EasternKingdoms/BaradinHold/instance_baradin_hold.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_ascendant_lord_obsidius.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp + EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp |
