aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp371
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h2
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_