diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp | 831 |
1 files changed, 355 insertions, 476 deletions
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 5633969f5c7..2ee58ef3c0d 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -132,614 +132,493 @@ class VoidSpawnSummon : public BasicEvent Creature* _owner; }; -class boss_entropius : public CreatureScript +struct boss_entropius : public BossAI { -public: - boss_entropius() : CreatureScript("boss_entropius") { } + boss_entropius(Creature* creature) : BossAI(creature, DATA_MURU) { } - struct boss_entropiusAI : public BossAI + void Reset() override { - boss_entropiusAI(Creature* creature) : BossAI(creature, DATA_MURU) { } + _Reset(); + DoCast(me, SPELL_ENTROPIUS_COSMETIC_SPAWN, true); + } - void Reset() override + void ScheduleTasks() override + { + scheduler.Schedule(Milliseconds(2000), [this](TaskContext /*context*/) { - _Reset(); - DoCast(me, SPELL_ENTROPIUS_COSMETIC_SPAWN, true); - } + DoResetPortals(); + DoCastAOE(SPELL_NEGATIVE_ENERGY_PERIODIC_E, true); + }); - void ScheduleTasks() override + scheduler.Schedule(Seconds(15), [this](TaskContext context) { - scheduler.Schedule(Milliseconds(2000), [this](TaskContext /*context*/) - { - DoResetPortals(); - DoCastAOE(SPELL_NEGATIVE_ENERGY_PERIODIC_E, true); - }); - - scheduler.Schedule(Seconds(15), [this](TaskContext context) - { - DoCastAOE(SPELL_DARKNESS_E, true); - DoCastAOE(SPELL_BLACKHOLE, true); + DoCastAOE(SPELL_DARKNESS_E, true); + DoCastAOE(SPELL_BLACKHOLE, true); - context.Repeat(); - }); - } - - void JustSummoned(Creature* summon) override - { - switch (summon->GetEntry()) - { - case NPC_DARK_FIENDS: - summon->CastSpell(summon, SPELL_DARKFIEND_VISUAL); - break; - case NPC_DARKNESS: - summon->SetReactState(REACT_PASSIVE); - summon->CastSpell(summon, SPELL_BLACKHOLE); - summon->CastSpell(summon, SPELL_SUMMON_DARKFIEND_E, true); - break; - } - summons.Summon(summon); - } + context.Repeat(); + }); + } - void EnterEvadeMode(EvadeReason /*why*/) override - { - if (Creature* muru = instance->GetCreature(DATA_MURU)) - muru->AI()->EnterEvadeMode(); + void JustSummoned(Creature* summon) override + { + switch (summon->GetEntry()) + { + case NPC_DARK_FIENDS: + summon->CastSpell(summon, SPELL_DARKFIEND_VISUAL); + break; + case NPC_DARKNESS: + summon->SetReactState(REACT_PASSIVE); + summon->CastSpell(summon, SPELL_BLACKHOLE); + summon->CastSpell(summon, SPELL_SUMMON_DARKFIEND_E, true); + break; + } + summons.Summon(summon); + } - DoResetPortals(); - summons.DespawnAll(); - me->DespawnOrUnsummon(); - } + void EnterEvadeMode(EvadeReason /*why*/) override + { + if (Creature* muru = instance->GetCreature(DATA_MURU)) + muru->AI()->EnterEvadeMode(); - void JustDied(Unit* /*killer*/) override - { - _JustDied(); + DoResetPortals(); + summons.DespawnAll(); + me->DespawnOrUnsummon(); + } - if (Creature* muru = instance->GetCreature(DATA_MURU)) - muru->DisappearAndDie(); - } + void JustDied(Unit* /*killer*/) override + { + _JustDied(); - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + if (Creature* muru = instance->GetCreature(DATA_MURU)) + muru->DisappearAndDie(); + } - scheduler.Update(diff, [this] - { - DoMeleeAttackIfReady(); - }); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void DoResetPortals() + scheduler.Update(diff, [this] { - std::list<Creature*> portals; - me->GetCreatureListWithEntryInGrid(portals, NPC_MURU_PORTAL_TARGET, 100.0f); - for (Creature* portal : portals) - portal->RemoveAllAuras(); - } - }; + DoMeleeAttackIfReady(); + }); + } - CreatureAI* GetAI(Creature* creature) const override + void DoResetPortals() { - return GetSunwellPlateauAI<boss_entropiusAI>(creature); + std::list<Creature*> portals; + me->GetCreatureListWithEntryInGrid(portals, NPC_MURU_PORTAL_TARGET, 100.0f); + for (Creature* portal : portals) + portal->RemoveAllAuras(); } }; -class boss_muru : public CreatureScript +struct boss_muru : public BossAI { -public: - boss_muru() : CreatureScript("boss_muru") { } + boss_muru(Creature* creature) : BossAI(creature, DATA_MURU) + { + Initialize(); + SetCombatMovement(false); + } - struct boss_muruAI : public BossAI + void Initialize() { - boss_muruAI(Creature* creature) : BossAI(creature, DATA_MURU) - { - Initialize(); - SetCombatMovement(false); - } + _hasEnraged = false; + _phase = PHASE_ONE; + _entropiusGUID.Clear(); + } - void Initialize() - { - _hasEnraged = false; - _phase = PHASE_ONE; - _entropiusGUID.Clear(); - } + void Reset() override + { + _Reset(); + Initialize(); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetVisible(true); + } - void Reset() override - { - _Reset(); - Initialize(); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetVisible(true); - } + void EnterEvadeMode(EvadeReason /*why*/) override + { + BossAI::EnterEvadeMode(); + if (Creature* entropius = ObjectAccessor::GetCreature(*me, _entropiusGUID)) + entropius->AI()->EnterEvadeMode(); + } - void EnterEvadeMode(EvadeReason /*why*/) override + void ScheduleTasks() override + { + scheduler.Schedule(Minutes(10), [this](TaskContext /*context*/) { - BossAI::EnterEvadeMode(); if (Creature* entropius = ObjectAccessor::GetCreature(*me, _entropiusGUID)) - entropius->AI()->EnterEvadeMode(); - } + entropius->CastSpell(entropius, SPELL_ENRAGE); + DoCast(me, SPELL_ENRAGE); + _hasEnraged = true; + }); - void ScheduleTasks() override + scheduler.Schedule(Seconds(10), [this](TaskContext /*context*/) { - scheduler.Schedule(Minutes(10), [this](TaskContext /*context*/) - { - if (Creature* entropius = ObjectAccessor::GetCreature(*me, _entropiusGUID)) - entropius->CastSpell(entropius, SPELL_ENRAGE); - DoCast(me, SPELL_ENRAGE); - _hasEnraged = true; - }); - - scheduler.Schedule(Seconds(10), [this](TaskContext /*context*/) - { - DoCast(me, SPELL_SUMMON_BLOOD_ELVES_SCRIPT, true); - DoCast(me, SPELL_SUMMON_BLOOD_ELVES_PERIODIC, true); - }); - } + DoCast(me, SPELL_SUMMON_BLOOD_ELVES_SCRIPT, true); + DoCast(me, SPELL_SUMMON_BLOOD_ELVES_PERIODIC, true); + }); + } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - DoCast(me, SPELL_OPEN_PORTAL_PERIODIC, true); - DoCast(me, SPELL_DARKNESS_PERIODIC, true); - DoCast(me, SPELL_NEGATIVE_ENERGY_PERIODIC, true); - } + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + DoCast(me, SPELL_OPEN_PORTAL_PERIODIC, true); + DoCast(me, SPELL_DARKNESS_PERIODIC, true); + DoCast(me, SPELL_NEGATIVE_ENERGY_PERIODIC, true); + } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) override + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override + { + if (damage >= me->GetHealth()) { - if (damage >= me->GetHealth()) - { - damage = me->GetHealth() - 1; - if (_phase != PHASE_ONE) - return; - - _phase = PHASE_TWO; - me->RemoveAllAuras(); - DoCast(me, SPELL_OPEN_ALL_PORTALS, true); - me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + damage = me->GetHealth() - 1; + if (_phase != PHASE_ONE) + return; - scheduler.Schedule(Seconds(6), [this](TaskContext /*context*/) - { - DoCast(me, SPELL_SUMMON_ENTROPIUS, true); - }); - } - } + _phase = PHASE_TWO; + me->RemoveAllAuras(); + DoCast(me, SPELL_OPEN_ALL_PORTALS, true); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - void JustSummoned(Creature* summon) override - { - if (summon->GetEntry() == NPC_ENTROPIUS) + scheduler.Schedule(Seconds(6), [this](TaskContext /*context*/) { - me->SetVisible(false); - _entropiusGUID = summon->GetGUID(); - if (_hasEnraged) - summon->CastSpell(summon, SPELL_ENRAGE, true); - return; - } - BossAI::JustSummoned(summon); + DoCast(me, SPELL_SUMMON_ENTROPIUS, true); + }); } + } - void UpdateAI(uint32 diff) override + void JustSummoned(Creature* summon) override + { + if (summon->GetEntry() == NPC_ENTROPIUS) { - if (!UpdateVictim()) - return; - - scheduler.Update(diff); + me->SetVisible(false); + _entropiusGUID = summon->GetGUID(); + if (_hasEnraged) + summon->CastSpell(summon, SPELL_ENRAGE, true); + return; } + BossAI::JustSummoned(summon); + } - private: - ObjectGuid _entropiusGUID; - bool _hasEnraged; - uint8 _phase; - }; - - CreatureAI* GetAI(Creature* creature) const override + void UpdateAI(uint32 diff) override { - return GetSunwellPlateauAI<boss_muruAI>(creature); + if (!UpdateVictim()) + return; + + scheduler.Update(diff); } + +private: + ObjectGuid _entropiusGUID; + bool _hasEnraged; + uint8 _phase; }; -class npc_muru_portal : public CreatureScript +struct npc_muru_portal : public ScriptedAI { -public: - npc_muru_portal() : CreatureScript("npc_muru_portal") { } + npc_muru_portal(Creature* creature) : ScriptedAI(creature) { } - struct npc_muru_portalAI : public ScriptedAI + void JustSummoned(Creature* summon) override { - npc_muru_portalAI(Creature* creature) : ScriptedAI(creature) { } - - void JustSummoned(Creature* summon) override - { - DoCast(summon, SPELL_SUMMON_VOID_SENTINEL_SUMMONER_VISUAL, true); - - summon->m_Events.AddEvent(new VoidSpawnSummon(summon), summon->m_Events.CalculateTime(1500ms)); - } + DoCast(summon, SPELL_SUMMON_VOID_SENTINEL_SUMMONER_VISUAL, true); - void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override - { - switch (spellInfo->Id) - { - case SPELL_OPEN_ALL_PORTALS: - DoCastAOE(SPELL_OPEN_PORTAL, true); - DoCastAOE(SPELL_TRANSFORM_VISUAL_MISSILE, true); - break; - case SPELL_OPEN_PORTAL_2: - DoCastAOE(SPELL_OPEN_PORTAL, true); - _scheduler.Schedule(Seconds(6), [this](TaskContext /*context*/) - { - DoCastAOE(SPELL_SUMMON_VOID_SENTINEL_SUMMONER, true); - }); - break; - default: - break; - } - } + summon->m_Events.AddEvent(new VoidSpawnSummon(summon), summon->m_Events.CalculateTime(1500ms)); + } - void UpdateAI(uint32 diff) override - { - _scheduler.Update(diff); + void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override + { + switch (spellInfo->Id) + { + case SPELL_OPEN_ALL_PORTALS: + DoCastAOE(SPELL_OPEN_PORTAL, true); + DoCastAOE(SPELL_TRANSFORM_VISUAL_MISSILE, true); + break; + case SPELL_OPEN_PORTAL_2: + DoCastAOE(SPELL_OPEN_PORTAL, true); + _scheduler.Schedule(Seconds(6), [this](TaskContext /*context*/) + { + DoCastAOE(SPELL_SUMMON_VOID_SENTINEL_SUMMONER, true); + }); + break; + default: + break; } + } - private: - TaskScheduler _scheduler; - }; - - CreatureAI* GetAI(Creature* creature) const override + void UpdateAI(uint32 diff) override { - return GetSunwellPlateauAI<npc_muru_portalAI>(creature); + _scheduler.Update(diff); } + +private: + TaskScheduler _scheduler; }; -class npc_dark_fiend : public CreatureScript +struct npc_dark_fiend : public ScriptedAI { -public: - npc_dark_fiend() : CreatureScript("npc_dark_fiend") { } + npc_dark_fiend(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } - struct npc_dark_fiendAI : public ScriptedAI + void Initialize() { - npc_dark_fiendAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - } + me->SetDisplayFromModel(1); + me->SetReactState(REACT_PASSIVE); + DoCast(me, SPELL_DARKFIEND_SKIN, true); - void Initialize() + _scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/) { - me->SetDisplayFromModel(1); - me->SetReactState(REACT_PASSIVE); - DoCast(me, SPELL_DARKFIEND_SKIN, true); - - _scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/) - { - me->SetReactState(REACT_AGGRESSIVE); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - - if (Creature* _summoner = ObjectAccessor::GetCreature(*me, _summonerGUID)) - if (Unit* target = _summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0)) - AttackStart(target); - }); - - _scheduler.Schedule(Seconds(3), [this](TaskContext context) - { - if (me->IsWithinDist(me->GetVictim(), 5.0f) && me->HasAura(SPELL_DARKFIEND_SKIN)) - { - DoCastAOE(SPELL_DARKFIEND_DAMAGE, false); - me->DisappearAndDie(); - } + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - context.Repeat(Milliseconds(500)); - }); - } + if (Creature* _summoner = ObjectAccessor::GetCreature(*me, _summonerGUID)) + if (Unit* target = _summoner->AI()->SelectTarget(SelectTargetMethod::Random, 0)) + AttackStart(target); + }); - void IsSummonedBy(WorldObject* summoner) override + _scheduler.Schedule(Seconds(3), [this](TaskContext context) { - _summonerGUID = summoner->GetGUID(); - } + if (me->IsWithinDist(me->GetVictim(), 5.0f) && me->HasAura(SPELL_DARKFIEND_SKIN)) + { + DoCastAOE(SPELL_DARKFIEND_DAMAGE, false); + me->DisappearAndDie(); + } - bool CanAIAttack(Unit const* /*target*/) const override - { - return me->HasAura(SPELL_DARKFIEND_SKIN); - } + context.Repeat(Milliseconds(500)); + }); + } - void UpdateAI(uint32 diff) override - { - _scheduler.Update(diff); - } + void IsSummonedBy(WorldObject* summoner) override + { + _summonerGUID = summoner->GetGUID(); + } - private: - TaskScheduler _scheduler; - ObjectGuid _summonerGUID; - }; + bool CanAIAttack(Unit const* /*target*/) const override + { + return me->HasAura(SPELL_DARKFIEND_SKIN); + } - CreatureAI* GetAI(Creature* creature) const override + void UpdateAI(uint32 diff) override { - return GetSunwellPlateauAI<npc_dark_fiendAI>(creature); + _scheduler.Update(diff); } + +private: + TaskScheduler _scheduler; + ObjectGuid _summonerGUID; }; -class npc_void_sentinel : public CreatureScript +struct npc_void_sentinel : public ScriptedAI { -public: - npc_void_sentinel() : CreatureScript("npc_void_sentinel") { } + npc_void_sentinel(Creature* creature) : ScriptedAI(creature) + { + _instance = me->GetInstanceScript(); + } - struct npc_void_sentinelAI : public ScriptedAI + void IsSummonedBy(WorldObject* /*summoner*/) override { - npc_void_sentinelAI(Creature* creature) : ScriptedAI(creature) - { - _instance = me->GetInstanceScript(); - } + if (Creature* muru = _instance->GetCreature(DATA_MURU)) + muru->AI()->JustSummoned(me); + } - void IsSummonedBy(WorldObject* /*summoner*/) override - { - if (Creature* muru = _instance->GetCreature(DATA_MURU)) - muru->AI()->JustSummoned(me); - } + void JustEngagedWith(Unit* /*who*/) override + { + DoCast(me, SPELL_SHADOW_PULSE_PERIODIC, true); - void JustEngagedWith(Unit* /*who*/) override + _scheduler.Schedule(Seconds(45), [this](TaskContext context) { - DoCast(me, SPELL_SHADOW_PULSE_PERIODIC, true); - - _scheduler.Schedule(Seconds(45), [this](TaskContext context) - { - DoCastVictim(SPELL_VOID_BLAST, false); - - context.Repeat(); - }); - } + DoCastVictim(SPELL_VOID_BLAST, false); - void JustDied(Unit* /*killer*/) override - { - for (uint8 i = 0; i < MAX_VOID_SPAWNS; ++i) - DoCastAOE(SPELL_SUMMON_VOID_SPAWN, true); - } - - void UpdateAI(uint32 diff) override - { - _scheduler.Update(diff, [this] - { - DoMeleeAttackIfReady(); - }); - } + context.Repeat(); + }); + } - private: - TaskScheduler _scheduler; - InstanceScript* _instance; - }; + void JustDied(Unit* /*killer*/) override + { + for (uint8 i = 0; i < MAX_VOID_SPAWNS; ++i) + DoCastAOE(SPELL_SUMMON_VOID_SPAWN, true); + } - CreatureAI* GetAI(Creature* creature) const override + void UpdateAI(uint32 diff) override { - return GetSunwellPlateauAI<npc_void_sentinelAI>(creature); + _scheduler.Update(diff, [this] + { + DoMeleeAttackIfReady(); + }); } + +private: + TaskScheduler _scheduler; + InstanceScript* _instance; }; -class npc_blackhole : public CreatureScript +struct npc_blackhole : public ScriptedAI { -public: - npc_blackhole() : CreatureScript("npc_blackhole") { } + npc_blackhole(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } - struct npc_blackholeAI : public ScriptedAI + void Reset() override { - npc_blackholeAI(Creature* creature) : ScriptedAI(creature) - { - _instance = creature->GetInstanceScript(); - } + me->SetReactState(REACT_PASSIVE); + DoCast(SPELL_BLACKHOLE_SUMMON_VISUAL); - void Reset() override + _scheduler.Schedule(Seconds(15), [this](TaskContext /*context*/) { - me->SetReactState(REACT_PASSIVE); - DoCast(SPELL_BLACKHOLE_SUMMON_VISUAL); - - _scheduler.Schedule(Seconds(15), [this](TaskContext /*context*/) - { - me->DisappearAndDie(); - }); + me->DisappearAndDie(); + }); - _scheduler.Schedule(Seconds(1), [this](TaskContext context) - { - switch (context.GetRepeatCounter()) - { - case 0: - me->SetReactState(REACT_AGGRESSIVE); - DoCast(SPELL_BLACKHOLE_SUMMON_VISUAL_2); - if (Unit* victim = ObjectAccessor::GetUnit(*me, _instance->GetGuidData(DATA_PLAYER_GUID))) - AttackStart(victim); - context.Repeat(Milliseconds(1200)); - break; - case 1: - DoCast(SPELL_BLACKHOLE_SUMMON_VISUAL); - context.Repeat(Seconds(2)); - break; - case 2: - DoCast(SPELL_BLACKHOLE_PASSIVE); - DoCast(SPELL_BLACK_HOLE_VISUAL_2); - break; - default: - break; - } - }); - } - - void UpdateAI(uint32 diff) override + _scheduler.Schedule(Seconds(1), [this](TaskContext context) { - _scheduler.Update(diff); - } - - private: - TaskScheduler _scheduler; - InstanceScript* _instance; - }; + switch (context.GetRepeatCounter()) + { + case 0: + me->SetReactState(REACT_AGGRESSIVE); + DoCast(SPELL_BLACKHOLE_SUMMON_VISUAL_2); + if (Unit* victim = ObjectAccessor::GetUnit(*me, _instance->GetGuidData(DATA_PLAYER_GUID))) + AttackStart(victim); + context.Repeat(Milliseconds(1200)); + break; + case 1: + DoCast(SPELL_BLACKHOLE_SUMMON_VISUAL); + context.Repeat(Seconds(2)); + break; + case 2: + DoCast(SPELL_BLACKHOLE_PASSIVE); + DoCast(SPELL_BLACK_HOLE_VISUAL_2); + break; + default: + break; + } + }); + } - CreatureAI* GetAI(Creature* creature) const override + void UpdateAI(uint32 diff) override { - return GetSunwellPlateauAI<npc_blackholeAI>(creature); + _scheduler.Update(diff); } + +private: + TaskScheduler _scheduler; + InstanceScript* _instance; }; // 46050 - Summon Blood Elves Script -class spell_summon_blood_elves_script : SpellScriptLoader +class spell_summon_blood_elves_script : public SpellScript { - public: - spell_summon_blood_elves_script() : SpellScriptLoader("spell_summon_blood_elves_script") { } - - class spell_summon_blood_elves_script_SpellScript : public SpellScript - { - PrepareSpellScript(spell_summon_blood_elves_script_SpellScript); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo(SummonBloodElvesSpells); - } + PrepareSpellScript(spell_summon_blood_elves_script); - void HandleScript(SpellEffIndex /*effIndex*/) - { - for (uint8 i = 0; i < MAX_SUMMON_BLOOD_ELVES; ++i) - GetCaster()->CastSpell(nullptr, SummonBloodElvesSpells[urand(0,3)], true); - } + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo(SummonBloodElvesSpells); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_summon_blood_elves_script_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; + void HandleScript(SpellEffIndex /*effIndex*/) + { + for (uint8 i = 0; i < MAX_SUMMON_BLOOD_ELVES; ++i) + GetCaster()->CastSpell(nullptr, SummonBloodElvesSpells[urand(0,3)], true); + } - SpellScript* GetSpellScript() const override - { - return new spell_summon_blood_elves_script_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_summon_blood_elves_script::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; // 45996 - Darkness -class spell_muru_darkness : SpellScriptLoader +class spell_muru_darkness : public SpellScript { - public: - spell_muru_darkness() : SpellScriptLoader("spell_muru_darkness") { } - - class spell_muru_darkness_SpellScript : public SpellScript - { - PrepareSpellScript(spell_muru_darkness_SpellScript); + PrepareSpellScript(spell_muru_darkness); - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo(SummonDarkFiendSpells); - } - - void HandleAfterCast() - { - for (uint8 i = 0; i < MAX_SUMMON_DARK_FIEND; ++i) - GetCaster()->CastSpell(nullptr, SummonDarkFiendSpells[i], true); - } + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo(SummonDarkFiendSpells); + } - void Register() override - { - AfterCast += SpellCastFn(spell_muru_darkness_SpellScript::HandleAfterCast); - } - }; + void HandleAfterCast() + { + for (uint8 i = 0; i < MAX_SUMMON_DARK_FIEND; ++i) + GetCaster()->CastSpell(nullptr, SummonDarkFiendSpells[i], true); + } - SpellScript* GetSpellScript() const override - { - return new spell_muru_darkness_SpellScript(); - } + void Register() override + { + AfterCast += SpellCastFn(spell_muru_darkness::HandleAfterCast); + } }; // 45934 - Dark Fiend -class spell_dark_fiend_skin : public SpellScriptLoader +class spell_dark_fiend_skin : public AuraScript { - public: - spell_dark_fiend_skin() : SpellScriptLoader("spell_dark_fiend_skin") { } - - class spell_dark_fiend_skin_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dark_fiend_skin_AuraScript); - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL) - return; - - if (Creature* target = GetTarget()->ToCreature()) - { - target->SetReactState(REACT_PASSIVE); - target->AttackStop(); - target->StopMoving(); - target->CastSpell(target, SPELL_DARKFIEND_VISUAL, true); - target->DespawnOrUnsummon(3s); - } - } + PrepareAuraScript(spell_dark_fiend_skin); - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_dark_fiend_skin_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL) + return; - AuraScript* GetAuraScript() const override + if (Creature* target = GetTarget()->ToCreature()) { - return new spell_dark_fiend_skin_AuraScript(); + target->SetReactState(REACT_PASSIVE); + target->AttackStop(); + target->StopMoving(); + target->CastSpell(target, SPELL_DARKFIEND_VISUAL, true); + target->DespawnOrUnsummon(3s); } + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_dark_fiend_skin::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } }; // 46205 - Transform Visual Missile Periodic -class spell_transform_visual_missile_periodic : public SpellScriptLoader +class spell_transform_visual_missile_periodic : public AuraScript { - public: - spell_transform_visual_missile_periodic() : SpellScriptLoader("spell_transform_visual_missile_periodic") { } - - class spell_transform_visual_missile_periodic_AuraScript : public AuraScript - { - PrepareAuraScript(spell_transform_visual_missile_periodic_AuraScript); + PrepareAuraScript(spell_transform_visual_missile_periodic); - void OnPeriodic(AuraEffect const* /*aurEff*/) - { - GetTarget()->CastSpell(nullptr, RAND(TRANSFORM_VISUAL_MISSILE_1, TRANSFORM_VISUAL_MISSILE_2), true); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_transform_visual_missile_periodic_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - } - }; + void OnPeriodic(AuraEffect const* /*aurEff*/) + { + GetTarget()->CastSpell(nullptr, RAND(TRANSFORM_VISUAL_MISSILE_1, TRANSFORM_VISUAL_MISSILE_2), true); + } - AuraScript* GetAuraScript() const override - { - return new spell_transform_visual_missile_periodic_AuraScript(); - } + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_transform_visual_missile_periodic::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } }; // 46041 - Summon Blood Elves Periodic -class spell_summon_blood_elves_periodic : public SpellScriptLoader +class spell_summon_blood_elves_periodic : public AuraScript { - public: - spell_summon_blood_elves_periodic() : SpellScriptLoader("spell_summon_blood_elves_periodic") { } - - class spell_summon_blood_elves_periodic_AuraScript : public AuraScript - { - PrepareAuraScript(spell_summon_blood_elves_periodic_AuraScript); - - void OnPeriodic(AuraEffect const* /*aurEff*/) - { - GetTarget()->CastSpell(nullptr, SPELL_SUMMON_BLOOD_ELVES_SCRIPT, true); - } + PrepareAuraScript(spell_summon_blood_elves_periodic); - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_summon_blood_elves_periodic_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - } - }; + void OnPeriodic(AuraEffect const* /*aurEff*/) + { + GetTarget()->CastSpell(nullptr, SPELL_SUMMON_BLOOD_ELVES_SCRIPT, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_summon_blood_elves_periodic_AuraScript(); - } + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_summon_blood_elves_periodic::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } }; void AddSC_boss_muru() { - new boss_muru(); - new boss_entropius(); - new npc_muru_portal(); - new npc_dark_fiend(); - new npc_void_sentinel(); - new npc_blackhole(); - new spell_summon_blood_elves_script(); - new spell_muru_darkness(); - new spell_dark_fiend_skin(); - new spell_transform_visual_missile_periodic(); - new spell_summon_blood_elves_periodic(); + RegisterSunwellPlateauCreatureAI(boss_muru); + RegisterSunwellPlateauCreatureAI(boss_entropius); + RegisterSunwellPlateauCreatureAI(npc_muru_portal); + RegisterSunwellPlateauCreatureAI(npc_dark_fiend); + RegisterSunwellPlateauCreatureAI(npc_void_sentinel); + RegisterSunwellPlateauCreatureAI(npc_blackhole); + RegisterSpellScript(spell_summon_blood_elves_script); + RegisterSpellScript(spell_muru_darkness); + RegisterSpellScript(spell_dark_fiend_skin); + RegisterSpellScript(spell_transform_visual_missile_periodic); + RegisterSpellScript(spell_summon_blood_elves_periodic); } |