aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp132
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp109
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp94
3 files changed, 159 insertions, 176 deletions
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
index 9fe7aa25a57..52da9ed0f33 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
@@ -15,30 +15,24 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Captain_Skarloc
-SD%Complete: 75
-SDComment: Missing adds, missing waypoints to move up to Thrall once spawned + speech before enter combat.
-SDCategory: Caverns of Time, Old Hillsbrad Foothills
-EndScriptData */
+/* Missing adds, missing waypoints to move up to Thrall once spawned + speech before enter combat */
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "ScriptedCreature.h"
#include "old_hillsbrad.h"
-/*######################
-# boss_captain_skarloc #
-#######################*/
-
-enum CaptainSkarloc
+enum SkarlocTexts
{
SAY_ENTER = 0,
SAY_TAUNT1 = 1,
SAY_TAUNT2 = 2,
SAY_SLAY = 3,
SAY_DEATH = 4,
+};
+enum SkarlocSpells
+{
SPELL_HOLY_LIGHT = 29427,
SPELL_CLEANSE = 29380,
SPELL_HAMMER_OF_JUSTICE = 13005,
@@ -47,34 +41,24 @@ enum CaptainSkarloc
SPELL_CONSECRATION = 38385
};
-struct boss_captain_skarloc : public BossAI
+enum SkarlocEvents
{
- boss_captain_skarloc(Creature* creature) : BossAI(creature, DATA_CAPTAIN_SKARLOC)
- {
- Initialize();
- }
-
- void Initialize()
- {
- Holy_Light_Timer = urand(20000, 30000);
- Cleanse_Timer = 10000;
- HammerOfJustice_Timer = urand(20000, 35000);
- HolyShield_Timer = 240000;
- DevotionAura_Timer = 3000;
- Consecration_Timer = 8000;
- }
+ EVENT_HOLY_LIGHT = 1,
+ EVENT_CLEANSE,
+ EVENT_HAMMER_OF_JUSTICE,
+ EVENT_HOLY_SHIELD,
+ EVENT_DEVOTION_AURA,
+ EVENT_CONSECRATION
+};
- uint32 Holy_Light_Timer;
- uint32 Cleanse_Timer;
- uint32 HammerOfJustice_Timer;
- uint32 HolyShield_Timer;
- uint32 DevotionAura_Timer;
- uint32 Consecration_Timer;
+// 17862 - Captain Skarloc
+struct boss_captain_skarloc : public BossAI
+{
+ boss_captain_skarloc(Creature* creature) : BossAI(creature, DATA_CAPTAIN_SKARLOC) { }
void Reset() override
{
BossAI::Reset();
- Initialize();
}
void JustEngagedWith(Unit* who) override
@@ -83,6 +67,12 @@ struct boss_captain_skarloc : public BossAI
//This is not correct. Should taunt Thrall before engage in combat
Talk(SAY_TAUNT1);
Talk(SAY_TAUNT2);
+ events.ScheduleEvent(EVENT_HOLY_LIGHT, 20s, 30s);
+ events.ScheduleEvent(EVENT_CLEANSE, 10s);
+ events.ScheduleEvent(EVENT_HAMMER_OF_JUSTICE, 20s, 35s);
+ events.ScheduleEvent(EVENT_HOLY_SHIELD, 240s);
+ events.ScheduleEvent(EVENT_DEVOTION_AURA, 3s);
+ events.ScheduleEvent(EVENT_CONSECRATION, 8s);
}
void KilledUnit(Unit* /*victim*/) override
@@ -100,51 +90,49 @@ struct boss_captain_skarloc : public BossAI
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
- //Holy_Light
- if (Holy_Light_Timer <= diff)
- {
- DoCast(me, SPELL_HOLY_LIGHT);
- Holy_Light_Timer = 30000;
- } else Holy_Light_Timer -= diff;
-
- //Cleanse
- if (Cleanse_Timer <= diff)
- {
- DoCast(me, SPELL_CLEANSE);
- Cleanse_Timer = 10000;
- } else Cleanse_Timer -= diff;
-
- //Hammer of Justice
- if (HammerOfJustice_Timer <= diff)
- {
- DoCastVictim(SPELL_HAMMER_OF_JUSTICE);
- HammerOfJustice_Timer = 60000;
- } else HammerOfJustice_Timer -= diff;
-
- //Holy Shield
- if (HolyShield_Timer <= diff)
- {
- DoCast(me, SPELL_HOLY_SHIELD);
- HolyShield_Timer = 240000;
- } else HolyShield_Timer -= diff;
+ events.Update(diff);
- //Devotion_Aura
- if (DevotionAura_Timer <= diff)
- {
- DoCast(me, SPELL_DEVOTION_AURA);
- DevotionAura_Timer = urand(45000, 55000);
- } else DevotionAura_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Consecration
- if (Consecration_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- //DoCastVictim(SPELL_CONSECRATION);
- Consecration_Timer = urand(5000, 10000);
- } else Consecration_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_HOLY_LIGHT:
+ DoCastSelf(SPELL_HOLY_LIGHT);
+ events.Repeat(30s);
+ break;
+ case EVENT_CLEANSE:
+ DoCastSelf(SPELL_CLEANSE);
+ events.Repeat(10s);
+ break;
+ case EVENT_HAMMER_OF_JUSTICE:
+ DoCastVictim(SPELL_HAMMER_OF_JUSTICE);
+ events.Repeat(60s);
+ break;
+ case EVENT_HOLY_SHIELD:
+ DoCastSelf(SPELL_HOLY_SHIELD);
+ events.Repeat(240s);
+ break;
+ case EVENT_DEVOTION_AURA:
+ DoCastSelf(SPELL_DEVOTION_AURA);
+ events.Repeat(45s, 55s);
+ break;
+ case EVENT_CONSECRATION:
+ DoCastSelf(SPELL_CONSECRATION);
+ events.Repeat(5s, 10s);
+ break;
+ default:
+ break;
+ }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
index 25c5b0345f0..67a5aac1491 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
@@ -15,66 +15,56 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Epoch_Hunter
-SD%Complete: 60
-SDComment: Missing spawns pre-event, missing speech to be coordinated with rest of escort event.
-SDCategory: Caverns of Time, Old Hillsbrad Foothills
-EndScriptData */
+/* Missing spawns pre-event, missing speech to be coordinated with rest of escort event */
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "old_hillsbrad.h"
#include "ScriptedCreature.h"
-/*###################
-# boss_epoch_hunter #
-####################*/
-
-enum EpochHunter
+enum EpochHunterTexts
{
SAY_ENTER = 0,
SAY_AGGRO = 1,
SAY_SLAY = 2,
SAY_BREATH = 3,
- SAY_DEATH = 4,
+ SAY_DEATH = 4
+};
+enum EpochHunterSpells
+{
SPELL_SAND_BREATH = 31914,
SPELL_IMPENDING_DEATH = 31916,
SPELL_MAGIC_DISRUPTION_AURA = 33834,
SPELL_WING_BUFFET = 31475
};
-struct boss_epoch_hunter : public BossAI
+enum EpochHunterEvents
{
- boss_epoch_hunter(Creature* creature) : BossAI(creature, DATA_EPOCH_HUNTER)
- {
- Initialize();
- }
-
- void Initialize()
- {
- SandBreath_Timer = urand(8000, 16000);
- ImpendingDeath_Timer = urand(25000, 30000);
- WingBuffet_Timer = 35000;
- Mda_Timer = 40000;
- }
+ EVENT_SAND_BREATH = 1,
+ EVENT_IMPENDING_DEATH,
+ EVENT_MAGIC_DISRUPTION_AURA,
+ EVENT_WING_BUFFET
+};
- uint32 SandBreath_Timer;
- uint32 ImpendingDeath_Timer;
- uint32 WingBuffet_Timer;
- uint32 Mda_Timer;
+// 18096 - Epoch Hunter
+struct boss_epoch_hunter : public BossAI
+{
+ boss_epoch_hunter(Creature* creature) : BossAI(creature, DATA_EPOCH_HUNTER) { }
void Reset() override
{
BossAI::Reset();
- Initialize();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_SAND_BREATH, 8s, 16s);
+ events.ScheduleEvent(EVENT_IMPENDING_DEATH, 25s, 30s);
+ events.ScheduleEvent(EVENT_MAGIC_DISRUPTION_AURA, 40s);
+ events.ScheduleEvent(EVENT_WING_BUFFET, 35s);
}
void KilledUnit(Unit* /*victim*/) override
@@ -92,41 +82,42 @@ struct boss_epoch_hunter : public BossAI
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
- //Sand Breath
- if (SandBreath_Timer <= diff)
- {
- if (me->IsNonMeleeSpellCast(false))
- me->InterruptNonMeleeSpells(false);
-
- DoCastVictim(SPELL_SAND_BREATH);
-
- Talk(SAY_BREATH);
+ events.Update(diff);
- SandBreath_Timer = urand(10000, 20000);
- } else SandBreath_Timer -= diff;
-
- if (ImpendingDeath_Timer <= diff)
- {
- DoCastVictim(SPELL_IMPENDING_DEATH);
- ImpendingDeath_Timer = 25000 + rand32() % 5000;
- } else ImpendingDeath_Timer -= diff;
-
- if (WingBuffet_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- DoCast(target, SPELL_WING_BUFFET);
- WingBuffet_Timer = 25000 + rand32() % 10000;
- } else WingBuffet_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (Mda_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCast(me, SPELL_MAGIC_DISRUPTION_AURA);
- Mda_Timer = 15000;
- } else Mda_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_SAND_BREATH:
+ DoCastVictim(SPELL_SAND_BREATH);
+ Talk(SAY_BREATH);
+ events.Repeat(10s, 20s);
+ break;
+ case EVENT_IMPENDING_DEATH:
+ DoCastVictim(SPELL_IMPENDING_DEATH);
+ events.Repeat(25s, 30s);
+ break;
+ case EVENT_MAGIC_DISRUPTION_AURA:
+ DoCastSelf(SPELL_MAGIC_DISRUPTION_AURA);
+ events.Repeat(15s);
+ break;
+ case EVENT_WING_BUFFET:
+ DoCastSelf(SPELL_WING_BUFFET);
+ events.Repeat(25s, 35s);
+ break;
+ default:
+ break;
+ }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
index 8858d954fcb..2be921ef73f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
@@ -15,12 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Luetenant_Drake
-SD%Complete: 70
-SDComment: Missing proper code for patrolling area after being spawned. Script for GO (barrels) quest 10283
-SDCategory: Caverns of Time, Old Hillsbrad Foothills
-EndScriptData */
+/* Missing proper code for patrolling area after being spawned */
#include "ScriptMgr.h"
#include "GameObject.h"
@@ -30,11 +25,7 @@ EndScriptData */
#include "old_hillsbrad.h"
#include "ScriptedEscortAI.h"
-/*######
-## boss_lieutenant_drake
-######*/
-
-enum LieutenantDrake
+enum DrakeTexts
{
SAY_ENTER = 0,
SAY_AGGRO = 1,
@@ -42,13 +33,24 @@ enum LieutenantDrake
SAY_MORTAL = 3,
SAY_SHOUT = 4,
SAY_DEATH = 5,
+};
+enum DrakeSpells
+{
SPELL_WHIRLWIND = 31909,
SPELL_HAMSTRING = 9080,
SPELL_MORTAL_STRIKE = 31911,
SPELL_FRIGHTENING_SHOUT = 33789
};
+enum DrakeEvents
+{
+ EVENT_WHIRLWIND = 1,
+ EVENT_HAMSTRING,
+ EVENT_MORTAL_STRIKE,
+ EVENT_FRIGHTENING_SHOUT
+};
+
Position const DrakeWP[]=
{
{ 2125.84f, 88.2535f, 54.8830f },
@@ -72,6 +74,7 @@ Position const DrakeWP[]=
{ 2128.20f, 70.9763f, 64.4221f }
};
+// 17848 - Lieutenant Drake
struct boss_lieutenant_drake : public BossAI
{
boss_lieutenant_drake(Creature* creature) : BossAI(creature, DATA_LIEUTENANT_DRAKE)
@@ -83,21 +86,11 @@ struct boss_lieutenant_drake : public BossAI
{
CanPatrol = true;
wpId = 0;
-
- Whirlwind_Timer = 20000;
- Fear_Timer = 30000;
- MortalStrike_Timer = 45000;
- ExplodingShout_Timer = 25000;
}
bool CanPatrol;
uint32 wpId;
- uint32 Whirlwind_Timer;
- uint32 Fear_Timer;
- uint32 MortalStrike_Timer;
- uint32 ExplodingShout_Timer;
-
void Reset() override
{
BossAI::Reset();
@@ -108,6 +101,10 @@ struct boss_lieutenant_drake : public BossAI
{
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 20s);
+ events.ScheduleEvent(EVENT_HAMSTRING, 30s);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 45s);
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 25s);
}
void KilledUnit(Unit* /*victim*/) override
@@ -130,41 +127,48 @@ struct boss_lieutenant_drake : public BossAI
++wpId;
}
- //Return since we have no target
if (!UpdateVictim())
return;
- //Whirlwind
- if (Whirlwind_Timer <= diff)
- {
- DoCastVictim(SPELL_WHIRLWIND);
- Whirlwind_Timer = 20000 + rand32() % 5000;
- } else Whirlwind_Timer -= diff;
+ events.Update(diff);
- //Fear
- if (Fear_Timer <= diff)
- {
- Talk(SAY_SHOUT);
- DoCastVictim(SPELL_FRIGHTENING_SHOUT);
- Fear_Timer = 25000 + rand32() % 10000;
- } else Fear_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Mortal Strike
- if (MortalStrike_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- Talk(SAY_MORTAL);
- DoCastVictim(SPELL_MORTAL_STRIKE);
- MortalStrike_Timer = 20000 + rand32() % 10000;
- } else MortalStrike_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_WHIRLWIND:
+ DoCastSelf(SPELL_WHIRLWIND);
+ events.Repeat(20s, 25s);
+ break;
+ case EVENT_HAMSTRING:
+ DoCastVictim(SPELL_HAMSTRING);
+ events.Repeat(15s, 20s);
+ break;
+ case EVENT_MORTAL_STRIKE:
+ Talk(SAY_MORTAL);
+ DoCastVictim(SPELL_MORTAL_STRIKE);
+ events.Repeat(20s, 30s);
+ break;
+ case EVENT_FRIGHTENING_SHOUT:
+ Talk(SAY_SHOUT);
+ DoCastVictim(SPELL_FRIGHTENING_SHOUT);
+ events.Repeat(25s, 35s);
+ break;
+ default:
+ break;
+ }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
DoMeleeAttackIfReady();
}
};
-/*######
-## go_barrel_old_hillsbrad
-######*/
-
struct go_barrel_old_hillsbrad : public GameObjectAI
{
go_barrel_old_hillsbrad(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }