diff options
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()) { } |
