diff options
Diffstat (limited to 'src/server/scripts/Northrend')
| -rw-r--r-- | src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp | 339 | 
1 files changed, 153 insertions, 186 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 5c6167c210e..c0d00837b18 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -69,141 +69,130 @@ Position const SavianaRagefireFlyOutPos  = {3155.51f, 683.844f, 95.0f,   4.69f};  Position const SavianaRagefireFlyInPos   = {3151.07f, 636.443f, 79.540f, 4.69f};  Position const SavianaRagefireLandPos    = {3151.07f, 636.443f, 78.649f, 4.69f}; -class boss_saviana_ragefire : public CreatureScript +struct boss_saviana_ragefire : public BossAI  { -    public: -        boss_saviana_ragefire() : CreatureScript("boss_saviana_ragefire") { } - -        struct boss_saviana_ragefireAI : public BossAI +    boss_saviana_ragefire(Creature* creature) : BossAI(creature, DATA_SAVIANA_RAGEFIRE) { } + +    void Reset() override +    { +        _Reset(); +        me->SetReactState(REACT_AGGRESSIVE); +        me->SetCanFly(false); +        me->SetDisableGravity(false); +    } + +    void JustEngagedWith(Unit* who) override +    { +        BossAI::JustEngagedWith(who); +        Talk(SAY_AGGRO); +        events.Reset(); +        events.ScheduleEvent(EVENT_ENRAGE, Seconds(20), EVENT_GROUP_LAND_PHASE); +        events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(14), EVENT_GROUP_LAND_PHASE); +        events.ScheduleEvent(EVENT_FLIGHT, Seconds(60), EVENT_GROUP_LAND_PHASE); +    } + +    void JustDied(Unit* /*killer*/) override +    { +        _JustDied(); +        DoPlaySoundToSet(me, SOUND_ID_DEATH); +    } + +    void MovementInform(uint32 type, uint32 point) override +    { +        if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) +            return; + +        switch (point)          { -            boss_saviana_ragefireAI(Creature* creature) : BossAI(creature, DATA_SAVIANA_RAGEFIRE) { } - -            void Reset() override -            { -                _Reset(); -                me->SetReactState(REACT_AGGRESSIVE); +            case POINT_FLIGHT: +                events.ScheduleEvent(EVENT_CONFLAGRATION, 1s); +                Talk(SAY_CONFLAGRATION); +                break; +            case POINT_LAND: +                events.ScheduleEvent(EVENT_LAND_GROUND, Milliseconds(1)); +                break; +            case POINT_LAND_GROUND:                  me->SetCanFly(false);                  me->SetDisableGravity(false); -            } +                me->SetReactState(REACT_AGGRESSIVE); +                events.ScheduleEvent(EVENT_ENRAGE, Seconds(1), EVENT_GROUP_LAND_PHASE); +                events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(2), Seconds(4), EVENT_GROUP_LAND_PHASE); +                events.ScheduleEvent(EVENT_FLIGHT, Seconds(50), EVENT_GROUP_LAND_PHASE); +                break; +            case POINT_TAKEOFF: +                events.ScheduleEvent(EVENT_AIR_MOVEMENT, Milliseconds(1)); +                break; +            default: +                break; +        } +    } -            void JustEngagedWith(Unit* who) override -            { -                BossAI::JustEngagedWith(who); -                Talk(SAY_AGGRO); -                events.Reset(); -                events.ScheduleEvent(EVENT_ENRAGE, Seconds(20), EVENT_GROUP_LAND_PHASE); -                events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(14), EVENT_GROUP_LAND_PHASE); -                events.ScheduleEvent(EVENT_FLIGHT, Seconds(60), EVENT_GROUP_LAND_PHASE); -            } +    void EnterEvadeMode(EvadeReason /*why*/) override +    { +        _DespawnAtEvade(); +    } -            void JustDied(Unit* /*killer*/) override -            { -                _JustDied(); -                DoPlaySoundToSet(me, SOUND_ID_DEATH); -            } +    void KilledUnit(Unit* victim) override +    { +        if (victim->GetTypeId() == TYPEID_PLAYER) +            Talk(SAY_KILL); +    } -            void MovementInform(uint32 type, uint32 point) override -            { -                if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) -                    return; +    void UpdateAI(uint32 diff) override +    { +        if (!UpdateVictim()) +            return; -                switch (point) -                { -                    case POINT_FLIGHT: -                        events.ScheduleEvent(EVENT_CONFLAGRATION, 1s); -                        Talk(SAY_CONFLAGRATION); -                        break; -                    case POINT_LAND: -                        events.ScheduleEvent(EVENT_LAND_GROUND, Milliseconds(1)); -                        break; -                    case POINT_LAND_GROUND: -                        me->SetCanFly(false); -                        me->SetDisableGravity(false); -                        me->SetReactState(REACT_AGGRESSIVE); -                        events.ScheduleEvent(EVENT_ENRAGE, Seconds(1), EVENT_GROUP_LAND_PHASE); -                        events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(2), Seconds(4), EVENT_GROUP_LAND_PHASE); -                        events.ScheduleEvent(EVENT_FLIGHT, Seconds(50), EVENT_GROUP_LAND_PHASE); -                        break; -                    case POINT_TAKEOFF: -                        events.ScheduleEvent(EVENT_AIR_MOVEMENT, Milliseconds(1)); -                        break; -                    default: -                        break; -                } -            } +        events.Update(diff); -            void EnterEvadeMode(EvadeReason /*why*/) override -            { -                _DespawnAtEvade(); -            } +        if (me->HasUnitState(UNIT_STATE_CASTING)) +            return; -            void KilledUnit(Unit* victim) override -            { -                if (victim->GetTypeId() == TYPEID_PLAYER) -                    Talk(SAY_KILL); -            } - -            void UpdateAI(uint32 diff) override +        while (uint32 eventId = events.ExecuteEvent()) +        { +            switch (eventId)              { -                if (!UpdateVictim()) -                    return; - -                events.Update(diff); - -                if (me->HasUnitState(UNIT_STATE_CASTING)) -                    return; - -                while (uint32 eventId = events.ExecuteEvent()) +                case EVENT_FLIGHT:                  { -                    switch (eventId) -                    { -                        case EVENT_FLIGHT: -                        { -                            me->SetCanFly(true); -                            me->SetDisableGravity(true); -                            me->SetReactState(REACT_PASSIVE); -                            me->AttackStop(); -                            Position pos; -                            pos.Relocate(me); -                            pos.m_positionZ += 10.0f; -                            me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, pos); -                            events.CancelEventGroup(EVENT_GROUP_LAND_PHASE); -                            break; -                        } -                        case EVENT_CONFLAGRATION: -                            DoCastSelf(SPELL_CONFLAGRATION, true); -                            break; -                        case EVENT_ENRAGE: -                            DoCastSelf(SPELL_ENRAGE); -                            Talk(EMOTE_ENRAGED); -                            events.Repeat(Seconds(24)); -                            break; -                        case EVENT_FLAME_BREATH: -                            DoCastVictim(SPELL_FLAME_BREATH); -                            events.Repeat(Seconds(20), Seconds(30)); -                            break; -                        case EVENT_AIR_MOVEMENT: -                            me->GetMotionMaster()->MovePoint(POINT_FLIGHT, SavianaRagefireFlyOutPos); -                            break; -                        case EVENT_LAND_GROUND: -                            me->GetMotionMaster()->MoveLand(POINT_LAND_GROUND, SavianaRagefireLandPos); -                            break; -                        default: -                            break; -                    } - -                    if (me->HasUnitState(UNIT_STATE_CASTING)) -                        return; +                    me->SetCanFly(true); +                    me->SetDisableGravity(true); +                    me->SetReactState(REACT_PASSIVE); +                    me->AttackStop(); +                    Position pos; +                    pos.Relocate(me); +                    pos.m_positionZ += 10.0f; +                    me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, pos); +                    events.CancelEventGroup(EVENT_GROUP_LAND_PHASE); +                    break;                  } - -                DoMeleeAttackIfReady(); +                case EVENT_CONFLAGRATION: +                    DoCastSelf(SPELL_CONFLAGRATION, true); +                    break; +                case EVENT_ENRAGE: +                    DoCastSelf(SPELL_ENRAGE); +                    Talk(EMOTE_ENRAGED); +                    events.Repeat(Seconds(24)); +                    break; +                case EVENT_FLAME_BREATH: +                    DoCastVictim(SPELL_FLAME_BREATH); +                    events.Repeat(Seconds(20), Seconds(30)); +                    break; +                case EVENT_AIR_MOVEMENT: +                    me->GetMotionMaster()->MovePoint(POINT_FLIGHT, SavianaRagefireFlyOutPos); +                    break; +                case EVENT_LAND_GROUND: +                    me->GetMotionMaster()->MoveLand(POINT_LAND_GROUND, SavianaRagefireLandPos); +                    break; +                default: +                    break;              } -        }; -        CreatureAI* GetAI(Creature* creature) const override -        { -            return GetRubySanctumAI<boss_saviana_ragefireAI>(creature); +            if (me->HasUnitState(UNIT_STATE_CASTING)) +                return;          } + +        DoMeleeAttackIfReady(); +    }  };  class ConflagrationTargetSelector @@ -218,80 +207,58 @@ class ConflagrationTargetSelector  };  // 74452 - Conflagration -class spell_saviana_conflagration_init : public SpellScriptLoader +class spell_saviana_conflagration_init : public SpellScript  { -    public: -        spell_saviana_conflagration_init() : SpellScriptLoader("spell_saviana_conflagration_init") { } - -        class spell_saviana_conflagration_init_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_saviana_conflagration_init_SpellScript); - -            bool Validate(SpellInfo const* /*spell*/) override -            { -                return ValidateSpellInfo({ SPELL_FLAME_BEACON, SPELL_CONFLAGRATION_2 }); -            } - -            void FilterTargets(std::list<WorldObject*>& targets) -            { -                targets.remove_if(ConflagrationTargetSelector()); -                uint8 maxSize = uint8(GetCaster()->GetMap()->Is25ManRaid() ? 6 : 3); -                if (targets.size() > maxSize) -                    Trinity::Containers::RandomResize(targets, maxSize); -            } - -            void HandleDummy(SpellEffIndex effIndex) -            { -                PreventHitDefaultEffect(effIndex); -                GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true); -                GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_2, false); -            } - -            void Register() override -            { -                OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_saviana_conflagration_init_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); -                OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); -            } -        }; - -        SpellScript* GetSpellScript() const override -        { -            return new spell_saviana_conflagration_init_SpellScript(); -        } +    PrepareSpellScript(spell_saviana_conflagration_init); + +    bool Validate(SpellInfo const* /*spell*/) override +    { +        return ValidateSpellInfo({ SPELL_FLAME_BEACON, SPELL_CONFLAGRATION_2 }); +    } + +    void FilterTargets(std::list<WorldObject*>& targets) +    { +        targets.remove_if(ConflagrationTargetSelector()); +        uint8 maxSize = uint8(GetCaster()->GetMap()->Is25ManRaid() ? 6 : 3); +        if (targets.size() > maxSize) +            Trinity::Containers::RandomResize(targets, maxSize); +    } + +    void HandleDummy(SpellEffIndex effIndex) +    { +        PreventHitDefaultEffect(effIndex); +        GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true); +        GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_2, false); +    } + +    void Register() override +    { +        OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_saviana_conflagration_init::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); +        OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); +    }  };  // 74455 - Conflagration -class spell_saviana_conflagration_throwback : public SpellScriptLoader +class spell_saviana_conflagration_throwback : public SpellScript  { -    public: -        spell_saviana_conflagration_throwback() : SpellScriptLoader("spell_saviana_conflagration_throwback") { } - -        class spell_saviana_conflagration_throwback_SpellScript : public SpellScript -        { -            PrepareSpellScript(spell_saviana_conflagration_throwback_SpellScript); - -            void HandleScript(SpellEffIndex effIndex) -            { -                PreventHitDefaultEffect(effIndex); -                GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); -                GetHitUnit()->GetMotionMaster()->MovePoint(POINT_LAND, SavianaRagefireFlyInPos); -            } - -            void Register() override -            { -                OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); -            } -        }; - -        SpellScript* GetSpellScript() const override -        { -            return new spell_saviana_conflagration_throwback_SpellScript(); -        } +    PrepareSpellScript(spell_saviana_conflagration_throwback); + +    void HandleScript(SpellEffIndex effIndex) +    { +        PreventHitDefaultEffect(effIndex); +        GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); +        GetHitUnit()->GetMotionMaster()->MovePoint(POINT_LAND, SavianaRagefireFlyInPos); +    } + +    void Register() override +    { +        OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); +    }  };  void AddSC_boss_saviana_ragefire()  { -    new boss_saviana_ragefire(); -    new spell_saviana_conflagration_init(); -    new spell_saviana_conflagration_throwback(); +    RegisterRubySanctumCreatureAI(boss_saviana_ragefire); +    RegisterSpellScript(spell_saviana_conflagration_init); +    RegisterSpellScript(spell_saviana_conflagration_throwback);  }  | 
