aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-07-13 05:16:45 +0300
committerGitHub <noreply@github.com>2021-07-13 05:16:45 +0300
commit8e0429d6abcdd2a1dc73b0e1d720afa393dfdd80 (patch)
tree113a2bf908c3b0fee1520f5fd3e738df00450fc5
parent661e7cca00ac863849ee05677e5d001c90bed0cc (diff)
Scripts/Obsidian Sanctum: Update instance scripts to new register model (#26680)
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp759
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h2
2 files changed, 332 insertions, 429 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index f7465f832a8..6639a3129c8 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -412,59 +412,48 @@ struct dummy_dragonAI : public ScriptedAI
## Tenebron
######*/
-class npc_tenebron : public CreatureScript
+struct npc_tenebron : public dummy_dragonAI
{
-public:
- npc_tenebron() : CreatureScript("npc_tenebron") { }
+ npc_tenebron(Creature* creature) : dummy_dragonAI(creature) { }
- struct npc_tenebronAI : public dummy_dragonAI
+ void Reset() override
{
- npc_tenebronAI(Creature* creature) : dummy_dragonAI(creature) { }
-
- void Reset() override
- {
- dummy_dragonAI::Reset();
- }
+ dummy_dragonAI::Reset();
+ }
- void JustEngagedWith(Unit* who) override
- {
- dummy_dragonAI::JustEngagedWith(who);
+ void JustEngagedWith(Unit* who) override
+ {
+ dummy_dragonAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_HATCH_EGGS, 30s);
- }
+ events.ScheduleEvent(EVENT_HATCH_EGGS, 30s);
+ }
- void UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ // if no target, update dummy and return
+ if (!UpdateVictim())
{
- // if no target, update dummy and return
- if (!UpdateVictim())
- {
- dummy_dragonAI::UpdateAI(diff);
- return;
- }
+ dummy_dragonAI::UpdateAI(diff);
+ return;
+ }
- events.Update(diff);
+ events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_HATCH_EGGS:
- OpenPortal();
- events.ScheduleEvent(EVENT_HATCH_EGGS, 30s);
- break;
- default:
- dummy_dragonAI::ExecuteEvent(eventId);
- break;
- }
+ case EVENT_HATCH_EGGS:
+ OpenPortal();
+ events.ScheduleEvent(EVENT_HATCH_EGGS, 30s);
+ break;
+ default:
+ dummy_dragonAI::ExecuteEvent(eventId);
+ break;
}
-
- DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_tenebronAI>(creature);
+ DoMeleeAttackIfReady();
}
};
@@ -472,78 +461,67 @@ public:
## Shadron
######*/
-class npc_shadron : public CreatureScript
+struct npc_shadron : public dummy_dragonAI
{
-public:
- npc_shadron() : CreatureScript("npc_shadron") { }
+ npc_shadron(Creature* creature) : dummy_dragonAI(creature) { }
- struct npc_shadronAI : public dummy_dragonAI
+ void Reset() override
{
- npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) { }
+ dummy_dragonAI::Reset();
- void Reset() override
- {
- dummy_dragonAI::Reset();
+ if (me->HasAura(SPELL_TWILIGHT_TORMENT_VESP))
+ me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
- if (me->HasAura(SPELL_TWILIGHT_TORMENT_VESP))
- me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
+ if (me->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
+ me->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA);
- if (me->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
- me->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA);
+ instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
+ }
- instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ dummy_dragonAI::JustEngagedWith(who);
- void JustEngagedWith(Unit* who) override
- {
- dummy_dragonAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 1min);
+ }
- events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 1min);
+ void UpdateAI(uint32 diff) override
+ {
+ // if no target, update dummy and return
+ if (!UpdateVictim())
+ {
+ dummy_dragonAI::UpdateAI(diff);
+ return;
}
- void UpdateAI(uint32 diff) override
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- // if no target, update dummy and return
- if (!UpdateVictim())
+ switch (eventId)
{
- dummy_dragonAI::UpdateAI(diff);
- return;
- }
+ case EVENT_ACOLYTE_SHADRON:
+ if (instance->GetBossState(DATA_PORTAL_OPEN) == NOT_STARTED)
+ events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 10s);
+ else
+ {
+ if (me->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
+ return;
- events.Update(diff);
+ OpenPortal();
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_ACOLYTE_SHADRON:
- if (instance->GetBossState(DATA_PORTAL_OPEN) == NOT_STARTED)
- events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 10s);
- else
- {
- if (me->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
- return;
-
- OpenPortal();
-
- instance->SetBossState(DATA_PORTAL_OPEN, IN_PROGRESS);
-
- events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 60s, 65s);
- }
- break;
- default:
- dummy_dragonAI::ExecuteEvent(eventId);
- break;
- }
- }
+ instance->SetBossState(DATA_PORTAL_OPEN, IN_PROGRESS);
- DoMeleeAttackIfReady();
+ events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 60s, 65s);
+ }
+ break;
+ default:
+ dummy_dragonAI::ExecuteEvent(eventId);
+ break;
+ }
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_shadronAI>(creature);
+ DoMeleeAttackIfReady();
}
};
@@ -551,65 +529,54 @@ public:
## Vesperon
######*/
-class npc_vesperon : public CreatureScript
+struct npc_vesperon : public dummy_dragonAI
{
-public:
- npc_vesperon() : CreatureScript("npc_vesperon") { }
+ npc_vesperon(Creature* creature) : dummy_dragonAI(creature) { }
- struct npc_vesperonAI : public dummy_dragonAI
+ void Reset() override
{
- npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) { }
-
- void Reset() override
- {
- dummy_dragonAI::Reset();
- }
+ dummy_dragonAI::Reset();
+ }
- void JustEngagedWith(Unit* who) override
- {
- dummy_dragonAI::JustEngagedWith(who);
+ void JustEngagedWith(Unit* who) override
+ {
+ dummy_dragonAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 1min);
- }
+ events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 1min);
+ }
- void UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ // if no target, update dummy and return
+ if (!UpdateVictim())
{
- // if no target, update dummy and return
- if (!UpdateVictim())
- {
- dummy_dragonAI::UpdateAI(diff);
- return;
- }
+ dummy_dragonAI::UpdateAI(diff);
+ return;
+ }
- events.Update(diff);
+ events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_ACOLYTE_VESPERON:
- if (instance->GetBossState(DATA_PORTAL_OPEN) == IN_PROGRESS)
- events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 10s);
- else
- {
- OpenPortal();
- DoCastVictim(SPELL_TWILIGHT_TORMENT_VESP);
- events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 60s, 70s);
- }
- break;
- default:
- dummy_dragonAI::ExecuteEvent(eventId);
- break;
- }
+ case EVENT_ACOLYTE_VESPERON:
+ if (instance->GetBossState(DATA_PORTAL_OPEN) == IN_PROGRESS)
+ events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 10s);
+ else
+ {
+ OpenPortal();
+ DoCastVictim(SPELL_TWILIGHT_TORMENT_VESP);
+ events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 60s, 70s);
+ }
+ break;
+ default:
+ dummy_dragonAI::ExecuteEvent(eventId);
+ break;
}
-
- DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_vesperonAI>(creature);
+ DoMeleeAttackIfReady();
}
};
@@ -617,166 +584,144 @@ public:
## Acolyte of Shadron
######*/
-class npc_acolyte_of_shadron : public CreatureScript
+struct npc_acolyte_of_shadron : public ScriptedAI
{
- public:
- npc_acolyte_of_shadron() : CreatureScript("npc_acolyte_of_shadron") { }
-
- struct npc_acolyte_of_shadronAI : public ScriptedAI
- {
- npc_acolyte_of_shadronAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- void Reset() override
- {
- // Despawn the NPC automatically after 28 seconds
- me->DespawnOrUnsummon(28s);
-
- //if not solo fight, buff main boss, else place debuff on mini-boss. both spells TARGET_SCRIPT
- if (instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS)
- {
- if (Creature* sartharion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARTHARION)))
- sartharion->AddAura(SPELL_GIFT_OF_TWILIGTH_SAR, sartharion);
- }
- else
- {
- if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
- shadron->AddAura(SPELL_GIFT_OF_TWILIGTH_SHA, shadron);
- }
+ npc_acolyte_of_shadron(Creature* creature) : ScriptedAI(creature)
+ {
+ instance = creature->GetInstanceScript();
+ }
- me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
- }
+ void Reset() override
+ {
+ // Despawn the NPC automatically after 28 seconds
+ me->DespawnOrUnsummon(28s);
- void JustDied(Unit* /*killer*/) override
- {
- if (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
- instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
+ //if not solo fight, buff main boss, else place debuff on mini-boss. both spells TARGET_SCRIPT
+ if (instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS)
+ {
+ if (Creature* sartharion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARTHARION)))
+ sartharion->AddAura(SPELL_GIFT_OF_TWILIGTH_SAR, sartharion);
+ }
+ else
+ {
+ if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
+ shadron->AddAura(SPELL_GIFT_OF_TWILIGTH_SHA, shadron);
+ }
- Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
+ me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
+ }
- if (PlayerList.isEmpty())
- return;
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
+ instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- {
- if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
- {
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
- }
- }
+ Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
- // not solo fight, so main boss has debuff
- if (Creature* debuffTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARTHARION)))
- if (debuffTarget->IsAlive() && debuffTarget->HasAura(SPELL_GIFT_OF_TWILIGTH_SAR))
- debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SAR);
+ if (PlayerList.isEmpty())
+ return;
- // event not in progress, then solo fight and must remove debuff mini-boss
- if (Creature* debuffTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
- if (debuffTarget->IsAlive() && debuffTarget->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
- debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA);
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ {
+ if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
+ {
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
}
+ }
- void UpdateAI(uint32 /*diff*/) override
- {
- if (!UpdateVictim())
- return;
+ // not solo fight, so main boss has debuff
+ if (Creature* debuffTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARTHARION)))
+ if (debuffTarget->IsAlive() && debuffTarget->HasAura(SPELL_GIFT_OF_TWILIGTH_SAR))
+ debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SAR);
- DoMeleeAttackIfReady();
- }
+ // event not in progress, then solo fight and must remove debuff mini-boss
+ if (Creature* debuffTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON)))
+ if (debuffTarget->IsAlive() && debuffTarget->HasAura(SPELL_GIFT_OF_TWILIGTH_SHA))
+ debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA);
+ }
- private:
- InstanceScript* instance;
- };
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (!UpdateVictim())
+ return;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_acolyte_of_shadronAI>(creature);
- }
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ InstanceScript* instance;
};
/*######
## Acolyte of Vesperon
######*/
-class npc_acolyte_of_vesperon : public CreatureScript
+struct npc_acolyte_of_vesperon : public ScriptedAI
{
- public:
- npc_acolyte_of_vesperon() : CreatureScript("npc_acolyte_of_vesperon") { }
-
- struct npc_acolyte_of_vesperonAI : public ScriptedAI
- {
- npc_acolyte_of_vesperonAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- void Reset() override
- {
- // Despawn the NPC automatically after 28 seconds
- me->DespawnOrUnsummon(28s);
+ npc_acolyte_of_vesperon(Creature* creature) : ScriptedAI(creature)
+ {
+ instance = creature->GetInstanceScript();
+ }
- me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
+ void Reset() override
+ {
+ // Despawn the NPC automatically after 28 seconds
+ me->DespawnOrUnsummon(28s);
- DoCast(me, SPELL_TWILIGHT_TORMENT_VESP_ACO);
- }
+ me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
- void JustDied(Unit* /*killer*/) override
- {
- me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP_ACO);
+ DoCast(me, SPELL_TWILIGHT_TORMENT_VESP_ACO);
+ }
- // remove twilight torment on Vesperon
- if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_VESPERON)))
- {
- instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
+ void JustDied(Unit* /*killer*/) override
+ {
+ me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP_ACO);
- if (vesperon->IsAlive() && vesperon->HasAura(SPELL_TWILIGHT_TORMENT_VESP))
- vesperon->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
- }
+ // remove twilight torment on Vesperon
+ if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_VESPERON)))
+ {
+ instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
- Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
+ if (vesperon->IsAlive() && vesperon->HasAura(SPELL_TWILIGHT_TORMENT_VESP))
+ vesperon->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
+ }
- if (PlayerList.isEmpty())
- return;
+ Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- {
- if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
- {
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
- i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
- }
- if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_TORMENT_VESP) && !i->GetSource()->GetVictim())
- i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
- }
+ if (PlayerList.isEmpty())
+ return;
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_VESP_ACO, true, true);
- instance->DoRemoveAurasDueToSpellOnPlayers(57935, true, true);
- instance->DoRemoveAurasDueToSpellOnPlayers(58835, true, true); // Components of spell Twilight Torment
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ {
+ if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim())
+ {
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true);
+ i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT);
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER);
}
+ if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_TORMENT_VESP) && !i->GetSource()->GetVictim())
+ i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP);
+ }
- void UpdateAI(uint32 /*diff*/) override
- {
- if (!UpdateVictim())
- return;
+ instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_VESP_ACO, true, true);
+ instance->DoRemoveAurasDueToSpellOnPlayers(57935, true, true);
+ instance->DoRemoveAurasDueToSpellOnPlayers(58835, true, true); // Components of spell Twilight Torment
+ }
- DoMeleeAttackIfReady();
- }
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (!UpdateVictim())
+ return;
- private:
- InstanceScript* instance;
- };
+ DoMeleeAttackIfReady();
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_acolyte_of_vesperonAI>(creature);
- }
+private:
+ InstanceScript* instance;
};
/*######
@@ -788,64 +733,53 @@ enum TwilightEggs
EVENT_TWILIGHT_EGGS = 11
};
-class npc_twilight_eggs : public CreatureScript
+struct npc_twilight_eggs : public ScriptedAI
{
-public:
- npc_twilight_eggs() : CreatureScript("npc_twilight_eggs") { }
+ npc_twilight_eggs(Creature* creature) : ScriptedAI(creature)
+ {
+ SetCombatMovement(false);
+ instance = creature->GetInstanceScript();
+ }
- struct npc_twilight_eggsAI : public ScriptedAI
+ void Reset() override
{
- npc_twilight_eggsAI(Creature* creature) : ScriptedAI(creature)
- {
- SetCombatMovement(false);
- instance = creature->GetInstanceScript();
- }
+ me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
- void Reset() override
- {
- me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me);
+ events.ScheduleEvent(EVENT_TWILIGHT_EGGS, 20s);
+ }
- events.ScheduleEvent(EVENT_TWILIGHT_EGGS, 20s);
- }
+ void SpawnWhelps()
+ {
+ me->RemoveAllAuras();
- void SpawnWhelps()
- {
- me->RemoveAllAuras();
+ if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS)
+ me->SummonCreature(NPC_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 1min);
+ else
+ me->SummonCreature(NPC_SARTHARION_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 1min);
+ me->KillSelf();
+ }
- if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS)
- me->SummonCreature(NPC_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 1min);
- else
- me->SummonCreature(NPC_SARTHARION_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 1min);
- me->KillSelf();
- }
+ void JustSummoned(Creature* who) override
+ {
+ DoZoneInCombat(who);
+ }
- void JustSummoned(Creature* who) override
- {
- DoZoneInCombat(who);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
+ if (events.ExecuteEvent() == EVENT_TWILIGHT_EGGS)
{
- events.Update(diff);
-
- if (events.ExecuteEvent() == EVENT_TWILIGHT_EGGS)
- {
- if (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TENEBRON)))
- instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
+ if (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TENEBRON)))
+ instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED);
- SpawnWhelps();
- }
+ SpawnWhelps();
}
-
- private:
- InstanceScript* instance;
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_twilight_eggsAI>(creature);
}
+
+private:
+ InstanceScript* instance;
+ EventMap events;
};
/*######
@@ -858,56 +792,45 @@ enum FlameTsunami
EVENT_TSUNAMI_BUFF = 13
};
-class npc_flame_tsunami : public CreatureScript
+struct npc_flame_tsunami : public ScriptedAI
{
-public:
- npc_flame_tsunami() : CreatureScript("npc_flame_tsunami") { }
+ npc_flame_tsunami(Creature* creature) : ScriptedAI(creature)
+ {
+ me->SetDisplayId(11686);
+ me->AddAura(SPELL_FLAME_TSUNAMI, me);
+ }
- struct npc_flame_tsunamiAI : public ScriptedAI
+ void Reset() override
{
- npc_flame_tsunamiAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetDisplayId(11686);
- me->AddAura(SPELL_FLAME_TSUNAMI, me);
- }
+ me->SetReactState(REACT_PASSIVE);
+ events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 100ms);
+ events.ScheduleEvent(EVENT_TSUNAMI_BUFF, 1s);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ }
- void Reset() override
- {
- me->SetReactState(REACT_PASSIVE);
- events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 100ms);
- events.ScheduleEvent(EVENT_TSUNAMI_BUFF, 1s);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = events.ExecuteEvent())
{
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_TSUNAMI_TIMER:
- DoCast(me, SPELL_FLAME_TSUNAMI_DMG_AURA);
- events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 500ms);
- break;
- case EVENT_TSUNAMI_BUFF:
- if (Unit* lavaBlaze = GetClosestCreatureWithEntry(me, NPC_LAVA_BLAZE, 10.0f, true))
- lavaBlaze->CastSpell(lavaBlaze, SPELL_FLAME_TSUNAMI_BUFF, true);
- events.ScheduleEvent(EVENT_TSUNAMI_BUFF, 1s);
- break;
- }
+ case EVENT_TSUNAMI_TIMER:
+ DoCast(me, SPELL_FLAME_TSUNAMI_DMG_AURA);
+ events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 500ms);
+ break;
+ case EVENT_TSUNAMI_BUFF:
+ if (Unit* lavaBlaze = GetClosestCreatureWithEntry(me, NPC_LAVA_BLAZE, 10.0f, true))
+ lavaBlaze->CastSpell(lavaBlaze, SPELL_FLAME_TSUNAMI_BUFF, true);
+ events.ScheduleEvent(EVENT_TSUNAMI_BUFF, 1s);
+ break;
}
}
-
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_flame_tsunamiAI>(creature);
}
+
+private:
+ EventMap events;
};
/*######
@@ -919,49 +842,38 @@ enum TwilightFissure
EVENT_VOID_BLAST = 14
};
-class npc_twilight_fissure : public CreatureScript
+struct npc_twilight_fissure : public ScriptedAI
{
-public:
- npc_twilight_fissure() : CreatureScript("npc_twilight_fissure") { }
+ npc_twilight_fissure(Creature* creature) : ScriptedAI(creature)
+ {
+ SetCombatMovement(false);
+ }
- struct npc_twilight_fissureAI : public ScriptedAI
+ void Reset() override
{
- npc_twilight_fissureAI(Creature* creature) : ScriptedAI(creature)
- {
- SetCombatMovement(false);
- }
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
+ me->AddAura(46265, me); // Wrong, can't find proper visual
+ me->AddAura(69422, me);
+ events.ScheduleEvent(EVENT_VOID_BLAST, 5s);
+ }
- void Reset() override
- {
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->AddAura(46265, me); // Wrong, can't find proper visual
- me->AddAura(69422, me);
- events.ScheduleEvent(EVENT_VOID_BLAST, 5s);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
+ if (events.ExecuteEvent() == EVENT_VOID_BLAST)
{
- events.Update(diff);
-
- if (events.ExecuteEvent() == EVENT_VOID_BLAST)
- {
- DoCastAOE(SPELL_VOID_BLAST);
- ////twilight realm
- //DoCastVictim(57620, true);
- //DoCastVictim(57874, true);
- me->RemoveAllAuras();
- me->KillSelf();
- }
+ DoCastAOE(SPELL_VOID_BLAST);
+ ////twilight realm
+ //DoCastVictim(57620, true);
+ //DoCastVictim(57874, true);
+ me->RemoveAllAuras();
+ me->KillSelf();
}
-
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_twilight_fissureAI>(creature);
}
+
+private:
+ EventMap events;
};
/*######
@@ -973,49 +885,38 @@ enum TwilightWhelps
EVENT_FADE_ARMOR = 15
};
-class npc_twilight_whelp : public CreatureScript
+struct npc_twilight_whelp : public ScriptedAI
{
-public:
- npc_twilight_whelp() : CreatureScript("npc_twilight_whelp") { }
-
- struct npc_twilight_whelpAI : public ScriptedAI
+ npc_twilight_whelp(Creature* creature) : ScriptedAI(creature)
{
- npc_twilight_whelpAI(Creature* creature) : ScriptedAI(creature)
- {
- }
-
- void Reset() override
- {
- me->RemoveAllAuras();
- DoZoneInCombat();
- events.ScheduleEvent(EVENT_FADE_ARMOR, 1s);
- }
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void Reset() override
+ {
+ me->RemoveAllAuras();
+ DoZoneInCombat();
+ events.ScheduleEvent(EVENT_FADE_ARMOR, 1s);
+ }
- // twilight torment
- events.Update(diff);
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- if (events.ExecuteEvent() == EVENT_FADE_ARMOR)
- {
- DoCastVictim(SPELL_FADE_ARMOR);
- events.ScheduleEvent(EVENT_FADE_ARMOR, 5s, 10s);
- }
+ // twilight torment
+ events.Update(diff);
- DoMeleeAttackIfReady();
+ if (events.ExecuteEvent() == EVENT_FADE_ARMOR)
+ {
+ DoCastVictim(SPELL_FADE_ARMOR);
+ events.ScheduleEvent(EVENT_FADE_ARMOR, 5s, 10s);
}
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetObsidianSanctumAI<npc_twilight_whelpAI>(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap events;
};
class achievement_twilight_assist : public AchievementCriteriaScript
@@ -1053,15 +954,15 @@ class achievement_twilight_zone : public AchievementCriteriaScript
void AddSC_obsidian_sanctum()
{
- new npc_vesperon();
- new npc_shadron();
- new npc_tenebron();
- new npc_acolyte_of_shadron();
- new npc_acolyte_of_vesperon();
- new npc_twilight_eggs();
- new npc_flame_tsunami();
- new npc_twilight_fissure();
- new npc_twilight_whelp();
+ RegisterObsidianSanctumCreatureAI(npc_vesperon);
+ RegisterObsidianSanctumCreatureAI(npc_shadron);
+ RegisterObsidianSanctumCreatureAI(npc_tenebron);
+ RegisterObsidianSanctumCreatureAI(npc_acolyte_of_shadron);
+ RegisterObsidianSanctumCreatureAI(npc_acolyte_of_vesperon);
+ RegisterObsidianSanctumCreatureAI(npc_twilight_eggs);
+ RegisterObsidianSanctumCreatureAI(npc_flame_tsunami);
+ RegisterObsidianSanctumCreatureAI(npc_twilight_fissure);
+ RegisterObsidianSanctumCreatureAI(npc_twilight_whelp);
new achievement_twilight_assist();
new achievement_twilight_duo();
new achievement_twilight_zone();
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h
index 64365ca50b3..cd7e78603a6 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h
@@ -54,4 +54,6 @@ inline AI* GetObsidianSanctumAI(T* obj)
return GetInstanceAI<AI>(obj, OSScriptName);
}
+#define RegisterObsidianSanctumCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetObsidianSanctumAI)
+
#endif // OBSIDIAN_SANCTUM_H_