diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2014-09-23 20:47:05 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2014-09-23 20:47:05 +0200 |
commit | c695c084b8761a78cdf61a2a1acec19a75b534d0 (patch) | |
tree | 70ae163de0c65851f30299e371f099c45ddfbe86 /src | |
parent | f72125a318cb2d11c97535c49981377d118a7f5b (diff) |
Scripts: update blackrock caverns
Diffstat (limited to 'src')
8 files changed, 208 insertions, 202 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp index 4b75f425e21..4b40660fafc 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -35,7 +35,7 @@ enum FireCyclone class npc_fire_cyclone : public CreatureScript { - public: npc_fire_cyclone() : CreatureScript("npc_fire_cyclone") {} + public: npc_fire_cyclone() : CreatureScript("npc_fire_cyclone") { } struct npc_fire_cycloneAI : public ScriptedAI { @@ -43,7 +43,8 @@ class npc_fire_cyclone : public CreatureScript void Reset() override { - _events.ScheduleEvent(EVENT_FIRE_CYCLONE_AURA, 100); + _events.Reset(); + _events.ScheduleEvent(EVENT_FIRE_CYCLONE_AURA, 100); } void UpdateAI(uint32 diff) override @@ -69,7 +70,7 @@ class npc_fire_cyclone : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_fire_cycloneAI>(creature); } @@ -103,36 +104,42 @@ Position const SummonPos[6] = class npc_twilight_flame_caller : public CreatureScript { -public: npc_twilight_flame_caller() : CreatureScript("npc_twilight_flame_caller") {} +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), _summons(me), _instance(creature->GetInstanceScript()) { } + npc_twilight_flame_callerAI(Creature* creature) : ScriptedAI(creature), _summons(me), _instance(creature->GetInstanceScript()) + { + Initialize(); + } - void Reset() override + void Initialize() { _combatPhase = false; - _flamecaller1GUID = 0; - _flamecaller2GUID = 0; + } + + void Reset() override + { + Initialize(); + _flamecaller1GUID.Clear(); + _flamecaller2GUID.Clear(); - if (_instance) + if (me->GetPositionX() > 172 && me->GetPositionX() < 173 && me->GetPositionY() > 1086 && me->GetPositionY() < 1087) { - if (me->GetPositionX() > 172 && me->GetPositionX() < 173 && me->GetPositionY() > 1086 && me->GetPositionY() < 1087) - { - _flamecaller1GUID = me->GetGUID(); - me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[0], TEMPSUMMON_CORPSE_DESPAWN, 0); - me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[1], TEMPSUMMON_CORPSE_DESPAWN, 0); - me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[2], TEMPSUMMON_CORPSE_DESPAWN, 0); - } - if (me->GetPositionX() > 247 && me->GetPositionX() < 248 && me->GetPositionY() > 1081 && me->GetPositionY() < 1082) - { - _flamecaller2GUID = me->GetGUID(); - me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[3], TEMPSUMMON_CORPSE_DESPAWN, 0); - me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[4], TEMPSUMMON_CORPSE_DESPAWN, 0); - me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[5], TEMPSUMMON_CORPSE_DESPAWN, 0); - } - _events.ScheduleEvent(EVENT_CHANNEL, 100); + _flamecaller1GUID = me->GetGUID(); + me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[0], TEMPSUMMON_CORPSE_DESPAWN, 0); + me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[1], TEMPSUMMON_CORPSE_DESPAWN, 0); + me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[2], TEMPSUMMON_CORPSE_DESPAWN, 0); } + if (me->GetPositionX() > 247 && me->GetPositionX() < 248 && me->GetPositionY() > 1081 && me->GetPositionY() < 1082) + { + _flamecaller2GUID = me->GetGUID(); + me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[3], TEMPSUMMON_CORPSE_DESPAWN, 0); + me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[4], TEMPSUMMON_CORPSE_DESPAWN, 0); + me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[5], TEMPSUMMON_CORPSE_DESPAWN, 0); + } + + _events.ScheduleEvent(EVENT_CHANNEL, 100); } void JustSummoned(Creature* summoned) override @@ -196,19 +203,20 @@ public: npc_twilight_flame_caller() : CreatureScript("npc_twilight_flame_caller" break; } } + DoMeleeAttackIfReady(); } private: EventMap _events; InstanceScript* _instance; - uint64 _flamecaller1GUID; - uint64 _flamecaller2GUID; + ObjectGuid _flamecaller1GUID; + ObjectGuid _flamecaller2GUID; SummonList _summons; bool _combatPhase; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_twilight_flame_callerAI>(creature); } @@ -232,15 +240,23 @@ enum TwilightTorturer class npc_twilight_torturer : public CreatureScript { - public: npc_twilight_torturer() : CreatureScript("npc_twilight_torturer") {} + public: npc_twilight_torturer() : CreatureScript("npc_twilight_torturer") { } struct npc_twilight_torturerAI : public ScriptedAI { - npc_twilight_torturerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + npc_twilight_torturerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) + { + Initialize(); + } - void Reset() override + void Initialize() { _combatPhase = false; + } + + void Reset() override + { + Initialize(); if (!me->GetWaypointPath()) _events.ScheduleEvent(EVENT_INFLICT_PAIN_TT, urand(6000, 18000)); } @@ -298,6 +314,7 @@ class npc_twilight_torturer : public CreatureScript break; } } + DoMeleeAttackIfReady(); } @@ -307,7 +324,7 @@ class npc_twilight_torturer : public CreatureScript bool _combatPhase; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_twilight_torturerAI>(creature); } @@ -331,7 +348,7 @@ enum TwilightSadist class npc_twilight_sadist : public CreatureScript { - public: npc_twilight_sadist() : CreatureScript("npc_twilight_sadist") {} + public: npc_twilight_sadist() : CreatureScript("npc_twilight_sadist") { } struct npc_twilight_sadistAI : public ScriptedAI { @@ -398,6 +415,7 @@ class npc_twilight_sadist : public CreatureScript break; } } + DoMeleeAttackIfReady(); } @@ -407,7 +425,7 @@ class npc_twilight_sadist : public CreatureScript bool _combatPhase; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_twilight_sadistAI>(creature); } @@ -429,16 +447,17 @@ enum MadPrisoner class npc_mad_prisoner : public CreatureScript { - public: npc_mad_prisoner() : CreatureScript("npc_mad_prisoner") {} + 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 {} + void Reset() override { } void EnterCombat(Unit* /*who*/) override { + _events.Reset(); _events.ScheduleEvent(EVENT_HEAD_CRACK, 9000); _events.ScheduleEvent(EVENT_INFECTED_WOUND, 13000); _events.ScheduleEvent(EVENT_ENRAGE, 17000); @@ -479,7 +498,7 @@ class npc_mad_prisoner : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_mad_prisonerAI>(creature); } @@ -498,16 +517,17 @@ enum CrazedMage class npc_crazed_mage : public CreatureScript { - public: npc_crazed_mage() : CreatureScript("npc_crazed_mage") {} + 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 {} + void Reset() override { } void EnterCombat(Unit* /*who*/) override { + _events.Reset(); _events.ScheduleEvent(EVENT_HEAD_CRACK2, 9000); _events.ScheduleEvent(EVENT_INFECTED_WOUND2, 13000); _events.ScheduleEvent(EVENT_ENRAGE2, 17000); @@ -540,6 +560,7 @@ class npc_crazed_mage : public CreatureScript break; } } + DoMeleeAttackIfReady(); } @@ -548,7 +569,7 @@ class npc_crazed_mage : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_crazed_mageAI>(creature); } @@ -575,16 +596,17 @@ enum RazTheCrazed class npc_raz_the_crazed : public CreatureScript { - public: npc_raz_the_crazed() : CreatureScript("npc_raz_the_crazed") {} + 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 Reset() override { } void EnterCombat(Unit* /*who*/) override { + _events.Reset(); _events.ScheduleEvent(SPELL_FURIOUS_SWIPE, 500); } @@ -617,7 +639,7 @@ class npc_raz_the_crazed : public CreatureScript { switch (eventId) { - case EVENT_AGGO_NEARBY_TARGETS: + case EVENT_AGGO_NEARBY_TARGETS: DoCast(me, SPELL_AGGRO_NEARBY_TARGETS); _events.ScheduleEvent(EVENT_AGGO_NEARBY_TARGETS, 1500); break; @@ -632,6 +654,7 @@ class npc_raz_the_crazed : public CreatureScript break; } } + DoMeleeAttackIfReady(); } @@ -640,7 +663,7 @@ class npc_raz_the_crazed : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_raz_the_crazedAI>(creature); } @@ -662,13 +685,13 @@ enum ChainsOfWoe class npc_chains_of_woe : public CreatureScript { - public: npc_chains_of_woe() : CreatureScript("npc_chains_of_woe") {} + 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*/) + void IsSummonedBy(Unit* /*summoner*/) override { me->SetDisplayId(MODEL_INVISIBLE); DoCast(me, SPELL_CHAINS_OF_WOE_1, true); @@ -679,13 +702,12 @@ class npc_chains_of_woe : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { return GetBlackrockCavernsAI<npc_chains_of_woeAI>(creature); } }; - /*##### # spell_chains_of_woe_1 #####*/ @@ -698,29 +720,26 @@ class spell_chains_of_woe_1 : public SpellScriptLoader { PrepareSpellScript(spell_chains_of_woe_1_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CHAINS_OF_WOE_1)) return false; return true; } - void HandleScriptEffect(SpellEffIndex /* effIndex */) + void HandleScriptEffect(SpellEffIndex /*effIndex*/) { if (Player* playerTarget = GetHitPlayer()) - { - Unit* caster = GetCaster(); - playerTarget->CastSpell(caster, SPELL_CHAINS_OF_WOE_3, true, NULL); - } + playerTarget->CastSpell(GetCaster(), SPELL_CHAINS_OF_WOE_3, true); } - void Register() + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_chains_of_woe_1_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const + SpellScript* GetSpellScript() const override { return new spell_chains_of_woe_1_SpellScript(); } @@ -738,28 +757,26 @@ class spell_chains_of_woe_4 : public SpellScriptLoader { PrepareSpellScript(spell_chains_of_woe_4_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CHAINS_OF_WOE_4)) return false; return true; } - void HandleScriptEffect(SpellEffIndex /* effIndex */) + void HandleScriptEffect(SpellEffIndex /*effIndex*/) { if (Player* playerTarget = GetHitPlayer()) - { - playerTarget->CastSpell(playerTarget, SPELL_CHAINS_OF_WOE_5, true, NULL); - } + playerTarget->CastSpell(playerTarget, SPELL_CHAINS_OF_WOE_5, true); } - void Register() + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_chains_of_woe_4_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const + SpellScript* GetSpellScript() const override { return new spell_chains_of_woe_4_SpellScript(); } @@ -779,35 +796,37 @@ enum NetherDragonEssence class spell_nether_dragon_essence_1 : public SpellScriptLoader { -public: spell_nether_dragon_essence_1() : SpellScriptLoader("spell_nether_dragon_essence_1") { } + 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*/) + class spell_nether_dragon_essence_1_AuraScript : public AuraScript { - 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; - } + PrepareAuraScript(spell_nether_dragon_essence_1_AuraScript); - 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)); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + 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() + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_nether_dragon_essence_1_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const override { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_nether_dragon_essence_1_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + return new spell_nether_dragon_essence_1_AuraScript(); } - }; - - AuraScript* GetAuraScript() const - { - return new spell_nether_dragon_essence_1_AuraScript(); - } }; /*##### @@ -816,45 +835,40 @@ public: spell_nether_dragon_essence_1() : SpellScriptLoader("spell_nether_dragon class spell_nether_dragon_essence_2 : public SpellScriptLoader { - public: spell_nether_dragon_essence_2() : SpellScriptLoader("spell_nether_dragon_essence_2") { } + 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*/) + void ModDestHeight(SpellDestination& dest) { - if (Unit* caster = GetCaster()) - { - float posZ = 0; + Position offset = { frand(-35.0f, 35.0f), frand(-25.0f, 25.0f), 0.0f, 0.0f }; - 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); + switch (GetSpellInfo()->Id) + { + case SPELL_NETHER_DRAGON_ESSENCE_2: + offset.m_positionZ = 25.0f; + break; + case SPELL_NETHER_DRAGON_ESSENCE_3: + offset.m_positionZ = 17.0f; + break; + case SPELL_NETHER_DRAGON_ESSENCE_4: + offset.m_positionZ = 33.0f; + break; } + + dest.RelocateOffset(offset); } - void Register() + void Register() override { - OnEffectLaunch += SpellEffectFn(spell_nether_dragon_essence_2_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_DUMMY); + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_nether_dragon_essence_2_SpellScript::ModDestHeight, EFFECT_0, TARGET_DEST_CASTER_RANDOM); } }; - SpellScript* GetSpellScript() const + SpellScript* GetSpellScript() const override { return new spell_nether_dragon_essence_2_SpellScript(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h index bdfdda87736..d44eeda9c28 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -15,20 +15,25 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef DEF_BLACKROCKCAVERNS_H -#define DEF_BLACKROCKCAVERNS_H +#ifndef BLACKROCKCAVERNS_H_ +#define BLACKROCKCAVERNS_H_ #define BCScriptName "instance_blackrock_caverns" +#define DataHeader "BRC" uint32 const EncounterCount = 5; enum DataTypes { + // Encounter States // Boss GUIDs DATA_ROMOGG_BONECRUSHER = 0, DATA_CORLA = 1, DATA_KARSH_STEELBENDER = 2, DATA_BEAUTY = 3, - DATA_ASCENDANT_LORD_OBSIDIUS = 4 + DATA_ASCENDANT_LORD_OBSIDIUS = 4, + + // Additional Objects + DATA_RAZ_THE_CRAZED = 5 }; enum CreatureIds @@ -39,13 +44,9 @@ enum CreatureIds }; template<class AI> -CreatureAI* GetBlackrockCavernsAI(Creature* creature) +inline AI* GetBlackrockCavernsAI(Creature* creature) { - if (InstanceMap* instance = creature->GetMap()->ToInstanceMap()) - if (instance->GetInstanceScript()) - if (instance->GetScriptId() == sObjectMgr->GetScriptId(BCScriptName)) - return new AI(creature); - return NULL; + return GetInstanceAI<AI>(creature, BCScriptName); } -#endif +#endif // BLACKROCKCAVERNS_H_ 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 index 1bf7d013718..a3bbb4bfcfa 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_ascendant_lord_obsidius.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_ascendant_lord_obsidius.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -45,7 +45,7 @@ enum Events class boss_ascendant_lord_obsidius : public CreatureScript { public: - boss_ascendant_lord_obsidius(): CreatureScript("boss_ascendant_lord_obsidius") {} + boss_ascendant_lord_obsidius(): CreatureScript("boss_ascendant_lord_obsidius") { } struct boss_ascendant_lord_obsidiusAI : public BossAI { @@ -53,7 +53,7 @@ class boss_ascendant_lord_obsidius : public CreatureScript void Reset() override { - + _Reset(); } void EnterCombat(Unit* /*who*/) override @@ -63,9 +63,10 @@ class boss_ascendant_lord_obsidius : public CreatureScript Talk(YELL_AGGRO); } - void KilledUnit(Unit* /*victim*/) override + void KilledUnit(Unit* who) override { - Talk(YELL_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(YELL_KILL); } void JustDied(Unit* /*killer*/) override @@ -99,9 +100,9 @@ class boss_ascendant_lord_obsidius : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { - return new boss_ascendant_lord_obsidiusAI (creature); + return GetBlackrockCavernsAI<boss_ascendant_lord_obsidiusAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp index 44cc68a54b9..5f01023cd98 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_beauty.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -45,15 +45,16 @@ enum Events class boss_beauty : public CreatureScript { - public: boss_beauty(): CreatureScript("boss_beauty") {} + public: + boss_beauty(): CreatureScript("boss_beauty") { } struct boss_beautyAI : public BossAI { - boss_beautyAI(Creature* creature) : BossAI(creature, DATA_BEAUTY) {} + boss_beautyAI(Creature* creature) : BossAI(creature, DATA_BEAUTY) { } void Reset() override { - + _Reset(); } void EnterCombat(Unit* /*who*/) override @@ -81,7 +82,7 @@ class boss_beauty : public CreatureScript if (me->HasUnitState(UNIT_STATE_CASTING)) return; - while (uint32 eventId = events.ExecuteEvent()) + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { @@ -106,9 +107,9 @@ class boss_beauty : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { - return new boss_beautyAI(creature); + return GetBlackrockCavernsAI<boss_beautyAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp index aaa8f98cba4..3f2e8f8b243 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -48,14 +48,15 @@ enum Events class boss_corla : public CreatureScript { public: - boss_corla(): CreatureScript("boss_corla") {} + boss_corla(): CreatureScript("boss_corla") { } struct boss_corlaAI : public BossAI { - boss_corlaAI(Creature* creature) : BossAI(creature, DATA_CORLA) {} + boss_corlaAI(Creature* creature) : BossAI(creature, DATA_CORLA) { } void Reset() override { + _Reset(); combatPhase = false; events.ScheduleEvent(EVENT_DRAIN_ESSENSE, 2000); } @@ -68,9 +69,10 @@ class boss_corla : public CreatureScript combatPhase = true; } - void KilledUnit(Unit* /*victim*/) override + void KilledUnit(Unit* who) override { - Talk(YELL_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(YELL_KILL); } void JustDied(Unit* /*killer*/) override @@ -89,20 +91,20 @@ class boss_corla : public CreatureScript { switch (eventId) { - case EVENT_DRAIN_ESSENSE: - DoCast(me, SPELL_DRAIN_ESSENSE); - events.ScheduleEvent(EVENT_STOP_DRAIN_ESSENSE, 15000); - break; - case EVENT_STOP_DRAIN_ESSENSE: - me->InterruptSpell(CURRENT_CHANNELED_SPELL); - events.ScheduleEvent(EVENT_EVOLUTION, 2000); - break; - case EVENT_EVOLUTION: - DoCast(me, SPELL_EVOLUTION); - events.ScheduleEvent(EVENT_DRAIN_ESSENSE, 2000); - break; - default: - break; + case EVENT_DRAIN_ESSENSE: + DoCast(me, SPELL_DRAIN_ESSENSE); + events.ScheduleEvent(EVENT_STOP_DRAIN_ESSENSE, 15000); + break; + case EVENT_STOP_DRAIN_ESSENSE: + me->InterruptSpell(CURRENT_CHANNELED_SPELL); + events.ScheduleEvent(EVENT_EVOLUTION, 2000); + break; + case EVENT_EVOLUTION: + DoCast(me, SPELL_EVOLUTION); + events.ScheduleEvent(EVENT_DRAIN_ESSENSE, 2000); + break; + default: + break; } } return; @@ -115,9 +117,9 @@ class boss_corla : public CreatureScript bool combatPhase; }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { - return new boss_corlaAI(creature); + return GetBlackrockCavernsAI<boss_corlaAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp index be32808a204..3cd1c4b4031 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_karsh_steelbender.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -53,7 +53,7 @@ class boss_karsh_steelbender : public CreatureScript void Reset() override { - + _Reset(); } void EnterCombat(Unit* /*who*/) override @@ -63,9 +63,10 @@ class boss_karsh_steelbender : public CreatureScript events.ScheduleEvent(EVENT_CLEAVE, 10000); } - void KilledUnit(Unit* /*victim*/) override + void KilledUnit(Unit* who) override { - Talk(YELL_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(YELL_KILL); } void JustDied(Unit* /*victim*/) override @@ -101,9 +102,9 @@ class boss_karsh_steelbender : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { - return new boss_karsh_steelbenderAI(creature); + return GetBlackrockCavernsAI<boss_karsh_steelbenderAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp index 34721a0f31f..d3d737d75be 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -45,30 +45,33 @@ Position const SummonPos = { 249.2639f, 949.1614f, 191.7866f, 3.141593f }; class boss_romogg_bonecrusher : public CreatureScript { public: - boss_romogg_bonecrusher() : CreatureScript("boss_romogg_bonecrusher") {} + boss_romogg_bonecrusher() : CreatureScript("boss_romogg_bonecrusher") { } struct boss_romogg_bonecrusherAI : public BossAI { boss_romogg_bonecrusherAI(Creature* creature) : BossAI(creature, DATA_ROMOGG_BONECRUSHER) { - if (instance) - me->SummonCreature(NPC_RAZ_THE_CRAZED, SummonPos, TEMPSUMMON_MANUAL_DESPAWN, 200000); + me->SummonCreature(NPC_RAZ_THE_CRAZED, SummonPos, TEMPSUMMON_MANUAL_DESPAWN, 200000); } - void Reset() override { } + void Reset() override + { + _Reset(); + } void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(YELL_DEATH); - if (Creature* raz = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZ_THE_CRAZED))) + if (Creature* raz = instance->GetCreature(DATA_RAZ_THE_CRAZED)) raz->AI()->SetData(TYPE_RAZ, DATA_ROMOGG_DEAD); } - void KilledUnit(Unit* /*victim*/) override + void KilledUnit(Unit* who) override { - Talk(YELL_KILL); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(YELL_KILL); } void EnterCombat(Unit* /*who*/) override @@ -118,13 +121,14 @@ class boss_romogg_bonecrusher : public CreatureScript break; } } + DoMeleeAttackIfReady(); } }; - CreatureAI* GetAI(Creature* creature) const + CreatureAI* GetAI(Creature* creature) const override { - return new boss_romogg_bonecrusherAI (creature); + return GetBlackrockCavernsAI<boss_romogg_bonecrusherAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp index 34c19447ba4..99dd60f0d24 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/instance_blackrock_caverns.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2008-2014 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 @@ -19,6 +19,12 @@ #include "InstanceScript.h" #include "blackrock_caverns.h" +ObjectData const creatureData[] = +{ + { NPC_RAZ_THE_CRAZED, DATA_RAZ_THE_CRAZED }, + { 0, 0 } +}; + class instance_blackrock_caverns : public InstanceMapScript { public: @@ -28,34 +34,12 @@ class instance_blackrock_caverns : public InstanceMapScript { instance_blackrock_caverns_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadObjectData(creatureData, nullptr); } - void OnCreatureCreate(Creature* creature) - { - switch (creature->GetEntry()) - { - case NPC_RAZ_THE_CRAZED: - RaztheCrazed = creature->GetGUID(); - break; - default: - break; - } - } - - ObjectGuid GetGuidData(uint32 type) const override - { - switch (type) - { - case NPC_RAZ_THE_CRAZED: - return RaztheCrazed; - default: - break; - } - return ObjectGuid::Empty; - } - - bool SetBossState(uint32 type, EncounterState state) + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -74,11 +58,9 @@ class instance_blackrock_caverns : public InstanceMapScript return true; } - protected: - ObjectGuid RaztheCrazed; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_blackrock_caverns_InstanceMapScript(map); } |