aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_moragg.cpp220
1 files changed, 97 insertions, 123 deletions
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index 625944355ad..a78c2427aee 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -26,10 +26,6 @@ enum Spells
{
SPELL_CORROSIVE_SALIVA = 54527,
SPELL_OPTIC_LINK = 54396,
- SPELL_RAY_OF_PAIN = 54438,
- SPELL_RAY_OF_PAIN_H = 59523,
- SPELL_RAY_OF_SUFFERING = 54442,
- SPELL_RAY_OF_SUFFERING_H = 59524,
// Visual
SPELL_OPTIC_LINK_LEVEL_1 = 54393,
@@ -37,161 +33,139 @@ enum Spells
SPELL_OPTIC_LINK_LEVEL_3 = 54395
};
-class boss_moragg : public CreatureScript
+#define SPELL_RAY_OF_PAIN DUNGEON_MODE(54438,59523)
+#define SPELL_RAY_OF_SUFFERING DUNGEON_MODE(54442,59524)
+
+struct boss_moragg : public BossAI
{
- public:
- boss_moragg() : CreatureScript("boss_moragg") { }
+ boss_moragg(Creature* creature) : BossAI(creature, DATA_MORAGG) { }
- struct boss_moraggAI : public BossAI
- {
- boss_moraggAI(Creature* creature) : BossAI(creature, DATA_MORAGG) { }
+ void Reset() override
+ {
+ BossAI::Reset();
+ }
- void JustReachedHome() override
- {
- BossAI::JustReachedHome();
- instance->SetData(DATA_HANDLE_CELLS, DATA_MORAGG);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void JustReachedHome() override
+ {
+ BossAI::JustReachedHome();
+ instance->SetData(DATA_HANDLE_CELLS, DATA_MORAGG);
+ }
- scheduler.Update(diff,
- std::bind(&BossAI::DoMeleeAttackIfReady, this));
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void ScheduleTasks() override
- {
- scheduler.Async([this]
- {
- DoCast(me, DUNGEON_MODE(SPELL_RAY_OF_PAIN, SPELL_RAY_OF_PAIN_H));
- DoCast(me, DUNGEON_MODE(SPELL_RAY_OF_SUFFERING, SPELL_RAY_OF_SUFFERING_H));
- });
-
- scheduler.Schedule(Seconds(15), [this](TaskContext task)
- {
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
- DoCast(target, SPELL_OPTIC_LINK);
- task.Repeat(Seconds(25));
- });
-
- scheduler.Schedule(Seconds(5), [this](TaskContext task)
- {
- DoCastVictim(SPELL_CORROSIVE_SALIVA);
- task.Repeat(Seconds(10));
- });
- }
- };
+ scheduler.Update(diff,
+ std::bind(&BossAI::DoMeleeAttackIfReady, this));
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void ScheduleTasks() override
+ {
+ scheduler.Async([this]
{
- return GetVioletHoldAI<boss_moraggAI>(creature);
- }
-};
-
-class spell_moragg_ray : public SpellScriptLoader
-{
- public:
- spell_moragg_ray() : SpellScriptLoader("spell_moragg_ray") { }
+ DoCast(me, SPELL_RAY_OF_PAIN);
+ DoCast(me, SPELL_RAY_OF_SUFFERING);
+ });
- class spell_moragg_ray_AuraScript : public AuraScript
+ scheduler.Schedule(Seconds(15), [this](TaskContext task)
{
- PrepareAuraScript(spell_moragg_ray_AuraScript);
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
+ DoCast(target, SPELL_OPTIC_LINK);
+ task.Repeat(Seconds(25));
+ });
- void OnPeriodic(AuraEffect const* aurEff)
- {
- PreventDefaultAction();
+ scheduler.Schedule(Seconds(5), [this](TaskContext task)
+ {
+ DoCastVictim(SPELL_CORROSIVE_SALIVA);
+ task.Repeat(Seconds(10));
+ });
+ }
+};
- if (!GetTarget()->GetAI())
- return;
+class spell_moragg_ray : public AuraScript
+{
+ PrepareAuraScript(spell_moragg_ray);
- if (Unit* target = GetTarget()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true))
- {
- uint32 triggerSpell = aurEff->GetSpellEffectInfo().TriggerSpell;
- GetTarget()->CastSpell(target, triggerSpell, aurEff);
- }
- }
+ void OnPeriodic(AuraEffect const* aurEff)
+ {
+ PreventDefaultAction();
- void Register() override
+ if (UnitAI* AI = GetTarget()->GetAI())
+ if (Unit* target = AI->SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true))
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_moragg_ray_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ uint32 triggerSpell = aurEff->GetSpellEffectInfo().TriggerSpell;
+ GetTarget()->CastSpell(target, triggerSpell, aurEff);
}
- };
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_moragg_ray_AuraScript();
- }
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_moragg_ray::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
};
-class spell_moragg_optic_link : public SpellScriptLoader
+class spell_moragg_optic_link : public AuraScript
{
-public:
- spell_moragg_optic_link() : SpellScriptLoader("spell_moragg_optic_link") { }
+ PrepareAuraScript(spell_moragg_optic_link);
- class spell_moragg_optic_link_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareAuraScript(spell_moragg_optic_link_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
+ return ValidateSpellInfo(
{
- return ValidateSpellInfo(
- {
- SPELL_OPTIC_LINK_LEVEL_3,
- SPELL_OPTIC_LINK_LEVEL_2,
- SPELL_OPTIC_LINK_LEVEL_1
- });
- }
+ SPELL_OPTIC_LINK_LEVEL_3,
+ SPELL_OPTIC_LINK_LEVEL_2,
+ SPELL_OPTIC_LINK_LEVEL_1
+ });
+ }
- void OnPeriodic(AuraEffect const* aurEff)
+ void OnPeriodic(AuraEffect const* aurEff)
+ {
+ if (Unit* caster = GetCaster())
{
- if (Unit* caster = GetCaster())
- {
- if (aurEff->GetTickNumber() >= 8)
- caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_3, aurEff);
+ if (aurEff->GetTickNumber() >= 8)
+ caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_3, aurEff);
- if (aurEff->GetTickNumber() >= 4)
- caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_2, aurEff);
-
- caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_1, aurEff);
- }
- }
+ if (aurEff->GetTickNumber() >= 4)
+ caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_2, aurEff);
- void OnUpdate(AuraEffect* aurEff)
- {
- switch (aurEff->GetTickNumber())
- {
- case 1:
- aurEff->SetAmount(aurEff->GetAmount() + 250); // base amount is 500
- break;
- case 4:
- aurEff->SetAmount(aurEff->GetAmount() * 2); // goes to 1500
- break;
- case 8:
- aurEff->SetAmount(aurEff->GetAmount() * 2); // goes to 3000
- break;
- default:
- break;
- }
+ caster->CastSpell(GetTarget(), SPELL_OPTIC_LINK_LEVEL_1, aurEff);
}
+ }
- void Register() override
+ void OnUpdate(AuraEffect* aurEff)
+ {
+ switch (aurEff->GetTickNumber())
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_moragg_optic_link_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
- OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_moragg_optic_link_AuraScript::OnUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
+ case 1:
+ aurEff->SetAmount(aurEff->GetAmount() + 250); // base amount is 500
+ break;
+ case 4:
+ aurEff->SetAmount(aurEff->GetAmount() * 2); // goes to 1500
+ break;
+ case 8:
+ aurEff->SetAmount(aurEff->GetAmount() * 2); // goes to 3000
+ break;
+ default:
+ break;
}
- };
+ }
- AuraScript* GetAuraScript() const override
+ void Register() override
{
- return new spell_moragg_optic_link_AuraScript();
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_moragg_optic_link::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
+ OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_moragg_optic_link::OnUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
void AddSC_boss_moragg()
{
- new boss_moragg();
- new spell_moragg_ray();
- new spell_moragg_optic_link();
+ RegisterVioletHoldCreatureAI(boss_moragg);
+ RegisterSpellScript(spell_moragg_ray);
+ RegisterSpellScript(spell_moragg_optic_link);
}