aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArtamedes <ownedned123@gmail.com>2020-08-10 14:50:25 -0400
committerGitHub <noreply@github.com>2020-08-10 20:50:25 +0200
commite85bd8fd39b6ce1f38d31a364d99e942b746aae8 (patch)
tree4602ead88000c7a151201cbb86a1f33dc96c5b70 /src
parent7e4fdf052266ceb8859fbcf769d9b70250baec40 (diff)
Scripts/Stockades: Cleanup the scripts (#23524)
* Scripts/Stockades: Cleanup the scripts Scripts looked ugly before, now they are less ugly Move Mortimer Moloch and Warden Thelwater to use TaskScheduler rather than EventMap Use new script registers Cleanup some other code Co-authored-by: Carbenium <carbenium@outlook.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/TheStockade/boss_hogger.cpp185
-rw-r--r--src/server/scripts/EasternKingdoms/TheStockade/boss_lord_overheat.cpp105
-rw-r--r--src/server/scripts/EasternKingdoms/TheStockade/boss_randolph_moloch.cpp243
-rw-r--r--src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/TheStockade/the_stockade.h2
5 files changed, 233 insertions, 304 deletions
diff --git a/src/server/scripts/EasternKingdoms/TheStockade/boss_hogger.cpp b/src/server/scripts/EasternKingdoms/TheStockade/boss_hogger.cpp
index 0008be44019..e739e50323b 100644
--- a/src/server/scripts/EasternKingdoms/TheStockade/boss_hogger.cpp
+++ b/src/server/scripts/EasternKingdoms/TheStockade/boss_hogger.cpp
@@ -15,10 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "MotionMaster.h"
#include "ScriptedCreature.h"
+#include "ScriptMgr.h"
#include "the_stockade.h"
enum Says
@@ -29,7 +29,7 @@ enum Says
SAY_WARDEN_1 = 0, // Yell - This ends here, Hogger!
SAY_WARDEN_2 = 1, // Say - He's...he's dead?
- SAY_WARDEN_3 = 2 // Say - It's simply too good to be true. You couldn't have killed him so easily!
+ SAY_WARDEN_3 = 2 // Say - It's simply too good to be true. You couldn't have killed him so easily!
};
enum Spells
@@ -51,142 +51,121 @@ enum Events
enum Points
{
- POINT_FINISH = 0
+ POINT_FINISH = 1
};
-Position const wardenthelwatermovepos = { 152.019f, 106.198f, -35.1896f, 1.082104f };
-Position const wardenthelwaterpos = { 138.369f, 78.2932f, -33.85627f, 1.082104f };
+Position const wardenThelwaterMovePoint = { 152.019f, 106.198f, -35.1896f, 1.082104f };
+Position const wardenThelwaterSpawnPosition = { 138.369f, 78.2932f, -33.85627f, 1.082104f };
-class boss_hogger : public CreatureScript
+// Hogger - 46254
+struct boss_hogger : public BossAI
{
-public:
- boss_hogger() : CreatureScript("boss_hogger") { }
+ boss_hogger(Creature* creature) : BossAI(creature, DATA_HOGGER), _hasEnraged(false) { }
- struct boss_hoggerAI : public BossAI
+ void Reset() override
{
- boss_hoggerAI(Creature* creature) : BossAI(creature, DATA_HOGGER), _hasEnraged(false) { }
+ _hasEnraged = false;
+ }
- void EnterCombat(Unit* /*who*/) override
- {
- _EnterCombat();
- Talk(SAY_PULL);
- events.ScheduleEvent(EVENT_VICIOUS_SLICE, Seconds(3), Seconds(4));
- events.ScheduleEvent(EVENT_MADDENING_CALL, Seconds(1), Seconds(2));
- }
+ void EnterCombat(Unit* who) override
+ {
+ BossAI::EnterCombat(who);
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
- _JustDied();
- me->SummonCreature(NPC_WARDEN_THELWATER, wardenthelwaterpos);
- }
+ Talk(SAY_PULL);
- void JustSummoned(Creature* summon) override
- {
- BossAI::JustSummoned(summon);
- if (summon->GetEntry() == NPC_WARDEN_THELWATER)
- summon->GetMotionMaster()->MovePoint(POINT_FINISH, wardenthelwatermovepos);
- }
+ events.ScheduleEvent(EVENT_VICIOUS_SLICE, 3s, 4s);
+ events.ScheduleEvent(EVENT_MADDENING_CALL, 1s, 2s);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void JustDied(Unit* killer) override
+ {
+ BossAI::JustDied(killer);
- events.Update(diff);
+ Talk(SAY_DEATH);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ me->SummonCreature(NPC_WARDEN_THELWATER, wardenThelwaterSpawnPosition);
+ }
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_VICIOUS_SLICE:
- DoCastVictim(SPELL_VICIOUS_SLICE);
- events.Repeat(Seconds(10), Seconds(14));
- break;
- case EVENT_MADDENING_CALL:
- DoCast(SPELL_MADDENING_CALL);
- events.Repeat(Seconds(15), Seconds(20));
- break;
- }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
- }
+ void JustSummoned(Creature* summon) override
+ {
+ BossAI::JustSummoned(summon);
- void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ if (summon->GetEntry() == NPC_WARDEN_THELWATER)
+ summon->GetMotionMaster()->MovePoint(POINT_FINISH, wardenThelwaterMovePoint);
+ }
+
+ void ExecuteEvent(uint32 eventId) override
+ {
+ switch (eventId)
{
- if (me->HealthBelowPctDamaged(30, damage) && !_hasEnraged)
- {
- _hasEnraged = true;
- Talk(SAY_ENRAGE);
- DoCastSelf(SPELL_ENRAGE);
- }
+ case EVENT_VICIOUS_SLICE:
+ DoCastVictim(SPELL_VICIOUS_SLICE);
+ events.Repeat(10s, 14s);
+ break;
+ case EVENT_MADDENING_CALL:
+ DoCast(SPELL_MADDENING_CALL);
+ events.Repeat(15s, 20s);
+ break;
+ default:
+ break;
}
+ }
- private:
- bool _hasEnraged;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
- return GetStormwindStockadeAI<boss_hoggerAI>(creature);
+ if (me->HealthBelowPctDamaged(30, damage) && !_hasEnraged)
+ {
+ _hasEnraged = true;
+
+ Talk(SAY_ENRAGE);
+ DoCastSelf(SPELL_ENRAGE);
+ }
}
+
+private:
+ bool _hasEnraged;
};
-class npc_warden_thelwater : public CreatureScript
+// Warden Thelwater - 46409
+struct npc_warden_thelwater : public ScriptedAI
{
-public:
- npc_warden_thelwater() : CreatureScript("npc_warden_thelwater") {}
+ npc_warden_thelwater(Creature* creature) : ScriptedAI(creature) { }
- struct npc_warden_thelwaterAI : public ScriptedAI
+ void MovementInform(uint32 type, uint32 id) override
{
- npc_warden_thelwaterAI(Creature* creature) : ScriptedAI(creature) {}
+ if (type != POINT_MOTION_TYPE)
+ return;
- void MovementInform(uint32 type, uint32 id) override
+ if (id == POINT_FINISH)
{
- if (type == POINT_MOTION_TYPE && id == POINT_FINISH)
- _events.ScheduleEvent(EVENT_SAY_WARDEN_1, Seconds(1));
- }
+ scheduler.Schedule(1s, [this](TaskContext /*context*/)
+ {
+ Talk(SAY_WARDEN_1);
+ });
- void UpdateAI(uint32 diff) override
- {
- _events.Update(diff);
+ scheduler.Schedule(5s, [this](TaskContext /*context*/)
+ {
+ Talk(SAY_WARDEN_2);
+ });
- while (uint32 eventId = _events.ExecuteEvent())
+ scheduler.Schedule(8s, [this](TaskContext /*context*/)
{
- switch (eventId)
- {
- case EVENT_SAY_WARDEN_1:
- Talk(SAY_WARDEN_1);
- _events.ScheduleEvent(EVENT_SAY_WARDEN_2, Seconds(4));
- break;
- case EVENT_SAY_WARDEN_2:
- Talk(SAY_WARDEN_2);
- _events.ScheduleEvent(EVENT_SAY_WARDEN_3, Seconds(3));
- break;
- case EVENT_SAY_WARDEN_3:
- Talk(SAY_WARDEN_3);
- break;
- }
- }
+ Talk(SAY_WARDEN_3);
+ });
}
- private:
- EventMap _events;
- };
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void UpdateAI(const uint32 diff) override
{
- return GetStormwindStockadeAI<npc_warden_thelwaterAI>(creature);
+ scheduler.Update(diff);
}
+
+private:
+ TaskScheduler scheduler;
};
void AddSC_boss_hogger()
{
- new boss_hogger();
- new npc_warden_thelwater();
+ RegisterStormwindStockadesAI(boss_hogger);
+ RegisterStormwindStockadesAI(npc_warden_thelwater);
}
diff --git a/src/server/scripts/EasternKingdoms/TheStockade/boss_lord_overheat.cpp b/src/server/scripts/EasternKingdoms/TheStockade/boss_lord_overheat.cpp
index ff424179567..19bd7819bb7 100644
--- a/src/server/scripts/EasternKingdoms/TheStockade/boss_lord_overheat.cpp
+++ b/src/server/scripts/EasternKingdoms/TheStockade/boss_lord_overheat.cpp
@@ -15,15 +15,15 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "ScriptMgr.h"
#include "the_stockade.h"
enum Spells
{
- SPELL_FIREBALL = 12466, //starts 1-2 secs from pull
- SPELL_OVERHEAT = 86633, //probably cast every 10 secs, need to confirm.
- SPELL_RAIN_OF_FIRE = 86636 //probably cast every 10 secs, need to confirm
+ SPELL_FIREBALL = 12466, // starts 1-2 secs from pull
+ SPELL_OVERHEAT = 86633, // probably cast every 10 secs, need to confirm.
+ SPELL_RAIN_OF_FIRE = 86636 // probably cast every 10 secs, need to confirm
};
enum Events
@@ -35,80 +35,57 @@ enum Events
enum Says
{
- SAY_PULL = 0, //Yell: ALL MUST BURN!
- SAY_DEATH = 1 //Yell: FIRE... EXTINGUISHED!
+ SAY_PULL = 0, // Yell: ALL MUST BURN!
+ SAY_DEATH = 1 // Yell: FIRE... EXTINGUISHED!
};
-class boss_lord_overheat : public CreatureScript
+// Lord Overheat - 46264
+struct boss_lord_overheat : public BossAI
{
-public:
- boss_lord_overheat() : CreatureScript("boss_lord_overheat") {}
+ boss_lord_overheat(Creature* creature) : BossAI(creature, DATA_LORD_OVERHEAT) { }
- struct boss_lord_overheatAI : public BossAI
+ void EnterCombat(Unit* who) override
{
- boss_lord_overheatAI(Creature* creature) : BossAI(creature, DATA_LORD_OVERHEAT) { }
-
- void EnterCombat(Unit* /*who*/) override
- {
- _EnterCombat();
- Talk(SAY_PULL);
- events.ScheduleEvent(EVENT_FIREBALL, Seconds(2));
- events.ScheduleEvent(EVENT_OVERHEAT, Seconds(9), Seconds(11));
- events.ScheduleEvent(EVENT_RAIN_OF_FIRE, Seconds(10), Seconds(13));
- }
+ BossAI::EnterCombat(who);
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
- _JustDied();
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ Talk(SAY_PULL);
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_FIREBALL:
- DoCastVictim(SPELL_FIREBALL);
- events.Repeat(Seconds(2));
- break;
- case EVENT_OVERHEAT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
- DoCast(target, SPELL_OVERHEAT);
- events.Repeat(Seconds(9), Seconds(10));
- break;
- case EVENT_RAIN_OF_FIRE:
- DoCastAOE(SPELL_RAIN_OF_FIRE);
- events.Repeat(Seconds(15), Seconds(20));
- break;
- default:
- break;
- }
+ events.ScheduleEvent(EVENT_FIREBALL, 2s);
+ events.ScheduleEvent(EVENT_OVERHEAT, 9s, 11s);
+ events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 10s, 13s);
+ }
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
+ void JustDied(Unit* killer) override
+ {
+ BossAI::JustDied(killer);
- DoMeleeAttackIfReady();
- }
- };
+ Talk(SAY_DEATH);
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void ExecuteEvent(uint32 eventId) override
{
- return GetStormwindStockadeAI<boss_lord_overheatAI>(creature);
+ switch (eventId)
+ {
+ case EVENT_FIREBALL:
+ DoCastVictim(SPELL_FIREBALL);
+ events.Repeat(2s);
+ break;
+ case EVENT_OVERHEAT:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_OVERHEAT);
+ events.Repeat(9s, 10s);
+ break;
+ case EVENT_RAIN_OF_FIRE:
+ DoCastAOE(SPELL_RAIN_OF_FIRE);
+ events.Repeat(15s, 20s);
+ break;
+ default:
+ break;
+ }
}
};
void AddSC_boss_lord_overheat()
{
- new boss_lord_overheat();
+ RegisterStormwindStockadesAI(boss_lord_overheat);
}
diff --git a/src/server/scripts/EasternKingdoms/TheStockade/boss_randolph_moloch.cpp b/src/server/scripts/EasternKingdoms/TheStockade/boss_randolph_moloch.cpp
index 41aad65ecf3..4083febc219 100644
--- a/src/server/scripts/EasternKingdoms/TheStockade/boss_randolph_moloch.cpp
+++ b/src/server/scripts/EasternKingdoms/TheStockade/boss_randolph_moloch.cpp
@@ -15,17 +15,17 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ScriptMgr.h"
#include "MotionMaster.h"
#include "ScriptedCreature.h"
+#include "ScriptMgr.h"
#include "the_stockade.h"
enum Spells
{
- SPELL_WILDLY_STABBING = 86726,
- SPELL_SWEEP = 86729,
- SPELL_VANISH = 55964,
- SPELL_SHADOWSTEP = 55966
+ SPELL_WILDLY_STABBING = 86726,
+ SPELL_SWEEP = 86729,
+ SPELL_VANISH = 55964,
+ SPELL_SHADOWSTEP = 55966
};
enum Events
@@ -42,182 +42,153 @@ enum Events
enum Says
{
- SAY_PULL = 0, //Allow me to introduce myself. I am Randolph Moloch and I will be killing you all today.
+ SAY_PULL = 0, // Allow me to introduce myself. I am Randolph Moloch and I will be killing you all today.
SAY_VANISH = 1, // Area Trigger: %s vanishes!
- SAY_DEATH = 2, //My epic schemes, my great plans! Gone!
+ SAY_DEATH = 2, // My epic schemes, my great plans! Gone!
MORTIMER_MOLOCH_DEATH = 0, // %s collapses from a heart attack!
- MORTIMER_MOLOCH_EMOTE = 1, //Egad! My sophisticated heart!
+ MORTIMER_MOLOCH_EMOTE = 1, // Egad! My sophisticated heart!
};
enum Points
{
- POINT_FINISH = 0,
+ POINT_FINISH = 1,
};
Position const mortimerMolochPos = { 145.5811f, 0.7059f, -25.606f, 6.2f };
-class boss_randolph_moloch : public CreatureScript
+// Randolph Moloch - 46383
+struct boss_randolph_moloch : public BossAI
{
-public:
- boss_randolph_moloch() : CreatureScript("boss_randolph_moloch") {}
+ boss_randolph_moloch(Creature* creature) : BossAI(creature, DATA_RANDOLPH_MOLOCH), _firstVanish(false),
+ _secondVanish(false) { }
- struct boss_randolph_molochAI : public BossAI
+ void Reset() override
{
- boss_randolph_molochAI(Creature* creature) : BossAI(creature, DATA_RANDOLPH_MOLOCH)
- {
- firstVanish = false;
- secondVanish = false;
- }
+ _firstVanish = false;
+ _secondVanish = false;
+ }
+ void EnterCombat(Unit* who) override
+ {
+ BossAI::EnterCombat(who);
- void EnterCombat(Unit* /*who*/) override
- {
- _EnterCombat();
- Talk(SAY_PULL);
- events.ScheduleEvent(EVENT_WILDLY_STABBING, Seconds(4), Seconds(5));
- events.ScheduleEvent(EVENT_SWEEP, Seconds(2), Seconds(3));
- }
+ Talk(SAY_PULL);
- void JustSummoned(Creature* summon) override
- {
- BossAI::JustSummoned(summon);
- if (summon->GetEntry() == NPC_MORTIMER_MOLOCH)
- {
- summon->SetWalk(true);
- summon->GetMotionMaster()->MovePoint(POINT_FINISH, me->GetPosition());
- }
- }
+ events.ScheduleEvent(EVENT_WILDLY_STABBING, 4s, 5s);
+ events.ScheduleEvent(EVENT_SWEEP, 2s, 3s);
+ }
+
+ void JustSummoned(Creature* summon) override
+ {
+ BossAI::JustSummoned(summon);
- void JustDied(Unit* /*killer*/) override
+ if (summon->GetEntry() == NPC_MORTIMER_MOLOCH)
{
- Talk(SAY_DEATH);
- _JustDied();
- me->SummonCreature(NPC_MORTIMER_MOLOCH, mortimerMolochPos);
+ summon->SetWalk(true);
+ summon->GetMotionMaster()->MovePoint(POINT_FINISH, me->GetPosition());
}
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void JustDied(Unit* killer) override
+ {
+ BossAI::JustDied(killer);
- events.Update(diff);
+ Talk(SAY_DEATH);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ me->SummonCreature(NPC_MORTIMER_MOLOCH, mortimerMolochPos);
+ }
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_WILDLY_STABBING:
- DoCastVictim(SPELL_WILDLY_STABBING);
- events.Repeat(Seconds(8), Seconds(12));
- break;
- case EVENT_SWEEP:
- DoCastVictim(SPELL_SWEEP);
- events.ScheduleEvent(EVENT_SWEEP, Seconds(6), Seconds(7));
- break;
- case EVENT_VANISH:
- Talk(SAY_VANISH);
- me->RemoveAllAuras();
- DoCastSelf(SPELL_VANISH);
- me->SetReactState(REACT_PASSIVE);
- me->SetInCombatState(true); // Prevents the boss from resetting
- events.ScheduleEvent(EVENT_JUST_VANISHED, Seconds(2));
- break;
- case EVENT_JUST_VANISHED:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
- DoCast(target, SPELL_SHADOWSTEP, true);
- me->SetReactState(REACT_AGGRESSIVE);
- break;
- default:
- break;
- }
- }
-
- DoMeleeAttackIfReady();
+ void ExecuteEvent(uint32 eventId) override
+ {
+ switch (eventId)
+ {
+ case EVENT_WILDLY_STABBING:
+ DoCastVictim(SPELL_WILDLY_STABBING);
+ events.Repeat(8s, 12s);
+ break;
+ case EVENT_SWEEP:
+ DoCastVictim(SPELL_SWEEP);
+ events.ScheduleEvent(EVENT_SWEEP, 6s, 7s);
+ break;
+ case EVENT_VANISH:
+ Talk(SAY_VANISH);
+ me->RemoveAllAuras();
+ DoCastSelf(SPELL_VANISH);
+ me->SetReactState(REACT_PASSIVE);
+ me->SetInCombatState(true); // Prevents the boss from resetting
+ events.ScheduleEvent(EVENT_JUST_VANISHED, 2s);
+ break;
+ case EVENT_JUST_VANISHED:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_SHADOWSTEP, true);
+ me->SetReactState(REACT_AGGRESSIVE);
+ break;
+ default:
+ break;
}
+ }
- void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (me->HealthBelowPctDamaged(71, damage) && me->HealthAbovePct(59) && !_firstVanish)
{
- if (me->HealthBelowPctDamaged(71, damage) && me->HealthAbovePct(59) && !firstVanish)
- {
- firstVanish = true;
- events.ScheduleEvent(EVENT_VANISH, Seconds(1));
- }
-
- if (me->HealthBelowPctDamaged(41, damage) && me->HealthAbovePct(29) && !secondVanish)
- {
- secondVanish = true;
- events.ScheduleEvent(EVENT_VANISH, Seconds(1));
- }
+ _firstVanish = true;
+ events.ScheduleEvent(EVENT_VANISH, 1s);
}
- private:
- bool firstVanish, secondVanish;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetStormwindStockadeAI<boss_randolph_molochAI>(creature);
+ if (me->HealthBelowPctDamaged(41, damage) && me->HealthAbovePct(29) && !_secondVanish)
+ {
+ _secondVanish = true;
+ events.ScheduleEvent(EVENT_VANISH, 1s);
+ }
}
+
+private:
+ bool _firstVanish;
+ bool _secondVanish;
};
-class npc_mortimer_moloch : public CreatureScript
+// Mortimer Moloch - 46482
+struct npc_mortimer_moloch : public ScriptedAI
{
-public:
- npc_mortimer_moloch() : CreatureScript("npc_mortimer_moloch") {}
+ npc_mortimer_moloch(Creature* creature) : ScriptedAI(creature) { }
- struct npc_mortimer_molochAI : public ScriptedAI
+ void Reset() override
{
- npc_mortimer_molochAI(Creature* creature) : ScriptedAI(creature) {}
-
- void Reset() override
- {
- me->SetReactState(REACT_PASSIVE);
- }
+ me->SetReactState(REACT_PASSIVE);
+ }
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == POINT_MOTION_TYPE)
- if(id == POINT_FINISH)
- _events.ScheduleEvent(EVENT_MORTIMER_MOLOCH_EMOTE, Seconds(4));
- }
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
- void UpdateAI(uint32 diff) override
+ if (id == POINT_FINISH)
{
- _events.Update(diff);
+ scheduler.Schedule(4s, [this](TaskContext /*context*/)
+ {
+ Talk(MORTIMER_MOLOCH_EMOTE);
+ });
- while (uint32 eventId = _events.ExecuteEvent())
+ scheduler.Schedule(7s, [this](TaskContext /*context*/)
{
- switch (eventId)
- {
- case EVENT_MORTIMER_MOLOCH_EMOTE:
- Talk(MORTIMER_MOLOCH_EMOTE);
- _events.ScheduleEvent(EVENT_MORTIMER_MOLOCH_DEATH, Seconds(3));
- break;
- case EVENT_MORTIMER_MOLOCH_DEATH:
- Talk(MORTIMER_MOLOCH_DEATH);
- me->KillSelf();
- break;
- default:
- break;
- }
- }
+ Talk(MORTIMER_MOLOCH_DEATH);
+ me->KillSelf();
+ });
}
+ }
- private:
- EventMap _events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
+ void UpdateAI(uint32 diff) override
{
- return GetStormwindStockadeAI<npc_mortimer_molochAI>(creature);
+ scheduler.Update(diff);
}
+
+private:
+ TaskScheduler scheduler;
};
void AddSC_boss_randolph_moloch()
{
- new boss_randolph_moloch();
- new npc_mortimer_moloch();
+ RegisterStormwindStockadesAI(boss_randolph_moloch);
+ RegisterStormwindStockadesAI(npc_mortimer_moloch);
}
diff --git a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp
index fed0997e255..38c3846fa75 100644
--- a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp
+++ b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp
@@ -15,8 +15,8 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ScriptMgr.h"
#include "InstanceScript.h"
+#include "ScriptMgr.h"
#include "the_stockade.h"
class instance_the_stockade : public InstanceMapScript
diff --git a/src/server/scripts/EasternKingdoms/TheStockade/the_stockade.h b/src/server/scripts/EasternKingdoms/TheStockade/the_stockade.h
index ead9875524f..ede0b8fdc56 100644
--- a/src/server/scripts/EasternKingdoms/TheStockade/the_stockade.h
+++ b/src/server/scripts/EasternKingdoms/TheStockade/the_stockade.h
@@ -47,4 +47,6 @@ inline AI* GetStormwindStockadeAI(Creature* creature)
return GetInstanceAI<AI>(creature, StormwindStockadeScriptName);
}
+#define RegisterStormwindStockadesAI(AI) RegisterCreatureAIWithFactory(AI, GetStormwindStockadeAI)
+
#endif