aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp168
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp99
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp95
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp117
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp231
5 files changed, 322 insertions, 388 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
index a773629a296..dfbdbf03349 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp
@@ -49,115 +49,93 @@ enum Events
EVENT_LIVING_BOMB = 3,
};
-class boss_baron_geddon : public CreatureScript
+struct boss_baron_geddon : public BossAI
{
- public:
- boss_baron_geddon() : CreatureScript("boss_baron_geddon") { }
-
- struct boss_baron_geddonAI : public BossAI
+ boss_baron_geddon(Creature* creature) : BossAI(creature, BOSS_BARON_GEDDON)
+ {
+ }
+
+ void JustEngagedWith(Unit* victim) override
+ {
+ BossAI::JustEngagedWith(victim);
+ events.ScheduleEvent(EVENT_INFERNO, 45s);
+ events.ScheduleEvent(EVENT_IGNITE_MANA, 30s);
+ events.ScheduleEvent(EVENT_LIVING_BOMB, 35s);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ // If we are <2% hp cast Armageddon
+ if (!HealthAbovePct(2))
{
- boss_baron_geddonAI(Creature* creature) : BossAI(creature, BOSS_BARON_GEDDON)
- {
- }
+ me->InterruptNonMeleeSpells(true);
+ DoCast(me, SPELL_ARMAGEDDON);
+ Talk(EMOTE_SERVICE);
+ return;
+ }
- void JustEngagedWith(Unit* victim) override
- {
- BossAI::JustEngagedWith(victim);
- events.ScheduleEvent(EVENT_INFERNO, 45s);
- events.ScheduleEvent(EVENT_IGNITE_MANA, 30s);
- events.ScheduleEvent(EVENT_LIVING_BOMB, 35s);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- // If we are <2% hp cast Armageddon
- if (!HealthAbovePct(2))
- {
- me->InterruptNonMeleeSpells(true);
- DoCast(me, SPELL_ARMAGEDDON);
- Talk(EMOTE_SERVICE);
- return;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_INFERNO:
- DoCast(me, SPELL_INFERNO);
- events.ScheduleEvent(EVENT_INFERNO, 45s);
- break;
- case EVENT_IGNITE_MANA:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_IGNITE_MANA))
- DoCast(target, SPELL_IGNITE_MANA);
- events.ScheduleEvent(EVENT_IGNITE_MANA, 30s);
- break;
- case EVENT_LIVING_BOMB:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
- DoCast(target, SPELL_LIVING_BOMB);
- events.ScheduleEvent(EVENT_LIVING_BOMB, 35s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ case EVENT_INFERNO:
+ DoCast(me, SPELL_INFERNO);
+ events.ScheduleEvent(EVENT_INFERNO, 45s);
+ break;
+ case EVENT_IGNITE_MANA:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_IGNITE_MANA))
+ DoCast(target, SPELL_IGNITE_MANA);
+ events.ScheduleEvent(EVENT_IGNITE_MANA, 30s);
+ break;
+ case EVENT_LIVING_BOMB:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
+ DoCast(target, SPELL_LIVING_BOMB);
+ events.ScheduleEvent(EVENT_LIVING_BOMB, 35s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetMoltenCoreAI<boss_baron_geddonAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
// 19695 - Inferno
-class spell_baron_geddon_inferno : public SpellScriptLoader
+class spell_baron_geddon_inferno : public AuraScript
{
- public:
- spell_baron_geddon_inferno() : SpellScriptLoader("spell_baron_geddon_inferno") { }
-
- class spell_baron_geddon_inferno_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_baron_geddon_inferno_AuraScript);
-
- void OnPeriodic(AuraEffect const* aurEff)
- {
- PreventDefaultAction();
- int32 const damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 };
- CastSpellExtraArgs args;
- args.TriggerFlags = TRIGGERED_FULL_MASK;
- args.TriggeringAura = aurEff;
- args.AddSpellMod(SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1]);
- GetTarget()->CastSpell(nullptr, SPELL_INFERNO_DMG, args);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_baron_geddon_inferno_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_baron_geddon_inferno_AuraScript();
- }
+ PrepareAuraScript(spell_baron_geddon_inferno);
+
+ void OnPeriodic(AuraEffect const* aurEff)
+ {
+ PreventDefaultAction();
+ static const int32 damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 };
+ CastSpellExtraArgs args;
+ args.TriggerFlags = TRIGGERED_FULL_MASK;
+ args.TriggeringAura = aurEff;
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1]);
+ GetTarget()->CastSpell(nullptr, SPELL_INFERNO_DMG, args);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_baron_geddon_inferno::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
};
void AddSC_boss_baron_geddon()
{
- new boss_baron_geddon();
- new spell_baron_geddon_inferno();
+ RegisterMoltenCoreCreatureAI(boss_baron_geddon);
+ RegisterSpellScript(spell_baron_geddon_inferno);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
index 07c9f7c029f..f55df0eb24e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp
@@ -40,72 +40,61 @@ enum Events
EVENT_SHADOW_BOLT = 3,
};
-class boss_gehennas : public CreatureScript
+struct boss_gehennas : public BossAI
{
- public:
- boss_gehennas() : CreatureScript("boss_gehennas") { }
+ boss_gehennas(Creature* creature) : BossAI(creature, BOSS_GEHENNAS)
+ {
+ }
- struct boss_gehennasAI : public BossAI
- {
- boss_gehennasAI(Creature* creature) : BossAI(creature, BOSS_GEHENNAS)
- {
- }
+ void JustEngagedWith(Unit* victim) override
+ {
+ BossAI::JustEngagedWith(victim);
+ events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 12s);
+ events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 10s);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 6s);
+ }
- void JustEngagedWith(Unit* victim) override
- {
- BossAI::JustEngagedWith(victim);
- events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 12s);
- events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 10s);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, 6s);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_GEHENNAS_CURSE:
- DoCastVictim(SPELL_GEHENNAS_CURSE);
- events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 22s, 30s);
- break;
- case EVENT_RAIN_OF_FIRE:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_RAIN_OF_FIRE);
- events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 4s, 12s);
- break;
- case EVENT_SHADOW_BOLT:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
- DoCast(target, SPELL_SHADOW_BOLT);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, 7s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_GEHENNAS_CURSE:
+ DoCastVictim(SPELL_GEHENNAS_CURSE);
+ events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 22s, 30s);
+ break;
+ case EVENT_RAIN_OF_FIRE:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_RAIN_OF_FIRE);
+ events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 4s, 12s);
+ break;
+ case EVENT_SHADOW_BOLT:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
+ DoCast(target, SPELL_SHADOW_BOLT);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 7s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetMoltenCoreAI<boss_gehennasAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_gehennas()
{
- new boss_gehennas();
+ RegisterMoltenCoreCreatureAI(boss_gehennas);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
index c87c5ed0e35..f1a3699db70 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp
@@ -40,70 +40,59 @@ enum Events
EVENT_SHADOW_SHOCK = 3,
};
-class boss_lucifron : public CreatureScript
+struct boss_lucifron : public BossAI
{
- public:
- boss_lucifron() : CreatureScript("boss_lucifron") { }
+ boss_lucifron(Creature* creature) : BossAI(creature, BOSS_LUCIFRON)
+ {
+ }
- struct boss_lucifronAI : public BossAI
- {
- boss_lucifronAI(Creature* creature) : BossAI(creature, BOSS_LUCIFRON)
- {
- }
+ void JustEngagedWith(Unit* victim) override
+ {
+ BossAI::JustEngagedWith(victim);
+ events.ScheduleEvent(EVENT_IMPENDING_DOOM, 10s);
+ events.ScheduleEvent(EVENT_LUCIFRON_CURSE, 20s);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 6s);
+ }
- void JustEngagedWith(Unit* victim) override
- {
- BossAI::JustEngagedWith(victim);
- events.ScheduleEvent(EVENT_IMPENDING_DOOM, 10s);
- events.ScheduleEvent(EVENT_LUCIFRON_CURSE, 20s);
- events.ScheduleEvent(EVENT_SHADOW_SHOCK, 6s);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_IMPENDING_DOOM:
- DoCastVictim(SPELL_IMPENDING_DOOM);
- events.ScheduleEvent(EVENT_IMPENDING_DOOM, 20s);
- break;
- case EVENT_LUCIFRON_CURSE:
- DoCastVictim(SPELL_LUCIFRON_CURSE);
- events.ScheduleEvent(EVENT_LUCIFRON_CURSE, 15s);
- break;
- case EVENT_SHADOW_SHOCK:
- DoCastVictim(SPELL_SHADOW_SHOCK);
- events.ScheduleEvent(EVENT_SHADOW_SHOCK, 6s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_IMPENDING_DOOM:
+ DoCastVictim(SPELL_IMPENDING_DOOM);
+ events.ScheduleEvent(EVENT_IMPENDING_DOOM, 20s);
+ break;
+ case EVENT_LUCIFRON_CURSE:
+ DoCastVictim(SPELL_LUCIFRON_CURSE);
+ events.ScheduleEvent(EVENT_LUCIFRON_CURSE, 15s);
+ break;
+ case EVENT_SHADOW_SHOCK:
+ DoCastVictim(SPELL_SHADOW_SHOCK);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 6s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetMoltenCoreAI<boss_lucifronAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_lucifron()
{
- new boss_lucifron();
+ RegisterMoltenCoreCreatureAI(boss_lucifron);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
index 9ed03658119..9d6a0bab5be 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp
@@ -46,78 +46,67 @@ enum Events
EVENT_LAVA_BOMB = 3,
};
-class boss_magmadar : public CreatureScript
+struct boss_magmadar : public BossAI
{
- public:
- boss_magmadar() : CreatureScript("boss_magmadar") { }
-
- struct boss_magmadarAI : public BossAI
+ boss_magmadar(Creature* creature) : BossAI(creature, BOSS_MAGMADAR)
+ {
+ }
+
+ void Reset() override
+ {
+ BossAI::Reset();
+ DoCast(me, SPELL_MAGMA_SPIT, true);
+ }
+
+ void JustEngagedWith(Unit* victim) override
+ {
+ BossAI::JustEngagedWith(victim);
+ events.ScheduleEvent(EVENT_FRENZY, 30s);
+ events.ScheduleEvent(EVENT_PANIC, 20s);
+ events.ScheduleEvent(EVENT_LAVA_BOMB, 12s);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- boss_magmadarAI(Creature* creature) : BossAI(creature, BOSS_MAGMADAR)
+ switch (eventId)
{
+ case EVENT_FRENZY:
+ Talk(EMOTE_FRENZY);
+ DoCast(me, SPELL_FRENZY);
+ events.ScheduleEvent(EVENT_FRENZY, 15s);
+ break;
+ case EVENT_PANIC:
+ DoCastVictim(SPELL_PANIC);
+ events.ScheduleEvent(EVENT_PANIC, 35s);
+ break;
+ case EVENT_LAVA_BOMB:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_LAVA_BOMB))
+ DoCast(target, SPELL_LAVA_BOMB);
+ events.ScheduleEvent(EVENT_LAVA_BOMB, 12s);
+ break;
+ default:
+ break;
}
- void Reset() override
- {
- BossAI::Reset();
- DoCast(me, SPELL_MAGMA_SPIT, true);
- }
-
- void JustEngagedWith(Unit* victim) override
- {
- BossAI::JustEngagedWith(victim);
- events.ScheduleEvent(EVENT_FRENZY, 30s);
- events.ScheduleEvent(EVENT_PANIC, 20s);
- events.ScheduleEvent(EVENT_LAVA_BOMB, 12s);
- }
-
- 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_FRENZY:
- Talk(EMOTE_FRENZY);
- DoCast(me, SPELL_FRENZY);
- events.ScheduleEvent(EVENT_FRENZY, 15s);
- break;
- case EVENT_PANIC:
- DoCastVictim(SPELL_PANIC);
- events.ScheduleEvent(EVENT_PANIC, 35s);
- break;
- case EVENT_LAVA_BOMB:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_LAVA_BOMB))
- DoCast(target, SPELL_LAVA_BOMB);
- events.ScheduleEvent(EVENT_LAVA_BOMB, 12s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetMoltenCoreAI<boss_magmadarAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_magmadar()
{
- new boss_magmadar();
+ RegisterMoltenCoreCreatureAI(boss_magmadar);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
index 2d43e9ddb3f..48932371a19 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp
@@ -70,149 +70,138 @@ enum Events
EVENT_OUTRO_3 = 7
};
-class boss_majordomo : public CreatureScript
+struct boss_majordomo : public BossAI
{
- public:
- boss_majordomo() : CreatureScript("boss_majordomo") { }
-
- struct boss_majordomoAI : public BossAI
+ boss_majordomo(Creature* creature) : BossAI(creature, BOSS_MAJORDOMO_EXECUTUS)
+ {
+ }
+
+ void KilledUnit(Unit* /*victim*/) override
+ {
+ if (urand(0, 99) < 25)
+ Talk(SAY_SLAY);
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_MAGIC_REFLECTION, 30s);
+ events.ScheduleEvent(EVENT_DAMAGE_REFLECTION, 15s);
+ events.ScheduleEvent(EVENT_BLAST_WAVE, 10s);
+ events.ScheduleEvent(EVENT_TELEPORT, 20s);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (instance->GetBossState(BOSS_MAJORDOMO_EXECUTUS) != DONE)
{
- boss_majordomoAI(Creature* creature) : BossAI(creature, BOSS_MAJORDOMO_EXECUTUS)
- {
- }
+ if (!UpdateVictim())
+ return;
- void KilledUnit(Unit* /*victim*/) override
- {
- if (urand(0, 99) < 25)
- Talk(SAY_SLAY);
- }
+ events.Update(diff);
- void JustEngagedWith(Unit* who) override
+ if (!me->FindNearestCreature(NPC_FLAMEWAKER_HEALER, 100.0f) && !me->FindNearestCreature(NPC_FLAMEWAKER_ELITE, 100.0f))
{
- BossAI::JustEngagedWith(who);
- Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_MAGIC_REFLECTION, 30s);
- events.ScheduleEvent(EVENT_DAMAGE_REFLECTION, 15s);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 10s);
- events.ScheduleEvent(EVENT_TELEPORT, 20s);
+ instance->UpdateEncounterStateForKilledCreature(me->GetEntry(), me);
+ me->SetFaction(FACTION_FRIENDLY);
+ EnterEvadeMode();
+ Talk(SAY_DEFEAT);
+ _JustDied();
+ events.ScheduleEvent(EVENT_OUTRO_1, 32s);
+ return;
}
- void UpdateAI(uint32 diff) override
- {
- if (instance->GetBossState(BOSS_MAJORDOMO_EXECUTUS) != DONE)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (!me->FindNearestCreature(NPC_FLAMEWAKER_HEALER, 100.0f) && !me->FindNearestCreature(NPC_FLAMEWAKER_ELITE, 100.0f))
- {
- instance->UpdateEncounterStateForKilledCreature(me->GetEntry(), me);
- me->SetFaction(FACTION_FRIENDLY);
- EnterEvadeMode();
- Talk(SAY_DEFEAT);
- _JustDied();
- events.ScheduleEvent(EVENT_OUTRO_1, 32s);
- return;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- if (HealthBelowPct(50))
- DoCast(me, SPELL_AEGIS_OF_RAGNAROS, true);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_MAGIC_REFLECTION:
- DoCast(me, SPELL_MAGIC_REFLECTION);
- events.ScheduleEvent(EVENT_MAGIC_REFLECTION, 30s);
- break;
- case EVENT_DAMAGE_REFLECTION:
- DoCast(me, SPELL_DAMAGE_REFLECTION);
- events.ScheduleEvent(EVENT_DAMAGE_REFLECTION, 30s);
- break;
- case EVENT_BLAST_WAVE:
- DoCastVictim(SPELL_BLAST_WAVE);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 10s);
- break;
- case EVENT_TELEPORT:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
- DoCast(target, SPELL_TELEPORT);
- events.ScheduleEvent(EVENT_TELEPORT, 20s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
- }
- else
- {
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_OUTRO_1:
- me->NearTeleportTo(RagnarosTelePos.GetPositionX(), RagnarosTelePos.GetPositionY(), RagnarosTelePos.GetPositionZ(), RagnarosTelePos.GetOrientation());
- me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- break;
- case EVENT_OUTRO_2:
- instance->instance->SummonCreature(NPC_RAGNAROS, RagnarosSummonPos);
- break;
- case EVENT_OUTRO_3:
- Talk(SAY_ARRIVAL2_MAJ);
- break;
- default:
- break;
- }
- }
- }
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ if (HealthBelowPct(50))
+ DoCast(me, SPELL_AEGIS_OF_RAGNAROS, true);
- void DoAction(int32 action) override
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (action == ACTION_START_RAGNAROS)
+ switch (eventId)
{
- me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
- Talk(SAY_SUMMON_MAJ);
- events.ScheduleEvent(EVENT_OUTRO_2, 8s);
- events.ScheduleEvent(EVENT_OUTRO_3, 24s);
- }
- else if (action == ACTION_START_RAGNAROS_ALT)
- {
- me->SetFaction(FACTION_FRIENDLY);
- me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ case EVENT_MAGIC_REFLECTION:
+ DoCast(me, SPELL_MAGIC_REFLECTION);
+ events.ScheduleEvent(EVENT_MAGIC_REFLECTION, 30s);
+ break;
+ case EVENT_DAMAGE_REFLECTION:
+ DoCast(me, SPELL_DAMAGE_REFLECTION);
+ events.ScheduleEvent(EVENT_DAMAGE_REFLECTION, 30s);
+ break;
+ case EVENT_BLAST_WAVE:
+ DoCastVictim(SPELL_BLAST_WAVE);
+ events.ScheduleEvent(EVENT_BLAST_WAVE, 10s);
+ break;
+ case EVENT_TELEPORT:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
+ DoCast(target, SPELL_TELEPORT);
+ events.ScheduleEvent(EVENT_TELEPORT, 20s);
+ break;
+ default:
+ break;
}
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ DoMeleeAttackIfReady();
+ }
+ else
+ {
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (menuId == MENU_OPTION_YOU_CHALLENGED_US && gossipListId == OPTION_ID_YOU_CHALLENGED_US)
+ switch (eventId)
{
- CloseGossipMenuFor(player);
- DoAction(ACTION_START_RAGNAROS);
+ case EVENT_OUTRO_1:
+ me->NearTeleportTo(RagnarosTelePos.GetPositionX(), RagnarosTelePos.GetPositionY(), RagnarosTelePos.GetPositionZ(), RagnarosTelePos.GetOrientation());
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ break;
+ case EVENT_OUTRO_2:
+ instance->instance->SummonCreature(NPC_RAGNAROS, RagnarosSummonPos);
+ break;
+ case EVENT_OUTRO_3:
+ Talk(SAY_ARRIVAL2_MAJ);
+ break;
+ default:
+ break;
}
- return false;
}
- };
+ }
+ }
+
+ void DoAction(int32 action) override
+ {
+ if (action == ACTION_START_RAGNAROS)
+ {
+ me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ Talk(SAY_SUMMON_MAJ);
+ events.ScheduleEvent(EVENT_OUTRO_2, 8s);
+ events.ScheduleEvent(EVENT_OUTRO_3, 24s);
+ }
+ else if (action == ACTION_START_RAGNAROS_ALT)
+ {
+ me->SetFaction(FACTION_FRIENDLY);
+ me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP);
+ }
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ {
+ if (menuId == MENU_OPTION_YOU_CHALLENGED_US && gossipListId == OPTION_ID_YOU_CHALLENGED_US)
{
- return GetMoltenCoreAI<boss_majordomoAI>(creature);
+ CloseGossipMenuFor(player);
+ DoAction(ACTION_START_RAGNAROS);
}
+ return false;
+ }
};
void AddSC_boss_majordomo()
{
- new boss_majordomo();
+ RegisterMoltenCoreCreatureAI(boss_majordomo);
}