aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKaelima <jeppo_meyer@msn.com>2011-05-12 14:39:00 -0700
committerKaelima <jeppo_meyer@msn.com>2011-05-12 14:39:00 -0700
commit6b794f65f30323a66689c3a76f67c1a87c098ced (patch)
tree0a57cdc8222a589e76409127e24084c841c1379e /src
parentb367fc41c27e36273852dedff50a0075cd56881e (diff)
parentaa1895277421c5e7e6f3e28def4b5e4b792dcff6 (diff)
Merge pull request #40 from Ramusik/master
Cleanup and improve Doom Lord Kazzak script
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/boss_doomlord_kazzak.cpp250
1 files changed, 126 insertions, 124 deletions
diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
index d04a4b7b205..20512a448b6 100644
--- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
+++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
@@ -25,151 +25,153 @@ EndScriptData */
#include "ScriptPCH.h"
-#define SAY_INTRO -1000147
-#define SAY_AGGRO1 -1000148
-#define SAY_AGGRO2 -1000149
-#define SAY_SURPREME1 -1000154
-#define SAY_SURPREME2 -1000149
-#define SAY_KILL1 -1000150
-#define SAY_KILL2 -1000151
-#define SAY_KILL3 -1000152
-#define SAY_DEATH -1000155
-#define EMOTE_FRENZY -1000151
-#define SAY_RAND1 -1000158
-#define SAY_RAND2 -1000157
-
-#define SPELL_SHADOWVOLLEY 32963
-#define SPELL_CLEAVE 31779
-#define SPELL_THUNDERCLAP 36706
-#define SPELL_VOIDBOLT 39329
-#define SPELL_MARKOFKAZZAK 32960
-#define SPELL_ENRAGE 32964
-#define SPELL_CAPTURESOUL 32966
-#define SPELL_TWISTEDREFLECTION 21063
-
-class boss_doomlord_kazzak : public CreatureScript
+enum Yells
{
-public:
- boss_doomlord_kazzak() : CreatureScript("boss_doomlord_kazzak") { }
-
- CreatureAI* GetAI(Creature* pCreature) const
- {
- return new boss_doomlordkazzakAI (pCreature);
- }
-
- struct boss_doomlordkazzakAI : public ScriptedAI
- {
- boss_doomlordkazzakAI(Creature *c) : ScriptedAI(c) {}
-
- uint32 ShadowVolley_Timer;
- uint32 Cleave_Timer;
- uint32 ThunderClap_Timer;
- uint32 VoidBolt_Timer;
- uint32 MarkOfKazzak_Timer;
- uint32 Enrage_Timer;
- uint32 Twisted_Reflection_Timer;
-
- void Reset()
- {
- ShadowVolley_Timer = 6000 + rand()%4000;
- Cleave_Timer = 7000;
- ThunderClap_Timer = 14000 + rand()%4000;
- VoidBolt_Timer = 30000;
- MarkOfKazzak_Timer = 25000;
- Enrage_Timer = 60000;
- Twisted_Reflection_Timer = 33000; // Timer may be incorrect
- }
-
- void JustRespawned()
- {
- DoScriptText(SAY_INTRO, me);
- }
-
- void EnterCombat(Unit * /*who*/)
- {
- DoScriptText(RAND(SAY_AGGRO1, SAY_AGGRO2), me);
- }
-
- void KilledUnit(Unit* victim)
- {
- // When Kazzak kills a player (not pets/totems), he regens some health
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
+ SAY_INTRO = 0,
+ SAY_AGGRO = 1,
+ SAY_SURPREME = 2,
+ SAY_KILL = 3,
+ SAY_DEATH = 4,
+ EMOTE_FRENZY = 5,
+ SAY_RAND = 6
+};
- DoCast(me, SPELL_CAPTURESOUL);
+enum Spells
+{
+ SPELL_SHADOWVOLLEY = 32963,
+ SPELL_CLEAVE = 31779,
+ SPELL_THUNDERCLAP = 36706,
+ SPELL_VOIDBOLT = 39329,
+ SPELL_MARKOFKAZZAK = 32960,
+ SPELL_ENRAGE = 32964,
+ SPELL_CAPTURESOUL = 32966,
+ SPELL_TWISTEDREFLECTION = 21063
+};
- DoScriptText(RAND(SAY_KILL1, SAY_KILL2, SAY_KILL3), me);
- }
+enum Events
+{
+ EVENT_SHADOW_VOLLEY = 1,
+ EVENT_CLEAVE = 2,
+ EVENT_THUNDERCLAP = 3,
+ EVENT_VOIDBOLT = 4,
+ EVENT_MARK_OF_KAZZAK = 5,
+ EVENT_ENRAGE = 6,
+ EVENT_TWISTED_REFLECTION = 7
+};
- void JustDied(Unit * /*victim*/)
- {
- DoScriptText(SAY_DEATH, me);
- }
+class boss_doomlord_kazzak : public CreatureScript
+{
+ public:
+ boss_doomlord_kazzak() : CreatureScript("boss_doomlord_kazzak") { }
- void UpdateAI(const uint32 diff)
+ struct boss_doomlordkazzakAI : public ScriptedAI
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ boss_doomlordkazzakAI(Creature* creature) : ScriptedAI(creature)
+ {
+ }
- //ShadowVolley_Timer
- if (ShadowVolley_Timer <= diff)
+ void Reset()
{
- DoCast(me->getVictim(), SPELL_SHADOWVOLLEY);
- ShadowVolley_Timer = 4000 + rand()%2000;
- } else ShadowVolley_Timer -= diff;
+ events.Reset();
+ events.ScheduleEvent(EVENT_SHADOW_VOLLEY, urand(6000, 10000));
+ events.ScheduleEvent(EVENT_CLEAVE, 7000);
+ events.ScheduleEvent(EVENT_THUNDERCLAP, urand(14000, 18000));
+ events.ScheduleEvent(EVENT_VOIDBOLT, 30000);
+ events.ScheduleEvent(EVENT_MARK_OF_KAZZAK, 25000);
+ events.ScheduleEvent(EVENT_ENRAGE, 60000);
+ events.ScheduleEvent(EVENT_TWISTED_REFLECTION, 33000);
+ }
+
+ void JustRespawned()
+ {
+ Talk(SAY_INTRO);
+ }
- //Cleave_Timer
- if (Cleave_Timer <= diff)
+ void EnterCombat(Unit * /*who*/)
{
- DoCast(me->getVictim(), SPELL_CLEAVE);
- Cleave_Timer = 8000 + rand()%4000;
- } else Cleave_Timer -= diff;
+ Talk(SAY_AGGRO);
+ }
- //ThunderClap_Timer
- if (ThunderClap_Timer <= diff)
+ void KilledUnit(Unit* victim)
{
- DoCast(me->getVictim(), SPELL_THUNDERCLAP);
- ThunderClap_Timer = 10000 + rand()%4000;
- } else ThunderClap_Timer -= diff;
+ // When Kazzak kills a player (not pets/totems), he regens some health
+ if (victim->GetTypeId() != TYPEID_PLAYER)
+ return;
- //VoidBolt_Timer
- if (VoidBolt_Timer <= diff)
+ DoCast(me, SPELL_CAPTURESOUL);
+
+ Talk(SAY_KILL);
+ }
+
+ void JustDied(Unit * /*victim*/)
{
- DoCast(me->getVictim(), SPELL_VOIDBOLT);
- VoidBolt_Timer = 15000 + rand()%3000;
- } else VoidBolt_Timer -= diff;
+ Talk(SAY_DEATH);
+ }
- //MarkOfKazzak_Timer
- if (MarkOfKazzak_Timer <= diff)
+ void UpdateAI(const uint32 diff)
{
- Unit* victim = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (victim->GetPower(POWER_MANA))
+ //Return since we have no target
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCast(victim, SPELL_MARKOFKAZZAK);
- MarkOfKazzak_Timer = 20000;
+ switch(eventId)
+ {
+ case EVENT_SHADOW_VOLLEY:
+ DoCastVictim(SPELL_SHADOWVOLLEY);
+ events.ScheduleEvent(EVENT_SHADOW_VOLLEY, urand(4000, 6000));
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 12000));
+ break;
+ case EVENT_THUNDERCLAP:
+ DoCastVictim(SPELL_THUNDERCLAP);
+ events.ScheduleEvent(EVENT_THUNDERCLAP, urand(10000, 14000));
+ break;
+ case EVENT_VOIDBOLT:
+ DoCastVictim(SPELL_VOIDBOLT);
+ events.ScheduleEvent(EVENT_VOIDBOLT, urand(15000, 18000));
+ break;
+ case EVENT_MARK_OF_KAZZAK:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ if (target->GetPower(POWER_MANA))
+ DoCast(target, SPELL_MARKOFKAZZAK);
+ events.ScheduleEvent(EVENT_MARK_OF_KAZZAK, 20000);
+ break;
+ case EVENT_ENRAGE:
+ Talk(EMOTE_FRENZY);
+ DoCast(me, SPELL_ENRAGE);
+ events.ScheduleEvent(EVENT_ENRAGE, 30000);
+ break;
+ case EVENT_TWISTED_REFLECTION:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_TWISTEDREFLECTION);
+ events.ScheduleEvent(EVENT_TWISTED_REFLECTION, 15000);
+ break;
+ default:
+ break;
+ }
}
- } else MarkOfKazzak_Timer -= diff;
-
- //Enrage_Timer
- if (Enrage_Timer <= diff)
- {
- DoScriptText(EMOTE_FRENZY, me);
- DoCast(me, SPELL_ENRAGE);
- Enrage_Timer = 30000;
- } else Enrage_Timer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
- if (Twisted_Reflection_Timer <= diff)
- {
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_TWISTEDREFLECTION);
- Twisted_Reflection_Timer = 15000;
- } else Twisted_Reflection_Timer -= diff;
+ private:
+ EventMap events;
- DoMeleeAttackIfReady();
+ };
+
+ CreatureAI *GetAI(Creature* creature) const
+ {
+ return new boss_doomlordkazzakAI (creature);
}
-
- };
-
};
void AddSC_boss_doomlordkazzak()