aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-04-15 15:20:20 +0300
committerGitHub <noreply@github.com>2021-04-15 14:20:20 +0200
commit0fc3a05d3cf16df66902ddff91889ae4001abac3 (patch)
treedd5902fdb86971414ebb5f70cd9a742ec9fb7d09 /src
parent747333149d096fc7600d57c37768a09b80b1b3b1 (diff)
Scripts/BRS: Update scripts to new model (2/3) (#26417)
Co-authored-by: offl <offl@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp151
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp94
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp137
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp440
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp87
5 files changed, 421 insertions, 488 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
index 536c952e6de..8484b0e7e04 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
@@ -40,110 +40,99 @@ enum Events
EVENT_SHADOW_WRATH = 3
};
-class boss_lord_valthalak : public CreatureScript
+struct boss_lord_valthalak : public BossAI
{
-public:
- boss_lord_valthalak() : CreatureScript("boss_lord_valthalak") { }
-
- struct boss_lord_valthalakAI : public BossAI
+ boss_lord_valthalak(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK)
{
- boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK)
- {
- Initialize();
- }
+ Initialize();
+ }
- void Initialize()
- {
- frenzy40 = false;
- frenzy15 = false;
- }
+ void Initialize()
+ {
+ frenzy40 = false;
+ frenzy15 = false;
+ }
- void Reset() override
- {
- _Reset();
- Initialize();
- }
+ void Reset() override
+ {
+ _Reset();
+ Initialize();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN, 6s, 8s);
- events.ScheduleEvent(EVENT_SHADOW_WRATH, 9s, 18s);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN, 6s, 8s);
+ events.ScheduleEvent(EVENT_SHADOW_WRATH, 9s, 18s);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- instance->SetData(DATA_LORD_VALTHALAK, DONE);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ instance->SetData(DATA_LORD_VALTHALAK, DONE);
+ }
- 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_SUMMON_SPECTRAL_ASSASSIN:
- DoCast(me, SPELL_SUMMON_SPECTRAL_ASSASSIN);
- events.ScheduleEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN, 30s, 35s);
- break;
- case EVENT_SHADOW_BOLT_VOLLEY:
- DoCastVictim(SPELL_SHADOW_BOLT_VOLLEY);
- events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 4s, 6s);
- break;
- case EVENT_SHADOW_WRATH:
- DoCastVictim(SPELL_SHADOW_WRATH);
- events.ScheduleEvent(EVENT_SHADOW_WRATH, 19s, 24s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_SUMMON_SPECTRAL_ASSASSIN:
+ DoCast(me, SPELL_SUMMON_SPECTRAL_ASSASSIN);
+ events.ScheduleEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN, 30s, 35s);
+ break;
+ case EVENT_SHADOW_BOLT_VOLLEY:
+ DoCastVictim(SPELL_SHADOW_BOLT_VOLLEY);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 4s, 6s);
+ break;
+ case EVENT_SHADOW_WRATH:
+ DoCastVictim(SPELL_SHADOW_WRATH);
+ events.ScheduleEvent(EVENT_SHADOW_WRATH, 19s, 24s);
+ break;
+ default:
+ break;
}
- if (!frenzy40)
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+
+ if (!frenzy40)
+ {
+ if (HealthBelowPct(40))
{
- if (HealthBelowPct(40))
- {
- DoCast(me, SPELL_FRENZY);
- events.CancelEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN);
- frenzy40 = true;
- }
+ DoCast(me, SPELL_FRENZY);
+ events.CancelEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN);
+ frenzy40 = true;
}
+ }
- if (!frenzy15)
+ if (!frenzy15)
+ {
+ if (HealthBelowPct(15))
{
- if (HealthBelowPct(15))
- {
- DoCast(me, SPELL_FRENZY);
- events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 7s, 14s);
- frenzy15 = true;
- }
+ DoCast(me, SPELL_FRENZY);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 7s, 14s);
+ frenzy15 = true;
}
-
- DoMeleeAttackIfReady();
}
- private:
- bool frenzy40;
- bool frenzy15;
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<boss_lord_valthalakAI>(creature);
+ DoMeleeAttackIfReady();
}
+ private:
+ bool frenzy40;
+ bool frenzy15;
};
void AddSC_boss_lord_valthalak()
{
- new boss_lord_valthalak();
+ RegisterBlackrockSpireCreatureAI(boss_lord_valthalak);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp
index 52e19db9a39..e647d75ff68 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp
@@ -32,77 +32,65 @@ enum Events
EVENT_MOTHERS_MILK = 2,
};
-class boss_mother_smolderweb : public CreatureScript
+struct boss_mother_smolderweb : public BossAI
{
-public:
- boss_mother_smolderweb() : CreatureScript("boss_mother_smolderweb") { }
+ boss_mother_smolderweb(Creature* creature) : BossAI(creature, DATA_MOTHER_SMOLDERWEB) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetBlackrockSpireAI<boss_mothersmolderwebAI>(creature);
+ _Reset();
}
- struct boss_mothersmolderwebAI : public BossAI
+ void JustEngagedWith(Unit* who) override
{
- boss_mothersmolderwebAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SMOLDERWEB) { }
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_CRYSTALIZE, 20s);
+ events.ScheduleEvent(EVENT_MOTHERS_MILK, 10s);
+ }
- void Reset() override
- {
- _Reset();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CRYSTALIZE, 20s);
- events.ScheduleEvent(EVENT_MOTHERS_MILK, 10s);
- }
+ void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
+ {
+ if (me->GetHealth() <= damage)
+ DoCast(me, SPELL_SUMMON_SPIRE_SPIDERLING, true);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
- {
- if (me->GetHealth() <= damage)
- DoCast(me, SPELL_SUMMON_SPIRE_SPIDERLING, true);
- }
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- events.Update(diff);
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CRYSTALIZE:
+ DoCast(me, SPELL_CRYSTALIZE);
+ events.ScheduleEvent(EVENT_CRYSTALIZE, 15s);
+ break;
+ case EVENT_MOTHERS_MILK:
+ DoCast(me, SPELL_MOTHERSMILK);
+ events.ScheduleEvent(EVENT_MOTHERS_MILK, 5s, 12500ms);
+ break;
+ }
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_CRYSTALIZE:
- DoCast(me, SPELL_CRYSTALIZE);
- events.ScheduleEvent(EVENT_CRYSTALIZE, 15s);
- break;
- case EVENT_MOTHERS_MILK:
- DoCast(me, SPELL_MOTHERSMILK);
- events.ScheduleEvent(EVENT_MOTHERS_MILK, 5s, 12500ms);
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
- DoMeleeAttackIfReady();
}
- };
-
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_mothersmolderweb()
{
- new boss_mother_smolderweb();
+ RegisterBlackrockSpireCreatureAI(boss_mother_smolderweb);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
index 42bebca0c30..5eb1eedb157 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
@@ -45,103 +45,92 @@ enum Adds
const Position SummonLocation1 = { -39.355f, -513.456f, 88.472f, 4.679f };
const Position SummonLocation2 = { -49.875f, -511.896f, 88.195f, 4.613f };
-class boss_overlord_wyrmthalak : public CreatureScript
+struct boss_overlord_wyrmthalak : public BossAI
{
-public:
- boss_overlord_wyrmthalak() : CreatureScript("boss_overlord_wyrmthalak") { }
+ boss_overlord_wyrmthalak(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK)
+ {
+ Initialize();
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void Initialize()
{
- return GetBlackrockSpireAI<boss_overlordwyrmthalakAI>(creature);
+ Summoned = false;
}
- struct boss_overlordwyrmthalakAI : public BossAI
+ bool Summoned;
+
+ void Reset() override
{
- boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK)
- {
- Initialize();
- }
+ _Reset();
+ Initialize();
+ }
- void Initialize()
- {
- Summoned = false;
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_BLAST_WAVE, 20s);
+ events.ScheduleEvent(EVENT_SHOUT, 2s);
+ events.ScheduleEvent(EVENT_CLEAVE, 6s);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 12s);
+ }
- bool Summoned;
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void Reset() override
- {
- _Reset();
- Initialize();
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void JustEngagedWith(Unit* who) override
+ if (!Summoned && HealthBelowPct(51))
{
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 20s);
- events.ScheduleEvent(EVENT_SHOUT, 2s);
- events.ScheduleEvent(EVENT_CLEAVE, 6s);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 12s);
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
+ {
+ if (Creature* warlord = me->SummonCreature(NPC_SPIRESTONE_WARLORD, SummonLocation1, TEMPSUMMON_TIMED_DESPAWN, 5min))
+ warlord->AI()->AttackStart(target);
+ if (Creature* berserker = me->SummonCreature(NPC_SMOLDERTHORN_BERSERKER, SummonLocation2, TEMPSUMMON_TIMED_DESPAWN, 5min))
+ berserker->AI()->AttackStart(target);
+ Summoned = true;
+ }
}
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (!Summoned && HealthBelowPct(51))
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
- {
- if (Creature* warlord = me->SummonCreature(NPC_SPIRESTONE_WARLORD, SummonLocation1, TEMPSUMMON_TIMED_DESPAWN, 5min))
- warlord->AI()->AttackStart(target);
- if (Creature* berserker = me->SummonCreature(NPC_SMOLDERTHORN_BERSERKER, SummonLocation2, TEMPSUMMON_TIMED_DESPAWN, 5min))
- berserker->AI()->AttackStart(target);
- Summoned = true;
- }
+ case EVENT_BLAST_WAVE:
+ DoCastVictim(SPELL_BLASTWAVE);
+ events.ScheduleEvent(EVENT_BLAST_WAVE, 20s);
+ break;
+ case EVENT_SHOUT:
+ DoCastVictim(SPELL_SHOUT);
+ events.ScheduleEvent(EVENT_SHOUT, 10s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 7s);
+ break;
+ case EVENT_KNOCK_AWAY:
+ DoCastVictim(SPELL_KNOCKAWAY);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 14s);
+ break;
}
- events.Update(diff);
-
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_BLAST_WAVE:
- DoCastVictim(SPELL_BLASTWAVE);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 20s);
- break;
- case EVENT_SHOUT:
- DoCastVictim(SPELL_SHOUT);
- events.ScheduleEvent(EVENT_SHOUT, 10s);
- break;
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 7s);
- break;
- case EVENT_KNOCK_AWAY:
- DoCastVictim(SPELL_KNOCKAWAY);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 14s);
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
- DoMeleeAttackIfReady();
}
- };
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_overlordwyrmthalak()
{
- new boss_overlord_wyrmthalak();
+ RegisterBlackrockSpireCreatureAI(boss_overlord_wyrmthalak);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
index 3e5b247bab0..13803fcfc0f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -71,220 +71,209 @@ enum Events
EVENT_ENTER_COMBAT = 9
};
-class boss_pyroguard_emberseer : public CreatureScript
+struct boss_pyroguard_emberseer : public BossAI
{
-public:
- boss_pyroguard_emberseer() : CreatureScript("boss_pyroguard_emberseer") { }
+ boss_pyroguard_emberseer(Creature* creature) : BossAI(creature, DATA_PYROGAURD_EMBERSEER) { }
- struct boss_pyroguard_emberseerAI : public BossAI
+ void Reset() override
{
- boss_pyroguard_emberseerAI(Creature* creature) : BossAI(creature, DATA_PYROGAURD_EMBERSEER) { }
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetImmuneToPC(true);
+ events.Reset();
+ // Apply auras on spawn and reset
+ // DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible
+ me->RemoveAura(SPELL_EMBERSEER_FULL_STRENGTH);
+ me->RemoveAura(SPELL_EMBERSEER_GROWING);
+ me->RemoveAura(SPELL_EMBERSEER_GROWING_TRIGGER);
+ events.ScheduleEvent(EVENT_RESPAWN, 5s);
+ // Hack for missing trigger spell
+ events.ScheduleEvent(EVENT_FIRE_SHIELD, 3s);
+ }
- void Reset() override
+ void SetData(uint32 /*type*/, uint32 data) override
+ {
+ switch (data)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetImmuneToPC(true);
- events.Reset();
- // Apply auras on spawn and reset
- // DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible
- me->RemoveAura(SPELL_EMBERSEER_FULL_STRENGTH);
- me->RemoveAura(SPELL_EMBERSEER_GROWING);
- me->RemoveAura(SPELL_EMBERSEER_GROWING_TRIGGER);
- events.ScheduleEvent(EVENT_RESPAWN, 5s);
- // Hack for missing trigger spell
- events.ScheduleEvent(EVENT_FIRE_SHIELD, 3s);
+ case 1:
+ events.ScheduleEvent(EVENT_PLAYER_CHECK, 5s);
+ break;
+ default:
+ break;
}
+ }
- void SetData(uint32 /*type*/, uint32 data) override
- {
- switch (data)
- {
- case 1:
- events.ScheduleEvent(EVENT_PLAYER_CHECK, 5s);
- break;
- default:
- break;
- }
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ // ### TODO Check combat timing ###
+ events.ScheduleEvent(EVENT_FIRENOVA, 6s);
+ events.ScheduleEvent(EVENT_FLAMEBUFFET, 3s);
+ events.ScheduleEvent(EVENT_PYROBLAST, 14s);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- // ### TODO Check combat timing ###
- events.ScheduleEvent(EVENT_FIRENOVA, 6s);
- events.ScheduleEvent(EVENT_FLAMEBUFFET, 3s);
- events.ScheduleEvent(EVENT_PYROBLAST, 14s);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ // Activate all the runes
+ UpdateRunes(GO_STATE_READY);
+ // Complete encounter
+ instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE);
+ }
- void JustDied(Unit* /*killer*/) override
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == SPELL_ENCAGE_EMBERSEER)
{
- // Activate all the runes
- UpdateRunes(GO_STATE_READY);
- // Complete encounter
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE);
+ if (!me->GetAuraCount(SPELL_ENCAGED_EMBERSEER))
+ {
+ me->CastSpell(me, SPELL_ENCAGED_EMBERSEER);
+ Reset();
+ }
}
- void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
+ if (spellInfo->Id == SPELL_EMBERSEER_GROWING_TRIGGER)
{
- if (spellInfo->Id == SPELL_ENCAGE_EMBERSEER)
- {
- if (!me->GetAuraCount(SPELL_ENCAGED_EMBERSEER))
- {
- me->CastSpell(me, SPELL_ENCAGED_EMBERSEER);
- Reset();
- }
- }
+ if (me->GetAuraCount(SPELL_EMBERSEER_GROWING_TRIGGER) == 10)
+ Talk(EMOTE_TEN_STACK);
- if (spellInfo->Id == SPELL_EMBERSEER_GROWING_TRIGGER)
+ if (me->GetAuraCount(SPELL_EMBERSEER_GROWING_TRIGGER) == 20)
{
- if (me->GetAuraCount(SPELL_EMBERSEER_GROWING_TRIGGER) == 10)
- Talk(EMOTE_TEN_STACK);
-
- if (me->GetAuraCount(SPELL_EMBERSEER_GROWING_TRIGGER) == 20)
- {
- me->RemoveAura(SPELL_FREEZE_ANIM);
- me->CastSpell(me, SPELL_EMBERSEER_FULL_STRENGTH);
- Talk(EMOTE_FREE_OF_BONDS);
- Talk(YELL_FREE_OF_BONDS);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetImmuneToPC(false);
- events.ScheduleEvent(EVENT_ENTER_COMBAT, 2s);
- }
+ me->RemoveAura(SPELL_FREEZE_ANIM);
+ me->CastSpell(me, SPELL_EMBERSEER_FULL_STRENGTH);
+ Talk(EMOTE_FREE_OF_BONDS);
+ Talk(YELL_FREE_OF_BONDS);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetImmuneToPC(false);
+ events.ScheduleEvent(EVENT_ENTER_COMBAT, 2s);
}
}
+ }
- void UpdateRunes(GOState state)
- {
- // update all runes
- if (GameObject* rune1 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_1)))
- rune1->SetGoState(state);
- if (GameObject* rune2 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_2)))
- rune2->SetGoState(state);
- if (GameObject* rune3 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_3)))
- rune3->SetGoState(state);
- if (GameObject* rune4 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_4)))
- rune4->SetGoState(state);
- if (GameObject* rune5 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_5)))
- rune5->SetGoState(state);
- if (GameObject* rune6 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_6)))
- rune6->SetGoState(state);
- if (GameObject* rune7 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_7)))
- rune7->SetGoState(state);
- }
+ void UpdateRunes(GOState state)
+ {
+ // update all runes
+ if (GameObject* rune1 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_1)))
+ rune1->SetGoState(state);
+ if (GameObject* rune2 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_2)))
+ rune2->SetGoState(state);
+ if (GameObject* rune3 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_3)))
+ rune3->SetGoState(state);
+ if (GameObject* rune4 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_4)))
+ rune4->SetGoState(state);
+ if (GameObject* rune5 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_5)))
+ rune5->SetGoState(state);
+ if (GameObject* rune6 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_6)))
+ rune6->SetGoState(state);
+ if (GameObject* rune7 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_EMBERSEER_RUNE_7)))
+ rune7->SetGoState(state);
+ }
- void UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
{
- if (!UpdateVictim())
- {
- events.Update(diff);
+ events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
+ case EVENT_RESPAWN:
{
- case EVENT_RESPAWN:
- {
- instance->SetData(DATA_BLACKHAND_INCARCERATOR, 1);
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED);
- break;
- }
- case EVENT_PRE_FIGHT_1:
- {
- // Set data on all Blackhand Incarcerators
- std::list<Creature*> creatureList;
- GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
- for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
- {
- if (Creature* creature = *itr)
- {
- creature->SetImmuneToAll(false);
- creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
- DoZoneInCombat(creature);
- }
- }
- me->RemoveAura(SPELL_ENCAGED_EMBERSEER);
- events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32s);
- break;
- }
- case EVENT_PRE_FIGHT_2:
- me->CastSpell(me, SPELL_FREEZE_ANIM);
- me->CastSpell(me, SPELL_EMBERSEER_GROWING);
- Talk(EMOTE_ONE_STACK);
- break;
- case EVENT_FIRE_SHIELD:
- // #### Spell isn't doing any damage ??? ####
- DoCast(me, SPELL_FIRE_SHIELD);
- events.ScheduleEvent(EVENT_FIRE_SHIELD, 3s);
- break;
- case EVENT_PLAYER_CHECK:
+ instance->SetData(DATA_BLACKHAND_INCARCERATOR, 1);
+ instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED);
+ break;
+ }
+ case EVENT_PRE_FIGHT_1:
+ {
+ // Set data on all Blackhand Incarcerators
+ std::list<Creature*> creatureList;
+ GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f);
+ for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
- // As of Patch 3.0.8 only one person needs to channel the altar
- bool _hasAura = false;
- Map::PlayerList const& players = me->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- if (Player* player = itr->GetSource()->ToPlayer())
- if (player->HasAura(SPELL_EMBERSEER_OBJECT_VISUAL))
- {
- _hasAura = true;
- break;
- }
-
- if (_hasAura)
+ if (Creature* creature = *itr)
{
- events.ScheduleEvent(EVENT_PRE_FIGHT_1, 1s);
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER, IN_PROGRESS);
+ creature->SetImmuneToAll(false);
+ creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
+ DoZoneInCombat(creature);
}
- break;
}
- case EVENT_ENTER_COMBAT:
- AttackStart(me->SelectNearestPlayer(30.0f));
- break;
- default:
- break;
+ me->RemoveAura(SPELL_ENCAGED_EMBERSEER);
+ events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32s);
+ break;
}
- }
- return;
- }
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
+ case EVENT_PRE_FIGHT_2:
+ me->CastSpell(me, SPELL_FREEZE_ANIM);
+ me->CastSpell(me, SPELL_EMBERSEER_GROWING);
+ Talk(EMOTE_ONE_STACK);
+ break;
case EVENT_FIRE_SHIELD:
+ // #### Spell isn't doing any damage ??? ####
DoCast(me, SPELL_FIRE_SHIELD);
- events.Repeat(Seconds(3));
- break;
- case EVENT_FIRENOVA:
- DoCast(me, SPELL_FIRENOVA);
- events.Repeat(Seconds(6));
+ events.ScheduleEvent(EVENT_FIRE_SHIELD, 3s);
break;
- case EVENT_FLAMEBUFFET:
- DoCast(me, SPELL_FLAMEBUFFET);
- events.Repeat(Seconds(14));
+ case EVENT_PLAYER_CHECK:
+ {
+ // As of Patch 3.0.8 only one person needs to channel the altar
+ bool _hasAura = false;
+ Map::PlayerList const& players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (Player* player = itr->GetSource()->ToPlayer())
+ if (player->HasAura(SPELL_EMBERSEER_OBJECT_VISUAL))
+ {
+ _hasAura = true;
+ break;
+ }
+
+ if (_hasAura)
+ {
+ events.ScheduleEvent(EVENT_PRE_FIGHT_1, 1s);
+ instance->SetBossState(DATA_PYROGAURD_EMBERSEER, IN_PROGRESS);
+ }
break;
- case EVENT_PYROBLAST:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
- DoCast(target, SPELL_PYROBLAST);
- events.Repeat(Seconds(15));
+ }
+ case EVENT_ENTER_COMBAT:
+ AttackStart(me->SelectNearestPlayer(30.0f));
break;
default:
break;
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
}
- DoMeleeAttackIfReady();
+ return;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<boss_pyroguard_emberseerAI>(creature);
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_FIRE_SHIELD:
+ DoCast(me, SPELL_FIRE_SHIELD);
+ events.Repeat(Seconds(3));
+ break;
+ case EVENT_FIRENOVA:
+ DoCast(me, SPELL_FIRENOVA);
+ events.Repeat(Seconds(6));
+ break;
+ case EVENT_FLAMEBUFFET:
+ DoCast(me, SPELL_FLAMEBUFFET);
+ events.Repeat(Seconds(14));
+ break;
+ case EVENT_PYROBLAST:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
+ DoCast(target, SPELL_PYROBLAST);
+ events.Repeat(Seconds(15));
+ break;
+ default:
+ break;
+ }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+ DoMeleeAttackIfReady();
}
};
@@ -301,81 +290,70 @@ enum IncarceratorEvents
EVENT_ENCAGE = 3
};
-class npc_blackhand_incarcerator : public CreatureScript
+struct npc_blackhand_incarcerator : public ScriptedAI
{
-public:
- npc_blackhand_incarcerator() : CreatureScript("npc_blackhand_incarcerator") { }
+ npc_blackhand_incarcerator(Creature* creature) : ScriptedAI(creature) { }
- struct npc_blackhand_incarceratorAI : public ScriptedAI
+ void JustAppeared() override
{
- npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) { }
+ DoCast(SPELL_ENCAGE_EMBERSEER);
+ }
- void JustAppeared() override
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ // Had to do this because CallForHelp will ignore any npcs without LOS
+ std::list<Creature*> creatureList;
+ GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 60.0f);
+ for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
- DoCast(SPELL_ENCAGE_EMBERSEER);
+ if (Creature* creature = *itr)
+ DoZoneInCombat(creature); // AI()->AttackStart(me->GetVictim());
}
- void JustEngagedWith(Unit* /*who*/) override
- {
- // Had to do this because CallForHelp will ignore any npcs without LOS
- std::list<Creature*> creatureList;
- GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 60.0f);
- for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
- {
- if (Creature* creature = *itr)
- DoZoneInCombat(creature); // AI()->AttackStart(me->GetVictim());
- }
-
- _events.ScheduleEvent(EVENT_STRIKE, 8s, 16s);
- _events.ScheduleEvent(EVENT_ENCAGE, 10s, 20s);
- }
+ _events.ScheduleEvent(EVENT_STRIKE, 8s, 16s);
+ _events.ScheduleEvent(EVENT_ENCAGE, 10s, 20s);
+ }
- void JustReachedHome() override
- {
- DoCast(SPELL_ENCAGE_EMBERSEER);
+ void JustReachedHome() override
+ {
+ DoCast(SPELL_ENCAGE_EMBERSEER);
- me->SetImmuneToAll(true);
- }
+ me->SetImmuneToAll(true);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- _events.Update(diff);
+ _events.Update(diff);
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_STRIKE:
- DoCastVictim(SPELL_STRIKE, true);
- _events.Repeat(Seconds(14), Seconds(23));
- break;
- case EVENT_ENCAGE:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_ENCAGE, true);
- _events.Repeat(Seconds(6), Seconds(12));
- break;
- default:
- break;
- }
+ case EVENT_STRIKE:
+ DoCastVictim(SPELL_STRIKE, true);
+ _events.Repeat(Seconds(14), Seconds(23));
+ break;
+ case EVENT_ENCAGE:
+ DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_ENCAGE, true);
+ _events.Repeat(Seconds(6), Seconds(12));
+ break;
+ default:
+ break;
}
-
- DoMeleeAttackIfReady();
}
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<npc_blackhand_incarceratorAI>(creature);
+ DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap _events;
};
void AddSC_boss_pyroguard_emberseer()
{
- new boss_pyroguard_emberseer();
- new npc_blackhand_incarcerator();
+ RegisterBlackrockSpireCreatureAI(boss_pyroguard_emberseer);
+ RegisterBlackrockSpireCreatureAI(npc_blackhand_incarcerator);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
index dd2640c0ed1..2a9e6109781 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp
@@ -33,70 +33,59 @@ enum Events
EVENT_STUN_BOMB = 2
};
-class quartermaster_zigris : public CreatureScript
+struct quartermaster_zigris : public BossAI
{
-public:
- quartermaster_zigris() : CreatureScript("quartermaster_zigris") { }
+ quartermaster_zigris(Creature* creature) : BossAI(creature, DATA_QUARTERMASTER_ZIGRIS) { }
- struct boss_quatermasterzigrisAI : public BossAI
+ void Reset() override
{
- boss_quatermasterzigrisAI(Creature* creature) : BossAI(creature, DATA_QUARTERMASTER_ZIGRIS) { }
-
- void Reset() override
- {
- _Reset();
- }
+ _Reset();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_SHOOT, 1s);
- events.ScheduleEvent(EVENT_STUN_BOMB, 16s);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_SHOOT, 1s);
+ events.ScheduleEvent(EVENT_STUN_BOMB, 16s);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- 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_SHOOT:
- DoCastVictim(SPELL_SHOOT);
- events.ScheduleEvent(EVENT_SHOOT, 500ms);
- break;
- case EVENT_STUN_BOMB:
- DoCastVictim(SPELL_STUNBOMB);
- events.ScheduleEvent(EVENT_STUN_BOMB, 14s);
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_SHOOT:
+ DoCastVictim(SPELL_SHOOT);
+ events.ScheduleEvent(EVENT_SHOOT, 500ms);
+ break;
+ case EVENT_STUN_BOMB:
+ DoCastVictim(SPELL_STUNBOMB);
+ events.ScheduleEvent(EVENT_STUN_BOMB, 14s);
+ break;
}
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<boss_quatermasterzigrisAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+ DoMeleeAttackIfReady();
}
};
void AddSC_boss_quatermasterzigris()
{
- new quartermaster_zigris();
+ RegisterBlackrockSpireCreatureAI(quartermaster_zigris);
}