diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/VioletHold/boss_moragg.cpp | 220 |
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); } |