diff options
| -rw-r--r-- | src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 273 | 
1 files changed, 125 insertions, 148 deletions
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index f4f72e9860f..19bb9649717 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -56,186 +56,163 @@ enum SummonGroups      SUMMON_GROUP_25MAN = 2  }; -class boss_razuvious : public CreatureScript +struct boss_razuvious : public BossAI  { -public: -    boss_razuvious() : CreatureScript("boss_razuvious") { } +    boss_razuvious(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { } -    CreatureAI* GetAI(Creature* creature) const override +    void SummonAdds()      { -        return GetNaxxramasAI<boss_razuviousAI>(creature); +        me->SummonCreatureGroup(SUMMON_GROUP_10MAN); +        if (Is25ManRaid()) +            me->SummonCreatureGroup(SUMMON_GROUP_25MAN);      } -    struct boss_razuviousAI : public BossAI +    void InitializeAI() override      { -        boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { } - -        void SummonAdds() -        { -            me->SummonCreatureGroup(SUMMON_GROUP_10MAN); -            if (Is25ManRaid()) -                me->SummonCreatureGroup(SUMMON_GROUP_25MAN); -        } - -        void InitializeAI() override -        { -            if (!me->isDead() && instance->GetBossState(BOSS_RAZUVIOUS) != DONE) -            { -                Reset(); -                SummonAdds(); -            } -        } - -        void JustReachedHome() override +        if (!me->isDead() && instance->GetBossState(BOSS_RAZUVIOUS) != DONE)          { -            _JustReachedHome(); +            Reset();              SummonAdds(); -            me->GetMotionMaster()->Initialize();          } +    } -        void KilledUnit(Unit* victim) override -        { -            if (victim->GetTypeId() == TYPEID_PLAYER || (victim->GetTypeId() == TYPEID_UNIT && victim->GetEntry() == NPC_DK_UNDERSTUDY)) -                Talk(SAY_SLAY); -        } +    void JustReachedHome() override +    { +        _JustReachedHome(); +        SummonAdds(); +        me->GetMotionMaster()->Initialize(); +    } -        void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override -        { -            if (spellInfo->Id == SPELL_UNDERSTUDY_TAUNT) -                Talk(SAY_TAUNTED, caster); -        } +    void KilledUnit(Unit* victim) override +    { +        if (victim->GetTypeId() == TYPEID_PLAYER || (victim->GetTypeId() == TYPEID_UNIT && victim->GetEntry() == NPC_DK_UNDERSTUDY)) +            Talk(SAY_SLAY); +    } -        void JustDied(Unit* /*killer*/) override -        { -            for (ObjectGuid summonGuid : summons) -                if (Creature* summon = ObjectAccessor::GetCreature(*me, summonGuid)) -                    summon->RemoveCharmAuras(); -            Talk(SAY_DEATH); -            DoCastAOE(SPELL_HOPELESS, true); - -            events.Reset(); -            instance->SetBossState(BOSS_RAZUVIOUS, DONE); -        } +    void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override +    { +        if (spellInfo->Id == SPELL_UNDERSTUDY_TAUNT) +            Talk(SAY_TAUNTED, caster); +    } -        void JustEngagedWith(Unit* who) override -        { -            BossAI::JustEngagedWith(who); -            me->StopMoving(); -            summons.DoZoneInCombat(); -            Talk(SAY_AGGRO); -            events.ScheduleEvent(EVENT_ATTACK, 7s); -            events.ScheduleEvent(EVENT_STRIKE, 21s); -            events.ScheduleEvent(EVENT_SHOUT, 16s); -            events.ScheduleEvent(EVENT_KNIFE, 10s); -        } +    void JustDied(Unit* /*killer*/) override +    { +        for (ObjectGuid summonGuid : summons) +            if (Creature* summon = ObjectAccessor::GetCreature(*me, summonGuid)) +                summon->RemoveCharmAuras(); +        Talk(SAY_DEATH); +        DoCastAOE(SPELL_HOPELESS, true); + +        events.Reset(); +        instance->SetBossState(BOSS_RAZUVIOUS, DONE); +    } -        void UpdateAI(uint32 diff) override -        { -            if (!UpdateVictim()) -                return; +    void JustEngagedWith(Unit* who) override +    { +        BossAI::JustEngagedWith(who); +        me->StopMoving(); +        summons.DoZoneInCombat(); +        Talk(SAY_AGGRO); +        events.ScheduleEvent(EVENT_ATTACK, 7s); +        events.ScheduleEvent(EVENT_STRIKE, 21s); +        events.ScheduleEvent(EVENT_SHOUT, 16s); +        events.ScheduleEvent(EVENT_KNIFE, 10s); +    } + +    void UpdateAI(uint32 diff) override +    { +        if (!UpdateVictim()) +            return; -            events.Update(diff); +        events.Update(diff); -            while (uint32 eventId = events.ExecuteEvent()) +        while (uint32 eventId = events.ExecuteEvent()) +        { +            switch (eventId)              { -                switch (eventId) -                { -                    case EVENT_ATTACK: -                        SetCombatMovement(true); -                        if (Unit* victim = me->GetVictim()) -                            me->GetMotionMaster()->MoveChase(victim); -                        break; -                    case EVENT_STRIKE: -                        DoCastVictim(SPELL_UNBALANCING_STRIKE); -                        events.Repeat(Seconds(6)); -                        return; -                    case EVENT_SHOUT: -                        DoCastAOE(SPELL_DISRUPTING_SHOUT); -                        events.Repeat(Seconds(16)); -                        return; -                    case EVENT_KNIFE: -                        if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f)) -                            DoCast(target, SPELL_JAGGED_KNIFE); -                        events.Repeat(randtime(Seconds(10), Seconds(15))); -                        return; -                } +                case EVENT_ATTACK: +                    SetCombatMovement(true); +                    if (Unit* victim = me->GetVictim()) +                        me->GetMotionMaster()->MoveChase(victim); +                    break; +                case EVENT_STRIKE: +                    DoCastVictim(SPELL_UNBALANCING_STRIKE); +                    events.Repeat(Seconds(6)); +                    return; +                case EVENT_SHOUT: +                    DoCastAOE(SPELL_DISRUPTING_SHOUT); +                    events.Repeat(Seconds(16)); +                    return; +                case EVENT_KNIFE: +                    if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f)) +                        DoCast(target, SPELL_JAGGED_KNIFE); +                    events.Repeat(randtime(Seconds(10), Seconds(15))); +                    return;              } - -            DoMeleeAttackIfReady();          } -        void Reset() override -        { -            SetCombatMovement(false); -            _Reset(); -        } -    }; +        DoMeleeAttackIfReady(); +    } +    void Reset() override +    { +        SetCombatMovement(false); +        _Reset(); +    }  }; -class npc_dk_understudy : public CreatureScript +struct npc_dk_understudy : public ScriptedAI  { -    public: -        npc_dk_understudy() : CreatureScript("npc_dk_understudy") { } - -        struct npc_dk_understudyAI : public ScriptedAI -        { -            npc_dk_understudyAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), bloodStrikeTimer(0) -            { -                creature->LoadEquipment(1); -            } - -            void JustEngagedWith(Unit* /*who*/) override -            { -                me->SetEmoteState(EMOTE_ONESHOT_NONE); -                if (Creature* razuvious = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_RAZUVIOUS))) -                    razuvious->AI()->DoZoneInCombat(); -            } - -            void JustReachedHome() override -            { -                if (_instance->GetBossState(BOSS_RAZUVIOUS) == DONE) -                    me->DespawnOrUnsummon(); -                else -                    ScriptedAI::JustReachedHome(); -            } - -            void UpdateAI(uint32 diff) override -            { -                if (!me->isPossessedByPlayer() && !UpdateVictim()) -                    return; +    npc_dk_understudy(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), bloodStrikeTimer(0) +    { +        creature->LoadEquipment(1); +    } -                if (!me->isPossessedByPlayer()) -                { -                    if (diff < bloodStrikeTimer) -                        bloodStrikeTimer -= diff; -                    else -                        DoCastVictim(SPELL_UNDERSTUDY_BLOOD_STRIKE); -                } +    void JustEngagedWith(Unit* /*who*/) override +    { +        me->SetEmoteState(EMOTE_ONESHOT_NONE); +        if (Creature* razuvious = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_RAZUVIOUS))) +            razuvious->AI()->DoZoneInCombat(); +    } -                DoMeleeAttackIfReady(); -            } +    void JustReachedHome() override +    { +        if (_instance->GetBossState(BOSS_RAZUVIOUS) == DONE) +            me->DespawnOrUnsummon(); +        else +            ScriptedAI::JustReachedHome(); +    } -            void OnCharmed(bool isNew) override -            { -                if (me->IsCharmed() && !me->IsEngaged()) -                    JustEngagedWith(nullptr); -                ScriptedAI::OnCharmed(isNew); -            } -        private: -            InstanceScript* const _instance; -            ObjectGuid _charmer; -            uint32 bloodStrikeTimer; -        }; +    void UpdateAI(uint32 diff) override +    { +        if (!me->isPossessedByPlayer() && !UpdateVictim()) +            return; -        CreatureAI* GetAI(Creature* creature) const override +        if (!me->isPossessedByPlayer())          { -            return GetNaxxramasAI<npc_dk_understudyAI>(creature); +            if (diff < bloodStrikeTimer) +                bloodStrikeTimer -= diff; +            else +                DoCastVictim(SPELL_UNDERSTUDY_BLOOD_STRIKE);          } + +        DoMeleeAttackIfReady(); +    } + +    void OnCharmed(bool isNew) override +    { +        if (me->IsCharmed() && !me->IsEngaged()) +            JustEngagedWith(nullptr); +        ScriptedAI::OnCharmed(isNew); +    } +private: +    InstanceScript* const _instance; +    ObjectGuid _charmer; +    uint32 bloodStrikeTimer;  };  void AddSC_boss_razuvious()  { -    new boss_razuvious(); -    new npc_dk_understudy(); +    RegisterNaxxramasCreatureAI(boss_razuvious); +    RegisterNaxxramasCreatureAI(npc_dk_understudy);  }  | 
