diff options
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_ |