diff options
Diffstat (limited to 'src')
5 files changed, 322 insertions, 292 deletions
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp index 0de301752bd..0cd9910122f 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp @@ -15,147 +15,171 @@   * with this program. If not, see <http://www.gnu.org/licenses/>.   */ +/* + * Timers requires update + * Guardians are despawned in core, that should not happen here + */ +  #include "ScriptMgr.h"  #include "ScriptedCreature.h"  #include "razorfen_downs.h" -enum Say +enum AmnennarTexts  { -    SAY_AGGRO               = 0, -    SAY_SUMMON60            = 1, -    SAY_SUMMON30            = 2, -    SAY_HP                  = 3, -    SAY_KILL                = 4 +    SAY_AGGRO                      = 0, +    SAY_SLAY                       = 1, +    SAY_HEALTH_75                  = 2, +    SAY_SUMMON_60                  = 3, +    SAY_SUMMON_30                  = 4, +    EMOTE_SUMMON                   = 5  }; -enum Spells +enum AmnennarSpells  { -    SPELL_AMNENNARSWRATH    = 13009, -    SPELL_FROSTBOLT         = 15530, -    SPELL_FROST_NOVA        = 15531, -    SPELL_FROST_SPECTRES    = 12642 +    SPELL_AMNENNARS_WRATH          = 13009, +    SPELL_FROSTBOLT                = 15530, +    SPELL_FROST_NOVA               = 15531, +    SPELL_SUMMON_FROST_SPECTRES    = 12642, +    SPELL_BANISH_FROST_SPECTRES    = 12660  }; -enum Events +enum AmnennarEvents  { -    EVENT_AMNENNARSWRATH    = 1, -    EVENT_FROSTBOLT         = 2, -    EVENT_FROST_NOVA        = 3 +    EVENT_AMNENNARS_WRATH          = 1, +    EVENT_FROSTBOLT, +    EVENT_FROST_NOVA, + +    EVENT_HEALTH_75, +    EVENT_HEALTH_60, +    EVENT_HEALTH_30  }; -class boss_amnennar_the_coldbringer : public CreatureScript +enum AmnennarPhases : uint8  { -public: -    boss_amnennar_the_coldbringer() : CreatureScript("boss_amnennar_the_coldbringer") { } +    PHASE_NONE                     = 0, +    PHASE_HEALTH_75, +    PHASE_HEALTH_60, +    PHASE_HEALTH_30 +}; -    struct boss_amnennar_the_coldbringerAI : public BossAI +// 7358 - Amnennar the Coldbringer +struct boss_amnennar_the_coldbringer : public BossAI +{ +    boss_amnennar_the_coldbringer(Creature* creature) : BossAI(creature, DATA_AMNENNAR_THE_COLD_BRINGER), _phase(PHASE_NONE) { } + +    void Reset() override      { -        boss_amnennar_the_coldbringerAI(Creature* creature) : BossAI(creature, DATA_AMNENNAR_THE_COLD_BRINGER) -        { -            Initialize(); -        } +        _Reset(); +        _phase = PHASE_NONE; +    } -        void Initialize() -        { -            hp60Spectrals = false; -            hp30Spectrals = false; -            hp50 = false; -        } +    void JustEngagedWith(Unit* who) override +    { +        BossAI::JustEngagedWith(who); +        events.ScheduleEvent(EVENT_AMNENNARS_WRATH, 8s); +        events.ScheduleEvent(EVENT_FROSTBOLT, 0s); +        events.ScheduleEvent(EVENT_FROST_NOVA, 10s, 15s); +        Talk(SAY_AGGRO); +    } -        void Reset() override +    void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override +    { +        if (_phase < PHASE_HEALTH_75 && me->HealthBelowPctDamaged(75, damage))          { -            _Reset(); -            Initialize(); +            _phase++; +            events.ScheduleEvent(EVENT_HEALTH_75, 0s);          } -        void JustEngagedWith(Unit* who) override +        if (_phase < PHASE_HEALTH_60 && me->HealthBelowPctDamaged(60, damage))          { -            BossAI::JustEngagedWith(who); -            events.ScheduleEvent(EVENT_AMNENNARSWRATH, 8s); -            events.ScheduleEvent(EVENT_FROSTBOLT, 1s); -            events.ScheduleEvent(EVENT_FROST_NOVA, 10s, 15s); -            Talk(SAY_AGGRO); +            _phase++; +            events.ScheduleEvent(EVENT_HEALTH_60, 0s);          } -        void KilledUnit(Unit* who) override +        if (_phase < PHASE_HEALTH_30 && me->HealthBelowPctDamaged(30, damage))          { -            if (who->GetTypeId() == TYPEID_PLAYER) -                Talk(SAY_KILL); +            _phase++; +            events.ScheduleEvent(EVENT_HEALTH_30, 0s);          } +    } -        void JustDied(Unit* /*killer*/) override -        { -            _JustDied(); -        } +    void KilledUnit(Unit* who) override +    { +        if (who->GetTypeId() == TYPEID_PLAYER) +            Talk(SAY_SLAY); +    } -        void UpdateAI(uint32 diff) override -        { -            if (!UpdateVictim()) -                return; +    // Despawn is handled by spell, don't store anything +    void JustSummoned(Creature* /*summon*/) override { } -            events.Update(diff); +    void EnterEvadeMode(EvadeReason why) override +    { +        DoCastSelf(SPELL_BANISH_FROST_SPECTRES, true); +        BossAI::EnterEvadeMode(why); +    } -            if (me->HasUnitState(UNIT_STATE_CASTING)) -                return; +    void JustDied(Unit* /*killer*/) override +    { +        _JustDied(); +        DoCastSelf(SPELL_BANISH_FROST_SPECTRES, true); +    } -            while (uint32 eventId = events.ExecuteEvent()) -            { -                switch (eventId) -                { -                    case EVENT_AMNENNARSWRATH: -                        DoCastVictim(SPELL_AMNENNARSWRATH); -                        events.ScheduleEvent(EVENT_AMNENNARSWRATH, 12s); -                        break; -                    case EVENT_FROSTBOLT: -                        DoCastVictim(SPELL_FROSTBOLT); -                        events.ScheduleEvent(EVENT_FROSTBOLT, 8s); -                        break; -                    case EVENT_FROST_NOVA: -                        DoCast(me, SPELL_FROST_NOVA); -                        events.ScheduleEvent(EVENT_FROST_NOVA, 15s); -                        break; -                } - -                if (me->HasUnitState(UNIT_STATE_CASTING)) -                    return; -            } +    void UpdateAI(uint32 diff) override +    { +        if (!UpdateVictim()) +            return; -            if (!hp60Spectrals && HealthBelowPct(60)) -            { -                Talk(SAY_SUMMON60); -                DoCastVictim(SPELL_FROST_SPECTRES); -                hp60Spectrals = true; -            } +        events.Update(diff); -            if (!hp50 && HealthBelowPct(50)) -            { -                Talk(SAY_HP); -                hp50 = true; -            } +        if (me->HasUnitState(UNIT_STATE_CASTING)) +            return; -            if (!hp30Spectrals && HealthBelowPct(30)) +        while (uint32 eventId = events.ExecuteEvent()) +        { +            switch (eventId)              { -                Talk(SAY_SUMMON30); -                DoCastVictim(SPELL_FROST_SPECTRES); -                hp30Spectrals = true; +                case EVENT_AMNENNARS_WRATH: +                    DoCastVictim(SPELL_AMNENNARS_WRATH); +                    events.Repeat(12s); +                    break; +                case EVENT_FROSTBOLT: +                    DoCastVictim(SPELL_FROSTBOLT); +                    events.Repeat(8s); +                    break; +                case EVENT_FROST_NOVA: +                    DoCastSelf(SPELL_FROST_NOVA); +                    events.Repeat(15s); +                    break; + +                case EVENT_HEALTH_75: +                    Talk(SAY_HEALTH_75); +                    break; +                case EVENT_HEALTH_60: +                    Talk(EMOTE_SUMMON); +                    Talk(SAY_SUMMON_60); +                    DoCastSelf(SPELL_SUMMON_FROST_SPECTRES); +                    break; +                case EVENT_HEALTH_30: +                    Talk(EMOTE_SUMMON); +                    Talk(SAY_SUMMON_30); +                    DoCastSelf(SPELL_SUMMON_FROST_SPECTRES); +                    break; +                default: +                    break;              } -            DoMeleeAttackIfReady(); +            if (me->HasUnitState(UNIT_STATE_CASTING)) +                return;          } -    private: -        bool hp60Spectrals; -        bool hp30Spectrals; -        bool hp50; -    }; - -    CreatureAI* GetAI(Creature* creature) const override -    { -        return GetRazorfenDownsAI<boss_amnennar_the_coldbringerAI>(creature); +        DoMeleeAttackIfReady();      } + +private: +    uint8 _phase;  };  void AddSC_boss_amnennar_the_coldbringer()  { -    new boss_amnennar_the_coldbringer(); +    RegisterRazorfenDownsCreatureAI(boss_amnennar_the_coldbringer);  } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp index fa29f1984db..beddbdc8a49 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp @@ -19,89 +19,113 @@  #include "ScriptedCreature.h"  #include "razorfen_downs.h" -enum Say +enum GluttonTexts  {      SAY_AGGRO               = 0,      SAY_SLAY                = 1, -    SAY_HP50                = 2, -    SAY_HP15                = 3 +    SAY_HEALTH_50           = 2, +    SAY_HEALTH_15           = 3  }; -enum Spells +enum GluttonSpells  { +    SPELL_THRASH_15         = 8876,      SPELL_DISEASE_CLOUD     = 12627, +    SPELL_THRASH_35         = 12787,      SPELL_FRENZY            = 12795  }; -class boss_glutton : public CreatureScript +enum GluttonEvents  { -public: -    boss_glutton() : CreatureScript("boss_glutton") { } +    EVENT_HEALTH_50         = 1, +    EVENT_HEALTH_15 +}; + +enum GluttonPhases : uint8 +{ +    PHASE_NONE              = 0, +    PHASE_HEALTH_50, +    PHASE_HEALTH_15 +}; -    struct boss_gluttonAI : public BossAI +// 8567 - Glutton +struct boss_glutton : public BossAI +{ +    boss_glutton(Creature* creature) : BossAI(creature, DATA_GLUTTON), _phase(PHASE_NONE) { } + +    void Reset() override      { -        boss_gluttonAI(Creature* creature) : BossAI(creature, DATA_GLUTTON) -        { -            hp50 = false; -            hp15 = false; -        } +        _Reset(); +        _phase = PHASE_NONE; +        DoCastSelf(SPELL_THRASH_15); +        DoCastSelf(SPELL_DISEASE_CLOUD); +    } -        void Reset() override -        { -            _Reset(); -            hp50 = false; -            hp15 = false; -        } +    void JustEngagedWith(Unit* who) override +    { +        BossAI::JustEngagedWith(who); +        Talk(SAY_AGGRO); +    } -        void JustEngagedWith(Unit* who) override +    void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override +    { +        if (_phase < PHASE_HEALTH_50 && me->HealthBelowPctDamaged(50, damage))          { -            BossAI::JustEngagedWith(who); -            Talk(SAY_AGGRO); +            _phase++; +            events.ScheduleEvent(EVENT_HEALTH_50, 0s);          } -        void KilledUnit(Unit* /*victim*/) override +        if (_phase < PHASE_HEALTH_15 && me->HealthBelowPctDamaged(15, damage))          { -            Talk(SAY_SLAY); +            _phase++; +            events.ScheduleEvent(EVENT_HEALTH_15, 0s);          } +    } -        void JustDied(Unit* /*killer*/) override -        { -            _JustDied(); -        } +    void KilledUnit(Unit* /*victim*/) override +    { +        Talk(SAY_SLAY); +    } -        void UpdateAI(uint32 /*diff*/) override -        { -            if (!UpdateVictim()) -                return; +    void UpdateAI(uint32 diff) override +    { +        if (!UpdateVictim()) +            return; -            if (!hp50 && HealthBelowPct(50)) -            { -                Talk(SAY_HP50); -                hp50 = true; -            } +        events.Update(diff); + +        if (me->HasUnitState(UNIT_STATE_CASTING)) +            return; -            if (!hp15 && HealthBelowPct(15)) +        while (uint32 eventId = events.ExecuteEvent()) +        { +            switch (eventId)              { -                Talk(SAY_HP15); -                DoCast(me, SPELL_FRENZY); -                hp15 = true; +                case EVENT_HEALTH_50: +                    Talk(SAY_HEALTH_50); +                    me->RemoveAurasDueToSpell(SPELL_THRASH_15); +                    DoCastSelf(SPELL_THRASH_35); +                    break; +                case EVENT_HEALTH_15: +                    Talk(SAY_HEALTH_15); +                    DoCastSelf(SPELL_FRENZY); +                    break; +                default: +                    break;              } -            DoMeleeAttackIfReady(); +            if (me->HasUnitState(UNIT_STATE_CASTING)) +                return;          } -    private: -        bool hp50; -        bool hp15; -    }; - -    CreatureAI* GetAI(Creature* creature) const override -    { -        return GetRazorfenDownsAI<boss_gluttonAI>(creature); +        DoMeleeAttackIfReady();      } + +private: +    uint8 _phase;  };  void AddSC_boss_glutton()  { -    new boss_glutton(); +    RegisterRazorfenDownsCreatureAI(boss_glutton);  } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp index fc642366dfd..f0164d32181 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp @@ -15,11 +15,15 @@   * with this program. If not, see <http://www.gnu.org/licenses/>.   */ +/* + * Timers requires update + */ +  #include "ScriptMgr.h"  #include "ScriptedCreature.h"  #include "razorfen_downs.h" -enum Say +enum MordreshTexts  {      SAY_OOC_1               = 0,      SAY_OOC_2               = 1, @@ -27,113 +31,102 @@ enum Say      SAY_AGGRO               = 3  }; -enum Spells +enum MordreshSpells  {      SPELL_FIREBALL          = 12466,      SPELL_FIRE_NOVA         = 12470  }; -enum Events +enum MordreshEvents  {      EVENT_OOC_1            = 1, -    EVENT_OOC_2            = 2, -    EVENT_OOC_3            = 3, -    EVENT_OOC_4            = 4, -    EVENT_FIREBALL         = 5, -    EVENT_FIRE_NOVA        = 6 +    EVENT_OOC_2, +    EVENT_OOC_3, +    EVENT_OOC_4, + +    EVENT_FIREBALL, +    EVENT_FIRE_NOVA  }; -class boss_mordresh_fire_eye : public CreatureScript +// 7357 - Mordresh Fire Eye +struct boss_mordresh_fire_eye : public BossAI  { -public: -    boss_mordresh_fire_eye() : CreatureScript("boss_mordresh_fire_eye") { } +    boss_mordresh_fire_eye(Creature* creature) : BossAI(creature, DATA_MORDRESH_FIRE_EYE) { } -    struct boss_mordresh_fire_eyeAI : public BossAI +    void Reset() override      { -        boss_mordresh_fire_eyeAI(Creature* creature) : BossAI(creature, DATA_MORDRESH_FIRE_EYE) { } - -        void Reset() override -        { -            _Reset(); -            events.ScheduleEvent(EVENT_OOC_1, 10s); -        } +        _Reset(); +        events.ScheduleEvent(EVENT_OOC_1, 10s); +    } -        void JustEngagedWith(Unit* who) override -        { -            BossAI::JustEngagedWith(who); -            events.Reset(); -            Talk(SAY_AGGRO); -            events.ScheduleEvent(EVENT_FIREBALL, 100ms); -            events.ScheduleEvent(EVENT_FIRE_NOVA, 8s, 12s); -        } +    void JustEngagedWith(Unit* who) override +    { +        BossAI::JustEngagedWith(who); +        events.Reset(); +        Talk(SAY_AGGRO); +        events.ScheduleEvent(EVENT_FIREBALL, 0s); +        events.ScheduleEvent(EVENT_FIRE_NOVA, 8s, 12s); +    } -        void JustDied(Unit* /*killer*/) override -        { -            _JustDied(); -        } +    void UpdateAI(uint32 diff) override +    { +        events.Update(diff); -        void UpdateAI(uint32 diff) override +        if (!UpdateVictim())          { -            events.Update(diff); - -            if (!UpdateVictim()) -            { -                while (uint32 eventId = events.ExecuteEvent()) -                { -                    switch (eventId) -                    { -                        case EVENT_OOC_1: -                            Talk(SAY_OOC_1); -                            events.ScheduleEvent(EVENT_OOC_2, 8s); -                            break; -                        case EVENT_OOC_2: -                            Talk(SAY_OOC_2); -                            events.ScheduleEvent(EVENT_OOC_3, 3s); -                            break; -                        case EVENT_OOC_3: -                            me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); -                            events.ScheduleEvent(EVENT_OOC_4, 6s); -                            break; -                        case EVENT_OOC_4: -                            Talk(SAY_OOC_3); -                            events.ScheduleEvent(EVENT_OOC_1, 14s); -                            break; -                    } -                } -                return; -            } - -            if (me->HasUnitState(UNIT_STATE_CASTING)) -                return; -              while (uint32 eventId = events.ExecuteEvent())              {                  switch (eventId)                  { -                    case EVENT_FIREBALL: -                        DoCastVictim(SPELL_FIREBALL); -                        events.ScheduleEvent(EVENT_FIREBALL, 2400ms, 3800ms); +                    case EVENT_OOC_1: +                        Talk(SAY_OOC_1); +                        events.ScheduleEvent(EVENT_OOC_2, 8s); +                        break; +                    case EVENT_OOC_2: +                        Talk(SAY_OOC_2); +                        events.ScheduleEvent(EVENT_OOC_3, 3s); +                        break; +                    case EVENT_OOC_3: +                        me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); +                        events.ScheduleEvent(EVENT_OOC_4, 6s);                          break; -                    case EVENT_FIRE_NOVA: -                        DoCast(me, SPELL_FIRE_NOVA); -                        events.ScheduleEvent(EVENT_FIRE_NOVA, 11s, 16s); +                    case EVENT_OOC_4: +                        Talk(SAY_OOC_3); +                        events.ScheduleEvent(EVENT_OOC_1, 14s);                          break;                  } +            } +            return; +        } + +        if (me->HasUnitState(UNIT_STATE_CASTING)) +            return; -                if (me->HasUnitState(UNIT_STATE_CASTING)) -                    return; +        while (uint32 eventId = events.ExecuteEvent()) +        { +            switch (eventId) +            { +                case EVENT_FIREBALL: +                    DoCastVictim(SPELL_FIREBALL); +                    events.Repeat(2400ms, 3800ms); +                    break; +                case EVENT_FIRE_NOVA: +                    DoCastSelf(SPELL_FIRE_NOVA); +                    events.Repeat(11s, 16s); +                    break; +                default: +                    break;              } -            DoMeleeAttackIfReady(); + +            if (me->HasUnitState(UNIT_STATE_CASTING)) +                return;          } -    }; -    CreatureAI* GetAI(Creature* creature) const override -    { -        return GetRazorfenDownsAI<boss_mordresh_fire_eyeAI>(creature); +        DoMeleeAttackIfReady();      }  };  void AddSC_boss_mordresh_fire_eye()  { -    new boss_mordresh_fire_eye(); +    RegisterRazorfenDownsCreatureAI(boss_mordresh_fire_eye);  } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp index 70ada5662e7..02399c70b0a 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp @@ -15,96 +15,82 @@   * with this program. If not, see <http://www.gnu.org/licenses/>.   */ +/* + * Timers requires update + */ +  #include "ScriptMgr.h"  #include "ScriptedCreature.h"  #include "razorfen_downs.h" -enum Spells +enum TutenkashSpells  { -    SPELL_THRASH             = 8876, -    SPELL_WEB_SPRAY          = 12252, -    SPELL_VIRULENT_POISON    = 12254, -    SPELL_CURSE_OF_TUTENKASH = 12255 +    SPELL_VIRULENT_POISON        = 12254, +    SPELL_THRASH                 = 8876, +    SPELL_WEB_SPRAY              = 12252, +    SPELL_CURSE_OF_TUTENKASH     = 12255  }; -enum Events +enum TutenkashEvents  { -    EVENT_WEB_SPRAY          = 1, -    EVENT_CURSE_OF_TUTENKASH = 2 +    EVENT_WEB_SPRAY              = 1, +    EVENT_CURSE_OF_TUTENKASH  }; -class boss_tuten_kash : public CreatureScript +// 7355 - Tuten'kash +struct boss_tuten_kash : public BossAI  { -public: -    boss_tuten_kash() : CreatureScript("boss_tuten_kash") { } +    boss_tuten_kash(Creature* creature) : BossAI(creature, DATA_TUTEN_KASH) { } -    struct boss_tuten_kashAI : public BossAI +    void Reset() override      { -        boss_tuten_kashAI(Creature* creature) : BossAI(creature, DATA_TUTEN_KASH) { } +        _Reset(); +        DoCastSelf(SPELL_VIRULENT_POISON); +        DoCastSelf(SPELL_THRASH); +    } -        void Reset() override -        { -            _Reset(); -            if (!me->HasAura(SPELL_THRASH)) -                DoCast(me, SPELL_THRASH); -            if (!me->HasAura(SPELL_VIRULENT_POISON)) -                DoCast(me, SPELL_VIRULENT_POISON); -        } +    void JustEngagedWith(Unit* who) override +    { +        BossAI::JustEngagedWith(who); +        events.ScheduleEvent(EVENT_WEB_SPRAY, 10s, 20s); +        events.ScheduleEvent(EVENT_CURSE_OF_TUTENKASH, 10s, 15s); +    } -        void JustEngagedWith(Unit* who) override -        { -            BossAI::JustEngagedWith(who); -            events.ScheduleEvent(EVENT_WEB_SPRAY, 3s, 5s); -            events.ScheduleEvent(EVENT_CURSE_OF_TUTENKASH, 9s, 14s); -        } +    void UpdateAI(uint32 diff) override +    { +        if (!UpdateVictim()) +            return; -        void JustDied(Unit* /*killer*/) override -        { -            _JustDied(); -        } +        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_WEB_SPRAY: +                    DoCastSelf(SPELL_WEB_SPRAY); +                    events.Repeat(15s, 25s); +                    break; +                case EVENT_CURSE_OF_TUTENKASH: +                    DoCastSelf(SPELL_CURSE_OF_TUTENKASH); +                    events.Repeat(15s, 25s); +                    break; +                default: +                    break; +            }              if (me->HasUnitState(UNIT_STATE_CASTING))                  return; - -            while (uint32 eventId = events.ExecuteEvent()) -            { -                switch (eventId) -                { -                    case EVENT_WEB_SPRAY: -                        if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, false)) -                        { -                            if (!target->HasAura(SPELL_WEB_SPRAY)) -                                DoCast(target, SPELL_WEB_SPRAY); -                        } -                        events.ScheduleEvent(EVENT_WEB_SPRAY, 6s, 8s); -                        break; -                    case EVENT_CURSE_OF_TUTENKASH: -                        DoCast(me, SPELL_CURSE_OF_TUTENKASH); -                        events.ScheduleEvent(EVENT_CURSE_OF_TUTENKASH, 15s, 25s); -                        break; -                } - -                if (me->HasUnitState(UNIT_STATE_CASTING)) -                    return; -            } -            DoMeleeAttackIfReady();          } -    }; -    CreatureAI* GetAI(Creature* creature) const override -    { -        return GetRazorfenDownsAI<boss_tuten_kashAI>(creature); +        DoMeleeAttackIfReady();      }  };  void AddSC_boss_tuten_kash()  { -    new boss_tuten_kash(); +    RegisterRazorfenDownsCreatureAI(boss_tuten_kash);  } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h index 1552b273406..61b5ac994c4 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h @@ -69,4 +69,7 @@ inline AI* GetRazorfenDownsAI(T* obj)      return GetInstanceAI<AI>(obj, RFDScriptName);  } +#define RegisterRazorfenDownsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetRazorfenDownsAI) +#define RegisterRazorfenDownsGameObjectAI(ai_name) RegisterGameObjectAIWithFactory(ai_name, GetRazorfenDownsAI) +  #endif  | 
