aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-04-20 17:38:57 +0300
committerGitHub <noreply@github.com>2021-04-20 17:38:57 +0300
commit87422fe015befd6782fba1faa59d56d9c4a5dac8 (patch)
tree5adb96b9d3b04bda555ff7b8384819c04063f4d4
parentabed54bf271a742dc61250f59ea1dd7c2c9c13b4 (diff)
Scripts/Nexus: Update Ormorok to new model (#26441)
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp309
1 files changed, 138 insertions, 171 deletions
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
index 0c5d408a69f..5150bc95c5b 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
@@ -61,117 +61,106 @@ class OrmorokTanglerPredicate
Unit* me;
};
-class boss_ormorok : public CreatureScript
+struct boss_ormorok : public BossAI
{
-public:
- boss_ormorok() : CreatureScript("boss_ormorok") { }
-
- struct boss_ormorokAI : public BossAI
+ boss_ormorok(Creature* creature) : BossAI(creature, DATA_ORMOROK)
{
- boss_ormorokAI(Creature* creature) : BossAI(creature, DATA_ORMOROK)
- {
- Initialize();
- }
+ Initialize();
+ }
- void Initialize()
- {
- frenzy = false;
- }
+ void Initialize()
+ {
+ frenzy = false;
+ }
- void Reset() override
- {
- BossAI::Reset();
- Initialize();
- }
+ void Reset() override
+ {
+ BossAI::Reset();
+ Initialize();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CRYSTAL_SPIKES, 12s);
- events.ScheduleEvent(EVENT_TRAMPLE, 10s);
- events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30s);
- if (IsHeroic())
- events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 15s);
+ events.ScheduleEvent(EVENT_CRYSTAL_SPIKES, 12s);
+ events.ScheduleEvent(EVENT_TRAMPLE, 10s);
+ events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30s);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 15s);
- Talk(SAY_AGGRO);
- }
+ Talk(SAY_AGGRO);
+ }
- void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
+ void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
+ {
+ if (!frenzy && HealthBelowPct(25))
{
- if (!frenzy && HealthBelowPct(25))
- {
- Talk(SAY_FRENZY);
- DoCast(me, SPELL_FRENZY);
- frenzy = true;
- }
+ Talk(SAY_FRENZY);
+ DoCast(me, SPELL_FRENZY);
+ frenzy = true;
}
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- Talk(SAY_DEATH);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- void KilledUnit(Unit* who) override
- {
- if (who->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_KILL);
- }
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_KILL);
+ }
- 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())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_TRAMPLE:
- DoCast(me, SPELL_TRAMPLE);
- events.ScheduleEvent(EVENT_TRAMPLE, 10s);
- break;
- case EVENT_SPELL_REFLECTION:
- Talk(SAY_REFLECT);
- DoCast(me, SPELL_SPELL_REFLECTION);
- events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30s);
- break;
- case EVENT_CRYSTAL_SPIKES:
- Talk(SAY_CRYSTAL_SPIKES);
- DoCast(SPELL_CRYSTAL_SPIKES);
- events.ScheduleEvent(EVENT_CRYSTAL_SPIKES, 12s);
- break;
- case EVENT_CRYSTALLINE_TANGLER:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, OrmorokTanglerPredicate(me)))
- DoCast(target, SPELL_SUMMON_CRYSTALLINE_TANGLER);
- events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 15s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_TRAMPLE:
+ DoCast(me, SPELL_TRAMPLE);
+ events.ScheduleEvent(EVENT_TRAMPLE, 10s);
+ break;
+ case EVENT_SPELL_REFLECTION:
+ Talk(SAY_REFLECT);
+ DoCast(me, SPELL_SPELL_REFLECTION);
+ events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30s);
+ break;
+ case EVENT_CRYSTAL_SPIKES:
+ Talk(SAY_CRYSTAL_SPIKES);
+ DoCast(SPELL_CRYSTAL_SPIKES);
+ events.ScheduleEvent(EVENT_CRYSTAL_SPIKES, 12s);
+ break;
+ case EVENT_CRYSTALLINE_TANGLER:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, OrmorokTanglerPredicate(me)))
+ DoCast(target, SPELL_SUMMON_CRYSTALLINE_TANGLER);
+ events.ScheduleEvent(EVENT_CRYSTALLINE_TANGLER, 15s);
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- private:
- bool frenzy;
+ DoMeleeAttackIfReady();
+ }
- };
+private:
+ bool frenzy;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetNexusAI<boss_ormorokAI>(creature);
- }
};
enum CrystalSpikes
@@ -195,112 +184,90 @@ uint32 const crystalSpikeSummon[3] =
47943
};
-class npc_crystal_spike_trigger : public CreatureScript
+struct npc_crystal_spike_trigger : public ScriptedAI
{
-public:
- npc_crystal_spike_trigger() : CreatureScript("npc_crystal_spike_trigger") { }
+ npc_crystal_spike_trigger(Creature* creature) : ScriptedAI(creature)
+ {
+ _count = 0;
+ _despawntimer = 0;
+ }
- struct npc_crystal_spike_triggerAI : public ScriptedAI
+ void IsSummonedBy(WorldObject* owner) override
{
- npc_crystal_spike_triggerAI(Creature* creature) : ScriptedAI(creature)
+ switch (me->GetEntry())
{
- _count = 0;
- _despawntimer = 0;
+ case NPC_CRYSTAL_SPIKE_INITIAL:
+ _count = 0;
+ me->SetFacingToObject(owner);
+ me->CastSpell(me, SPELL_CRYSTAL_SPIKE_AURA, true);
+ break;
+ case NPC_CRYSTAL_SPIKE_TRIGGER:
+ me->CastSpell(me, SPELL_CRYSTAL_SPIKE_AURA, true);
+ if (Creature* trigger = owner->ToCreature())
+ _count = trigger->AI()->GetData(DATA_COUNT) + 1;
+ break;
+ default:
+ _count = MAX_COUNT;
+ break;
}
- void IsSummonedBy(WorldObject* owner) override
- {
- switch (me->GetEntry())
- {
- case NPC_CRYSTAL_SPIKE_INITIAL:
- _count = 0;
- me->SetFacingToObject(owner);
- me->CastSpell(me, SPELL_CRYSTAL_SPIKE_AURA, true);
- break;
- case NPC_CRYSTAL_SPIKE_TRIGGER:
- me->CastSpell(me, SPELL_CRYSTAL_SPIKE_AURA, true);
- if (Creature* trigger = owner->ToCreature())
- _count = trigger->AI()->GetData(DATA_COUNT) + 1;
- break;
- default:
- _count = MAX_COUNT;
- break;
- }
+ if (me->GetEntry() == NPC_CRYSTAL_SPIKE_TRIGGER)
+ if (GameObject* trap = me->FindNearestGameObject(GO_CRYSTAL_SPIKE_TRAP, 1.0f))
+ trap->Use(me);
- if (me->GetEntry() == NPC_CRYSTAL_SPIKE_TRIGGER)
- if (GameObject* trap = me->FindNearestGameObject(GO_CRYSTAL_SPIKE_TRAP, 1.0f))
- trap->Use(me);
-
- _despawntimer = 2000;
- }
+ _despawntimer = 2000;
+ }
- uint32 GetData(uint32 type) const override
- {
- return type == DATA_COUNT ? _count : 0;
- }
+ uint32 GetData(uint32 type) const override
+ {
+ return type == DATA_COUNT ? _count : 0;
+ }
- void UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ if (_despawntimer <= diff)
{
- if (_despawntimer <= diff)
- {
- if (me->GetEntry() == NPC_CRYSTAL_SPIKE_TRIGGER)
- if (GameObject* trap = me->FindNearestGameObject(GO_CRYSTAL_SPIKE_TRAP, 1.0f))
- trap->Delete();
+ if (me->GetEntry() == NPC_CRYSTAL_SPIKE_TRIGGER)
+ if (GameObject* trap = me->FindNearestGameObject(GO_CRYSTAL_SPIKE_TRAP, 1.0f))
+ trap->Delete();
- me->DespawnOrUnsummon();
- }
- else
- _despawntimer -= diff;
+ me->DespawnOrUnsummon();
}
+ else
+ _despawntimer -= diff;
+ }
- private:
- uint32 _count;
- uint32 _despawntimer;
-
- };
+private:
+ uint32 _count;
+ uint32 _despawntimer;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetNexusAI<npc_crystal_spike_triggerAI>(creature);
- }
};
-class spell_crystal_spike : public SpellScriptLoader
+class spell_crystal_spike : public AuraScript
{
- public:
- spell_crystal_spike() : SpellScriptLoader("spell_crystal_spike") { }
+ PrepareAuraScript(spell_crystal_spike);
- class spell_crystal_spike_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_crystal_spike_AuraScript);
-
- void HandlePeriodic(AuraEffect const* /*aurEff*/)
- {
- Unit* target = GetTarget();
- if (target->GetEntry() == NPC_CRYSTAL_SPIKE_INITIAL || target->GetEntry() == NPC_CRYSTAL_SPIKE_TRIGGER)
- if (Creature* trigger = target->ToCreature())
- {
- uint32 spell = target->GetEntry() == NPC_CRYSTAL_SPIKE_INITIAL ? crystalSpikeSummon[0] : crystalSpikeSummon[urand(0, 2)];
- if (trigger->AI()->GetData(DATA_COUNT) < MAX_COUNT)
- trigger->CastSpell(trigger, spell, true);
- }
- }
-
- void Register() override
+ void HandlePeriodic(AuraEffect const* /*aurEff*/)
+ {
+ Unit* target = GetTarget();
+ if (target->GetEntry() == NPC_CRYSTAL_SPIKE_INITIAL || target->GetEntry() == NPC_CRYSTAL_SPIKE_TRIGGER)
+ if (Creature* trigger = target->ToCreature())
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_crystal_spike_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ uint32 spell = target->GetEntry() == NPC_CRYSTAL_SPIKE_INITIAL ? crystalSpikeSummon[0] : crystalSpikeSummon[urand(0, 2)];
+ if (trigger->AI()->GetData(DATA_COUNT) < MAX_COUNT)
+ trigger->CastSpell(trigger, spell, true);
}
- };
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_crystal_spike_AuraScript();
- }
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_crystal_spike::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
};
void AddSC_boss_ormorok()
{
- new boss_ormorok();
- new npc_crystal_spike_trigger();
- new spell_crystal_spike();
+ RegisterNexusCreatureAI(boss_ormorok);
+ RegisterNexusCreatureAI(npc_crystal_spike_trigger);
+ RegisterSpellScript(spell_crystal_spike);
}