aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp185
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp219
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp242
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h2
4 files changed, 303 insertions, 345 deletions
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
index 7e4d017365d..a33153c43a7 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp
@@ -60,118 +60,107 @@ Position const PosSummonBrood[7] =
{ -81.70527f, 280.8776f, 44.58830f, 0.526849f }
};
-class boss_anzu : public CreatureScript
+struct boss_anzu : public BossAI
{
- public:
- boss_anzu() : CreatureScript("boss_anzu") { }
-
- struct boss_anzuAI : public BossAI
+ boss_anzu(Creature* creature) : BossAI(creature, DATA_ANZU)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _under33Percent = false;
+ _under66Percent = false;
+ }
+
+ void Reset() override
+ {
+ //_Reset();
+ events.Reset();
+ Initialize();
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14s);
+ events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5s);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
+
+ void DamageTaken(Unit* /*killer*/, uint32 &damage) override
+ {
+ if (me->HealthBelowPctDamaged(33, damage) && !_under33Percent)
{
- boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU)
- {
- Initialize();
- }
-
- void Initialize()
- {
- _under33Percent = false;
- _under66Percent = false;
- }
-
- void Reset() override
- {
- //_Reset();
- events.Reset();
- Initialize();
- }
+ _under33Percent = true;
+ Talk(SAY_SUMMON_BROOD);
+ events.ScheduleEvent(EVENT_SUMMON, 3s);
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14s);
- events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5s);
- }
+ if (me->HealthBelowPctDamaged(66, damage) && !_under66Percent)
+ {
+ _under66Percent = true;
+ Talk(SAY_SUMMON_BROOD);
+ events.ScheduleEvent(EVENT_SUMMON, 3s);
+ }
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void DamageTaken(Unit* /*killer*/, uint32 &damage) override
- {
- if (me->HealthBelowPctDamaged(33, damage) && !_under33Percent)
- {
- _under33Percent = true;
- Talk(SAY_SUMMON_BROOD);
- events.ScheduleEvent(EVENT_SUMMON, 3s);
- }
-
- if (me->HealthBelowPctDamaged(66, damage) && !_under66Percent)
- {
- _under66Percent = true;
- Talk(SAY_SUMMON_BROOD);
- events.ScheduleEvent(EVENT_SUMMON, 3s);
- }
- }
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ case EVENT_PARALYZING_SCREECH:
+ DoCastVictim(SPELL_PARALYZING_SCREECH);
+ events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 25s);
+ break;
+ case EVENT_CYCLONE_OF_FEATHERS:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_CYCLONE_OF_FEATHERS);
+ events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 21s);
+ break;
+ case EVENT_SUMMON:
+ // TODO: Add pathing for Brood of Anzu
+ for (uint8 i = 0; i < 7; i++)
+ me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46s);
+
+ DoCast(me, SPELL_BANISH_SELF);
+ events.ScheduleEvent(EVENT_SPELL_BOMB, 12s);
+ break;
+ case EVENT_SPELL_BOMB:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
- case EVENT_PARALYZING_SCREECH:
- DoCastVictim(SPELL_PARALYZING_SCREECH);
- events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 25s);
- break;
- case EVENT_CYCLONE_OF_FEATHERS:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_CYCLONE_OF_FEATHERS);
- events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 21s);
- break;
- case EVENT_SUMMON:
- // TODO: Add pathing for Brood of Anzu
- for (uint8 i = 0; i < 7; i++)
- me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46s);
-
- DoCast(me, SPELL_BANISH_SELF);
- events.ScheduleEvent(EVENT_SPELL_BOMB, 12s);
- break;
- case EVENT_SPELL_BOMB:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- {
- if (target->GetPowerType() == POWER_MANA)
- {
- DoCast(target, SPELL_SPELL_BOMB);
- Talk(SAY_SPELL_BOMB, target);
- }
- }
- break;
- default:
- break;
+ if (target->GetPowerType() == POWER_MANA)
+ {
+ DoCast(target, SPELL_SPELL_BOMB);
+ Talk(SAY_SPELL_BOMB, target);
+ }
}
- }
-
- DoMeleeAttackIfReady();
+ break;
+ default:
+ break;
}
+ }
- private:
- bool _under33Percent;
- bool _under66Percent;
- };
+ DoMeleeAttackIfReady();
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetSethekkHallsAI<boss_anzuAI>(creature);
- }
+ private:
+ bool _under33Percent;
+ bool _under66Percent;
};
void AddSC_boss_anzu()
{
- new boss_anzu();
+ RegisterSethekkHallsCreatureAI(boss_anzu);
}
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
index 178d3830f4a..77eed42e9fe 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
@@ -69,147 +69,136 @@ enum Lakka
SAY_LAKKA_FREE = 1
};
-class boss_darkweaver_syth : public CreatureScript
+struct boss_darkweaver_syth : public BossAI
{
-public:
- boss_darkweaver_syth() : CreatureScript("boss_darkweaver_syth") { }
+ boss_darkweaver_syth(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH)
+ {
+ Initialize();
+ }
- struct boss_darkweaver_sythAI : public BossAI
+ void Initialize()
{
- boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH)
- {
- Initialize();
- }
+ _summon90 = false;
+ _summon50 = false;
+ _summon10 = false;
+ }
- void Initialize()
- {
- _summon90 = false;
- _summon50 = false;
- _summon10 = false;
- }
+ void Reset() override
+ {
+ Initialize();
+ _Reset();
+ }
- void Reset() override
- {
- Initialize();
- _Reset();
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_FLAME_SHOCK, 2s);
+ events.ScheduleEvent(EVENT_ARCANE_SHOCK, 4s);
+ events.ScheduleEvent(EVENT_FROST_SHOCK, 6s);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 8s);
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 15s);
+
+ Talk(SAY_AGGRO);
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_FLAME_SHOCK, 2s);
- events.ScheduleEvent(EVENT_ARCANE_SHOCK, 4s);
- events.ScheduleEvent(EVENT_FROST_SHOCK, 6s);
- events.ScheduleEvent(EVENT_SHADOW_SHOCK, 8s);
- events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 15s);
-
- Talk(SAY_AGGRO);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- Talk(SAY_DEATH);
+ if (Creature* lakka = me->FindNearestCreature(NPC_LAKKA, 500.0f, true))
+ lakka->AI()->Talk(SAY_LAKKA_FREE);
+ }
- if (Creature* lakka = me->FindNearestCreature(NPC_LAKKA, 500.0f, true))
- lakka->AI()->Talk(SAY_LAKKA_FREE);
- }
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
+ }
- void KilledUnit(Unit* who) override
+ void JustSummoned(Creature* summoned) override
+ {
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ summoned->AI()->AttackStart(target);
+
+ summons.Summon(summoned);
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (me->HealthBelowPctDamaged(90, damage) && !_summon90)
{
- if (who->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_SLAY);
+ SythSummoning();
+ _summon90 = true;
}
- void JustSummoned(Creature* summoned) override
+ if (me->HealthBelowPctDamaged(50, damage) && !_summon50)
{
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- summoned->AI()->AttackStart(target);
-
- summons.Summon(summoned);
+ SythSummoning();
+ _summon50 = true;
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ if (me->HealthBelowPctDamaged(10, damage) && !_summon10)
{
- if (me->HealthBelowPctDamaged(90, damage) && !_summon90)
- {
- SythSummoning();
- _summon90 = true;
- }
-
- if (me->HealthBelowPctDamaged(50, damage) && !_summon50)
- {
- SythSummoning();
- _summon50 = true;
- }
-
- if (me->HealthBelowPctDamaged(10, damage) && !_summon10)
- {
- SythSummoning();
- _summon10 = true;
- }
+ SythSummoning();
+ _summon10 = true;
}
+ }
- void SythSummoning()
- {
- Talk(SAY_SUMMON);
+ void SythSummoning()
+ {
+ Talk(SAY_SUMMON);
- if (me->IsNonMeleeSpellCast(false))
- me->InterruptNonMeleeSpells(false);
+ if (me->IsNonMeleeSpellCast(false))
+ me->InterruptNonMeleeSpells(false);
- DoCast(me, SPELL_SUMMON_SYTH_ARCANE, true); //front
- DoCast(me, SPELL_SUMMON_SYTH_FIRE, true); //back
- DoCast(me, SPELL_SUMMON_SYTH_FROST, true); //left
- DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right
- }
+ DoCast(me, SPELL_SUMMON_SYTH_ARCANE, true); //front
+ DoCast(me, SPELL_SUMMON_SYTH_FIRE, true); //back
+ DoCast(me, SPELL_SUMMON_SYTH_FROST, true); //left
+ DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right
+ }
- void ExecuteEvent(uint32 eventId) override
+ void ExecuteEvent(uint32 eventId) override
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_FLAME_SHOCK:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_FLAME_SHOCK);
- events.ScheduleEvent(EVENT_FLAME_SHOCK, 10s, 15s);
- break;
- case EVENT_ARCANE_SHOCK:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_ARCANE_SHOCK);
- events.ScheduleEvent(EVENT_ARCANE_SHOCK, 10s, 15s);
- break;
- case EVENT_FROST_SHOCK:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_FROST_SHOCK);
- events.ScheduleEvent(EVENT_FROST_SHOCK, 10s, 15s);
- break;
- case EVENT_SHADOW_SHOCK:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_SHADOW_SHOCK);
- events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
- break;
- case EVENT_CHAIN_LIGHTNING:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_CHAIN_LIGHTNING);
- events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25s);
- break;
- default:
- break;
- }
+ case EVENT_FLAME_SHOCK:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_FLAME_SHOCK);
+ events.ScheduleEvent(EVENT_FLAME_SHOCK, 10s, 15s);
+ break;
+ case EVENT_ARCANE_SHOCK:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_ARCANE_SHOCK);
+ events.ScheduleEvent(EVENT_ARCANE_SHOCK, 10s, 15s);
+ break;
+ case EVENT_FROST_SHOCK:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_FROST_SHOCK);
+ events.ScheduleEvent(EVENT_FROST_SHOCK, 10s, 15s);
+ break;
+ case EVENT_SHADOW_SHOCK:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_SHADOW_SHOCK);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
+ break;
+ case EVENT_CHAIN_LIGHTNING:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_CHAIN_LIGHTNING);
+ events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25s);
+ break;
+ default:
+ break;
}
-
- private:
- bool _summon90;
- bool _summon50;
- bool _summon10;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetSethekkHallsAI<boss_darkweaver_sythAI>(creature);
}
+
+ private:
+ bool _summon90;
+ bool _summon50;
+ bool _summon10;
};
void AddSC_boss_darkweaver_syth()
{
- new boss_darkweaver_syth();
+ RegisterSethekkHallsCreatureAI(boss_darkweaver_syth);
}
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp
index 35671bea890..db3043810ce 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp
@@ -50,163 +50,141 @@ enum Events
EVENT_ARCANE_EXPLOSION
};
-class boss_talon_king_ikiss : public CreatureScript
+struct boss_talon_king_ikiss : public BossAI
{
-public:
- boss_talon_king_ikiss() : CreatureScript("boss_talon_king_ikiss") { }
-
- struct boss_talon_king_ikissAI : public BossAI
+ boss_talon_king_ikiss(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS)
{
- boss_talon_king_ikissAI(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS)
- {
- Intro = false;
- ManaShield = false;
- }
-
- void Reset() override
- {
- _Reset();
- Intro = false;
- ManaShield = false;
- }
-
- void MoveInLineOfSight(Unit* who) override
- {
- if (!Intro && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f))
- {
- Intro = true;
- Talk(SAY_INTRO);
- }
+ Intro = false;
+ ManaShield = false;
+ }
- BossAI::MoveInLineOfSight(who);
- }
+ void Reset() override
+ {
+ _Reset();
+ Intro = false;
+ ManaShield = false;
+ }
- void JustEngagedWith(Unit* who) override
+ void MoveInLineOfSight(Unit* who) override
+ {
+ if (!Intro && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f))
{
- BossAI::JustEngagedWith(who);
- Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_ARCANE_VOLLEY, 5s);
- events.ScheduleEvent(EVENT_POLYMORPH, 8s);
- events.ScheduleEvent(EVENT_BLINK, 35s);
- if (IsHeroic())
- events.ScheduleEvent(EVENT_SLOW, 15s, 30s);
+ Intro = true;
+ Talk(SAY_INTRO);
}
- void ExecuteEvent(uint32 eventId) override
- {
- switch (eventId)
- {
- case EVENT_POLYMORPH:
- // Second top aggro in normal, random target in heroic.
- if (IsHeroic())
- DoCast(SelectTarget(SelectTargetMethod::Random, 0), SPELL_POLYMORPH);
- else
- DoCast(SelectTarget(SelectTargetMethod::MaxThreat, 1), SPELL_POLYMORPH);
- events.ScheduleEvent(EVENT_POLYMORPH, 15s, 17500ms);
- break;
- case EVENT_ARCANE_VOLLEY:
- DoCast(me, SPELL_ARCANE_VOLLEY);
- events.ScheduleEvent(EVENT_ARCANE_VOLLEY, 7s, 12s);
- break;
- case EVENT_SLOW:
- DoCast(me, SPELL_SLOW);
- events.ScheduleEvent(EVENT_SLOW, 15s, 40s);
- break;
- case EVENT_BLINK:
- if (me->IsNonMeleeSpellCast(false))
- me->InterruptNonMeleeSpells(false);
- Talk(EMOTE_ARCANE_EXPLOSION);
- DoCastAOE(SPELL_BLINK);
- events.ScheduleEvent(EVENT_BLINK, 35s, 40s);
- events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 1s);
- break;
- case EVENT_ARCANE_EXPLOSION:
- DoCast(me, SPELL_ARCANE_EXPLOSION);
- DoCast(me, SPELL_ARCANE_BUBBLE, true);
- break;
- default:
- break;
- }
- }
+ BossAI::MoveInLineOfSight(who);
+ }
- void DamageTaken(Unit* /*who*/, uint32& damage) override
- {
- if (!ManaShield && me->HealthBelowPctDamaged(20, damage))
- {
- DoCast(me, SPELL_MANA_SHIELD);
- ManaShield = true;
- }
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_ARCANE_VOLLEY, 5s);
+ events.ScheduleEvent(EVENT_POLYMORPH, 8s);
+ events.ScheduleEvent(EVENT_BLINK, 35s);
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_SLOW, 15s, 30s);
+ }
- void JustDied(Unit* /*killer*/) override
+ void ExecuteEvent(uint32 eventId) override
+ {
+ switch (eventId)
{
- _JustDied();
- Talk(SAY_DEATH);
+ case EVENT_POLYMORPH:
+ // Second top aggro in normal, random target in heroic.
+ if (IsHeroic())
+ DoCast(SelectTarget(SelectTargetMethod::Random, 0), SPELL_POLYMORPH);
+ else
+ DoCast(SelectTarget(SelectTargetMethod::MaxThreat, 1), SPELL_POLYMORPH);
+ events.ScheduleEvent(EVENT_POLYMORPH, 15s, 17500ms);
+ break;
+ case EVENT_ARCANE_VOLLEY:
+ DoCast(me, SPELL_ARCANE_VOLLEY);
+ events.ScheduleEvent(EVENT_ARCANE_VOLLEY, 7s, 12s);
+ break;
+ case EVENT_SLOW:
+ DoCast(me, SPELL_SLOW);
+ events.ScheduleEvent(EVENT_SLOW, 15s, 40s);
+ break;
+ case EVENT_BLINK:
+ if (me->IsNonMeleeSpellCast(false))
+ me->InterruptNonMeleeSpells(false);
+ Talk(EMOTE_ARCANE_EXPLOSION);
+ DoCastAOE(SPELL_BLINK);
+ events.ScheduleEvent(EVENT_BLINK, 35s, 40s);
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 1s);
+ break;
+ case EVENT_ARCANE_EXPLOSION:
+ DoCast(me, SPELL_ARCANE_EXPLOSION);
+ DoCast(me, SPELL_ARCANE_BUBBLE, true);
+ break;
+ default:
+ break;
}
+ }
- void KilledUnit(Unit* who) override
+ void DamageTaken(Unit* /*who*/, uint32& damage) override
+ {
+ if (!ManaShield && me->HealthBelowPctDamaged(20, damage))
{
- if (who->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_SLAY);
+ DoCast(me, SPELL_MANA_SHIELD);
+ ManaShield = true;
}
+ }
- private:
- bool ManaShield;
- bool Intro;
- };
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void KilledUnit(Unit* who) override
{
- return GetSethekkHallsAI<boss_talon_king_ikissAI>(creature);
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
+
+ private:
+ bool ManaShield;
+ bool Intro;
};
// 38194 - Blink
-class spell_talon_king_ikiss_blink : public SpellScriptLoader
+class spell_talon_king_ikiss_blink : public SpellScript
{
- public:
- spell_talon_king_ikiss_blink() : SpellScriptLoader("spell_talon_king_ikiss_blink") { }
+ PrepareSpellScript(spell_talon_king_ikiss_blink);
- class spell_talon_king_ikiss_blink_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_talon_king_ikiss_blink_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_BLINK_TELEPORT });
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleDummyHitTarget(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
- GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_talon_king_ikiss_blink_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink_SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_talon_king_ikiss_blink_SpellScript();
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BLINK_TELEPORT });
+ }
+
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ if (targets.empty())
+ return;
+
+ WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
+ targets.clear();
+ targets.push_back(target);
+ }
+
+ void HandleDummyHitTarget(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true);
+ }
+
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_talon_king_ikiss_blink::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
};
void AddSC_boss_talon_king_ikiss()
{
- new boss_talon_king_ikiss();
- new spell_talon_king_ikiss_blink();
+ RegisterSethekkHallsCreatureAI(boss_talon_king_ikiss);
+ RegisterSpellScript(spell_talon_king_ikiss_blink);
}
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h
index 76dc498fd56..3e1f6ad611f 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h
@@ -54,4 +54,6 @@ inline AI* GetSethekkHallsAI(T* obj)
return GetInstanceAI<AI>(obj, SHScriptName);
}
+#define RegisterSethekkHallsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetSethekkHallsAI)
+
#endif // SETHEKK_HALLS_H_