diff options
Diffstat (limited to 'src')
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 c73a7621e5e..da3ce3a033e 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_ | 
