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); } |