aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp209
1 files changed, 91 insertions, 118 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
index c45e3e8eb8e..b7661629ae5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
@@ -52,148 +52,121 @@ enum Events
EVENT_EARTHQUAKE = 2,
};
-class boss_golemagg : public CreatureScript
+struct boss_golemagg : public BossAI
{
- public:
- boss_golemagg() : CreatureScript("boss_golemagg") { }
+ boss_golemagg(Creature* creature) : BossAI(creature, BOSS_GOLEMAGG_THE_INCINERATOR) { }
- struct boss_golemaggAI : public BossAI
- {
- boss_golemaggAI(Creature* creature) : BossAI(creature, BOSS_GOLEMAGG_THE_INCINERATOR)
- {
- }
+ void Reset() override
+ {
+ BossAI::Reset();
+ DoCast(me, SPELL_MAGMASPLASH, true);
+ }
- void Reset() override
- {
- BossAI::Reset();
- DoCast(me, SPELL_MAGMASPLASH, true);
- }
+ void JustEngagedWith(Unit* victim) override
+ {
+ BossAI::JustEngagedWith(victim);
+ events.ScheduleEvent(EVENT_PYROBLAST, 7s);
+ }
- void JustEngagedWith(Unit* victim) override
- {
- BossAI::JustEngagedWith(victim);
- events.ScheduleEvent(EVENT_PYROBLAST, 7s);
- }
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
+ {
+ if (!HealthBelowPct(10) || me->HasAura(SPELL_ENRAGE))
+ return;
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
- {
- if (!HealthBelowPct(10) || me->HasAura(SPELL_ENRAGE))
- return;
+ DoCast(me, SPELL_ENRAGE, true);
+ events.ScheduleEvent(EVENT_EARTHQUAKE, 3s);
+ }
- DoCast(me, SPELL_ENRAGE, true);
- events.ScheduleEvent(EVENT_EARTHQUAKE, 3s);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_PYROBLAST:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_PYROBLAST);
- events.ScheduleEvent(EVENT_PYROBLAST, 7s);
- break;
- case EVENT_EARTHQUAKE:
- DoCastVictim(SPELL_EARTHQUAKE);
- events.ScheduleEvent(EVENT_EARTHQUAKE, 3s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ case EVENT_PYROBLAST:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_PYROBLAST);
+ events.ScheduleEvent(EVENT_PYROBLAST, 7s);
+ break;
+ case EVENT_EARTHQUAKE:
+ DoCastVictim(SPELL_EARTHQUAKE);
+ events.ScheduleEvent(EVENT_EARTHQUAKE, 3s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetMoltenCoreAI<boss_golemaggAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
-class npc_core_rager : public CreatureScript
+struct npc_core_rager : public ScriptedAI
{
- public:
- npc_core_rager() : CreatureScript("npc_core_rager") { }
-
- struct npc_core_ragerAI : public ScriptedAI
+ npc_core_rager(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = creature->GetInstanceScript();
+ }
+
+ void Reset() override
+ {
+ _scheduler.CancelAll();
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _scheduler.Schedule(7s, [this](TaskContext task) // These times are probably wrong
{
- npc_core_ragerAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- instance = creature->GetInstanceScript();
- }
-
- void Initialize()
- {
- mangleTimer = 7 * IN_MILLISECONDS; // These times are probably wrong
- }
-
- void Reset() override
- {
- Initialize();
- }
+ DoCastVictim(SPELL_MANGLE);
+ task.Repeat(10s);
+ });
+ }
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
- {
- if (HealthAbovePct(50) || !instance)
- return;
-
- if (Creature* pGolemagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_GOLEMAGG_THE_INCINERATOR)))
- {
- if (pGolemagg->IsAlive())
- {
- me->AddAura(SPELL_GOLEMAGG_TRUST, me);
- Talk(EMOTE_LOWHP);
- me->SetFullHealth();
- }
- }
- }
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
+ {
+ if (HealthAbovePct(50) || !_instance)
+ return;
- void UpdateAI(uint32 diff) override
+ if (Creature* pGolemagg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_GOLEMAGG_THE_INCINERATOR)))
+ {
+ if (pGolemagg->IsAlive())
{
- if (!UpdateVictim())
- return;
-
- // Mangle
- if (mangleTimer <= diff)
- {
- DoCastVictim(SPELL_MANGLE);
- mangleTimer = 10*IN_MILLISECONDS;
- }
- else
- mangleTimer -= diff;
-
- DoMeleeAttackIfReady();
+ me->AddAura(SPELL_GOLEMAGG_TRUST, me);
+ Talk(EMOTE_LOWHP);
+ me->SetFullHealth();
}
+ }
+ }
- private:
- InstanceScript* instance;
- uint32 mangleTimer;
- };
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- CreatureAI* GetAI(Creature* creature) const override
+ _scheduler.Update(diff, [this]
{
- return GetMoltenCoreAI<npc_core_ragerAI>(creature);
- }
+ DoMeleeAttackIfReady();
+ });
+ }
+
+private:
+ InstanceScript* _instance;
+ TaskScheduler _scheduler;
};
void AddSC_boss_golemagg()
{
- new boss_golemagg();
- new npc_core_rager();
+ RegisterMoltenCoreCreatureAI(boss_golemagg);
+ RegisterMoltenCoreCreatureAI(npc_core_rager);
}