diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-04-26 10:24:27 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-26 09:24:27 +0200 |
commit | d9670cec6dc310b6fb636b73a92d7be24e89496f (patch) | |
tree | 1c50f4e4476b2571d8382fdd796f7c0c689f00b8 /src | |
parent | 7de6e756631391065fbff7c9bf8a0f1ce3d05272 (diff) |
Scripts/DTK: Update King Dred to new model (#26464)
Co-authored-by: offl <offl@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp | 371 | ||||
-rw-r--r-- | src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h | 2 |
2 files changed, 171 insertions, 202 deletions
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index b104d6c683a..b10edbf31c9 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -53,234 +53,201 @@ enum Events EVENT_RAPTOR_CALL }; -class boss_king_dred : public CreatureScript +struct boss_king_dred : public BossAI { - public: - boss_king_dred() : CreatureScript("boss_king_dred") { } - - struct boss_king_dredAI : public BossAI + boss_king_dred(Creature* creature) : BossAI(creature, DATA_KING_DRED) + { + Initialize(); + } + + void Initialize() + { + raptorsKilled = 0; + } + + void Reset() override + { + Initialize(); + _Reset(); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + + events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33s); + events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20s); + events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500ms); + events.ScheduleEvent(EVENT_FEARSOME_ROAR, 10s, 20s); + events.ScheduleEvent(EVENT_PIERCING_SLASH, 15s); + events.ScheduleEvent(EVENT_RAPTOR_CALL, 20s, 25s); + } + + void DoAction(int32 action) override + { + if (action == ACTION_RAPTOR_KILLED) + ++raptorsKilled; + } + + uint32 GetData(uint32 type) const override + { + if (type == DATA_RAPTORS_KILLED) + return raptorsKilled; + + return 0; + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) { - boss_king_dredAI(Creature* creature) : BossAI(creature, DATA_KING_DRED) - { - Initialize(); - } - - void Initialize() - { - raptorsKilled = 0; - } - - void Reset() override + switch (eventId) { - Initialize(); - _Reset(); + case EVENT_BELLOWING_ROAR: + DoCastAOE(SPELL_BELLOWING_ROAR); + events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33s); + break; + case EVENT_GRIEVOUS_BITE: + DoCastVictim(SPELL_GRIEVOUS_BITE); + events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20s); + break; + case EVENT_MANGLING_SLASH: + DoCastVictim(SPELL_MANGLING_SLASH); + events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500ms); + break; + case EVENT_FEARSOME_ROAR: + DoCastAOE(SPELL_FEARSOME_ROAR); + events.ScheduleEvent(EVENT_FEARSOME_ROAR, 10s, 20s); + break; + case EVENT_PIERCING_SLASH: + DoCastVictim(SPELL_PIERCING_SLASH); + events.ScheduleEvent(EVENT_PIERCING_SLASH, 15s); + break; + case EVENT_RAPTOR_CALL: + DoCastVictim(SPELL_RAPTOR_CALL); + + float x, y, z; + + me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 10.0f); + me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1s); + events.ScheduleEvent(EVENT_RAPTOR_CALL, 20s, 25s); + break; + default: + break; } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - - events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33s); - events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20s); - events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500ms); - events.ScheduleEvent(EVENT_FEARSOME_ROAR, 10s, 20s); - events.ScheduleEvent(EVENT_PIERCING_SLASH, 15s); - events.ScheduleEvent(EVENT_RAPTOR_CALL, 20s, 25s); - } - - void DoAction(int32 action) override - { - if (action == ACTION_RAPTOR_KILLED) - ++raptorsKilled; - } - - uint32 GetData(uint32 type) const override - { - if (type == DATA_RAPTORS_KILLED) - return raptorsKilled; - - return 0; - } - - void JustDied(Unit* /*killer*/) override - { - _JustDied(); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - while (uint32 eventId = events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_BELLOWING_ROAR: - DoCastAOE(SPELL_BELLOWING_ROAR); - events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33s); - break; - case EVENT_GRIEVOUS_BITE: - DoCastVictim(SPELL_GRIEVOUS_BITE); - events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20s); - break; - case EVENT_MANGLING_SLASH: - DoCastVictim(SPELL_MANGLING_SLASH); - events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500ms); - break; - case EVENT_FEARSOME_ROAR: - DoCastAOE(SPELL_FEARSOME_ROAR); - events.ScheduleEvent(EVENT_FEARSOME_ROAR, 10s, 20s); - break; - case EVENT_PIERCING_SLASH: - DoCastVictim(SPELL_PIERCING_SLASH); - events.ScheduleEvent(EVENT_PIERCING_SLASH, 15s); - break; - case EVENT_RAPTOR_CALL: - DoCastVictim(SPELL_RAPTOR_CALL); - - float x, y, z; - - me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 10.0f); - me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1s); - events.ScheduleEvent(EVENT_RAPTOR_CALL, 20s, 25s); - break; - default: - break; - } - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - } - - DoMeleeAttackIfReady(); - } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + } - private: - uint8 raptorsKilled; - }; + DoMeleeAttackIfReady(); + } - CreatureAI* GetAI(Creature* creature) const override - { - return GetDrakTharonKeepAI<boss_king_dredAI>(creature); - } +private: + uint8 raptorsKilled; }; -class npc_drakkari_gutripper : public CreatureScript +struct npc_drakkari_gutripper : public ScriptedAI { - public: - npc_drakkari_gutripper() : CreatureScript("npc_drakkari_gutripper") { } - - struct npc_drakkari_gutripperAI : public ScriptedAI - { - npc_drakkari_gutripperAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = me->GetInstanceScript(); - } + npc_drakkari_gutripper(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + instance = me->GetInstanceScript(); + } - void Initialize() - { - GutRipTimer = urand(10000, 15000); - } + void Initialize() + { + GutRipTimer = urand(10000, 15000); + } - InstanceScript* instance; + InstanceScript* instance; - uint32 GutRipTimer; + uint32 GutRipTimer; - void Reset() override - { - Initialize(); - } + void Reset() override + { + Initialize(); + } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (GutRipTimer <= diff) - { - DoCastVictim(SPELL_GUT_RIP, false); - GutRipTimer = urand(10000, 15000); - } - else - GutRipTimer -= diff; - - DoMeleeAttackIfReady(); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void JustDied(Unit* /*killer*/) override - { - if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KING_DRED))) - Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); - } - }; - - CreatureAI* GetAI(Creature* creature) const override + if (GutRipTimer <= diff) { - return GetDrakTharonKeepAI<npc_drakkari_gutripperAI>(creature); + DoCastVictim(SPELL_GUT_RIP, false); + GutRipTimer = urand(10000, 15000); } -}; + else + GutRipTimer -= diff; -class npc_drakkari_scytheclaw : public CreatureScript -{ - public: - npc_drakkari_scytheclaw() : CreatureScript("npc_drakkari_scytheclaw") { } + DoMeleeAttackIfReady(); + } - struct npc_drakkari_scytheclawAI : public ScriptedAI - { - npc_drakkari_scytheclawAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = me->GetInstanceScript(); - } + void JustDied(Unit* /*killer*/) override + { + if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KING_DRED))) + Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); + } +}; - void Initialize() - { - uiRendTimer = urand(10000, 15000); - } +struct npc_drakkari_scytheclaw : public ScriptedAI +{ + npc_drakkari_scytheclaw(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + instance = me->GetInstanceScript(); + } - InstanceScript* instance; + void Initialize() + { + uiRendTimer = urand(10000, 15000); + } - uint32 uiRendTimer; + InstanceScript* instance; - void Reset() override - { - Initialize(); - } + uint32 uiRendTimer; - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (uiRendTimer <= diff) - { - DoCastVictim(SPELL_REND, false); - uiRendTimer = urand(10000, 15000); - } - else - uiRendTimer -= diff; - - DoMeleeAttackIfReady(); - } + void Reset() override + { + Initialize(); + } - void JustDied(Unit* /*killer*/) override - { - if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KING_DRED))) - Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); - } - }; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - CreatureAI* GetAI(Creature* creature) const override + if (uiRendTimer <= diff) { - return GetDrakTharonKeepAI<npc_drakkari_scytheclawAI>(creature); + DoCastVictim(SPELL_REND, false); + uiRendTimer = urand(10000, 15000); } + else + uiRendTimer -= diff; + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* /*killer*/) override + { + if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KING_DRED))) + Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); + } }; class achievement_king_dred : public AchievementCriteriaScript @@ -305,8 +272,8 @@ class achievement_king_dred : public AchievementCriteriaScript void AddSC_boss_king_dred() { - new boss_king_dred(); - new npc_drakkari_gutripper(); - new npc_drakkari_scytheclaw(); + RegisterDrakTharonKeepCreatureAI(boss_king_dred); + RegisterDrakTharonKeepCreatureAI(npc_drakkari_gutripper); + RegisterDrakTharonKeepCreatureAI(npc_drakkari_scytheclaw); new achievement_king_dred(); } diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h index 31165ce9ffd..3da9abea796 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h +++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h @@ -92,4 +92,6 @@ inline AI* GetDrakTharonKeepAI(T* obj) return GetInstanceAI<AI>(obj, DrakTharonKeepScriptName); } +#define RegisterDrakTharonKeepCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetDrakTharonKeepAI) + #endif // DRAK_THARON_KEEP_H_ |