aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp831
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);
}