diff options
Diffstat (limited to 'src')
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); } |