From be622fa72095095817c4bf8eb34e2d0d9d639961 Mon Sep 17 00:00:00 2001 From: Eddy Vega <61223313+Si1ker@users.noreply.github.com> Date: Sun, 28 May 2023 13:30:30 -0600 Subject: [PATCH] refactor(Scripts/CavernsOfTime): Mass struct/model update (#16268) init --- .../boss_captain_skarloc.cpp | 298 +++++++++--------- .../boss_epoch_hunter.cpp | 159 +++++----- .../boss_lieutenant_drake.cpp | 256 ++++++++------- .../EscapeFromDurnholdeKeep/old_hillsbrad.h | 5 + .../TheBlackMorass/boss_aeonus.cpp | 7 +- .../TheBlackMorass/boss_chrono_lord_deja.cpp | 10 +- .../TheBlackMorass/boss_temporus.cpp | 10 +- 7 files changed, 369 insertions(+), 376 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 daef75def..8cfe6d314 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp @@ -19,29 +19,27 @@ #include "ScriptedCreature.h" #include "old_hillsbrad.h" -enum CaptainSkarloc +enum Text { - SAY_ENTER = 0, - SAY_TAUNT = 1, - SAY_SLAY = 2, - SAY_DEATH = 3, + SAY_ENTER = 0, + SAY_TAUNT = 1, + SAY_SLAY = 2, + SAY_DEATH = 3 +}; - SPELL_HOLY_LIGHT = 29427, - SPELL_CLEANSE = 29380, - SPELL_HAMMER_OF_JUSTICE = 13005, - SPELL_HOLY_SHIELD = 31904, - SPELL_DEVOTION_AURA = 8258, - SPELL_CONSECRATION = 38385, +enum Spells +{ + SPELL_HOLY_LIGHT = 29427, + SPELL_CLEANSE = 29380, + SPELL_HAMMER_OF_JUSTICE = 13005, + SPELL_HOLY_SHIELD = 31904, + SPELL_DEVOTION_AURA = 8258, + SPELL_CONSECRATION = 38385 +}; - WAYPOINTS_COUNT = 4, - - EVENT_INITIAL_TALK = 1, - EVENT_START_FIGHT = 2, - EVENT_SPELL_CLEANSE = 10, - EVENT_SPELL_HAMMER = 11, - EVENT_SPELL_HOLY_LIGHT = 12, - EVENT_SPELL_HOLY_SHIELD = 13, - EVENT_SPELL_CONSECRATION = 14 +enum Misc +{ + WAYPOINTS_COUNT = 4 }; const Position startPath[WAYPOINTS_COUNT] = @@ -52,172 +50,174 @@ const Position startPath[WAYPOINTS_COUNT] = {2058.77f, 236.04f, 63.92f, 0.0f} }; -class boss_captain_skarloc : public CreatureScript +struct boss_captain_skarloc : public BossAI { -public: - boss_captain_skarloc() : CreatureScript("boss_captain_skarloc") { } - - CreatureAI* GetAI(Creature* creature) const override + boss_captain_skarloc(Creature* creature) : BossAI(creature, DATA_CAPTAIN_SKARLOC), summons(me) { - return GetOldHillsbradAI(creature); + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } - struct boss_captain_skarlocAI : public ScriptedAI + SummonList summons; + + void Reset() override { - boss_captain_skarlocAI(Creature* creature) : ScriptedAI(creature), summons(me) { } + _Reset(); + summons.DespawnAll(); + } - EventMap events; - SummonList summons; - - void Reset() override + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + if (Creature* thrall = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_THRALL_GUID))) { - events.Reset(); - summons.DespawnAll(); + thrall->AI()->JustSummoned(summon); } + summon->SetImmuneToAll(true); + if (summon->GetEntry() == NPC_SKARLOC_MOUNT) + return; - void JustSummoned(Creature* summon) override + if (summons.size() == 1) { - summons.Summon(summon); - if (Creature* thrall = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_THRALL_GUID))) - thrall->AI()->JustSummoned(summon); - summon->SetImmuneToAll(true); - - if (summon->GetEntry() == NPC_SKARLOC_MOUNT) - return; - - if (summons.size() == 1) - summon->GetMotionMaster()->MovePoint(0, 2060.788f, 237.301f, 63.999f); - else - summon->GetMotionMaster()->MovePoint(0, 2056.870f, 234.853f, 63.839f); + summon->GetMotionMaster()->MovePoint(0, 2060.788f, 237.301f, 63.999f); } - - void InitializeAI() override + else { - ScriptedAI::InitializeAI(); - - Movement::PointsArray path; - path.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); - for (uint8 i = 0; i < WAYPOINTS_COUNT; ++i) - path.push_back(G3D::Vector3(startPath[i].GetPositionX(), startPath[i].GetPositionY(), startPath[i].GetPositionZ())); - - me->GetMotionMaster()->MoveSplinePath(&path); - me->SetImmuneToAll(true); - me->Mount(SKARLOC_MOUNT_MODEL); + summon->GetMotionMaster()->MovePoint(0, 2056.870f, 234.853f, 63.839f); } + } - void MovementInform(uint32 type, uint32 id) override + void InitializeAI() override + { + ScriptedAI::InitializeAI(); + Movement::PointsArray path; + path.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); + for (uint8 i = 0; i < WAYPOINTS_COUNT; ++i) { - if (type != ESCORT_MOTION_TYPE) - return; + path.push_back(G3D::Vector3(startPath[i].GetPositionX(), startPath[i].GetPositionY(), startPath[i].GetPositionZ())); + } + me->GetMotionMaster()->MoveSplinePath(&path); + me->SetImmuneToAll(true); + me->Mount(SKARLOC_MOUNT_MODEL); + } - // Xinef: we can rely here on internal counting - if (id == 1) + void MovementInform(uint32 type, uint32 id) override + { + if (type != ESCORT_MOTION_TYPE) + return; + + // Xinef: we can rely here on internal counting + if (id == 1) + { + me->SummonCreature(NPC_DURNHOLDE_MAGE, 2038.549f, 273.303f, 63.420f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); + me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2032.810f, 269.416f, 63.561f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); + } + else if (id == 2) + { + me->Dismount(); + me->SetWalk(true); + for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) { - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2038.549f, 273.303f, 63.420f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2032.810f, 269.416f, 63.561f, 5.30f, TEMPSUMMON_MANUAL_DESPAWN); - } - else if (id == 2) - { - me->Dismount(); - me->SetWalk(true); - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) - if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) - summon->SetWalk(true); - if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN)) + if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) { - mount->SetImmuneToNPC(true); - mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + summon->SetWalk(true); } } - - if (me->movespline->Finalized()) + if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN)) { - Talk(SAY_ENTER, 500ms); + mount->SetImmuneToNPC(true); + mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } + } - me->m_Events.AddEventAtOffset([this]() + if (me->movespline->Finalized()) + { + Talk(SAY_ENTER, 500ms); + + me->m_Events.AddEventAtOffset([this]() + { + me->SetImmuneToAll(false); + me->SetInCombatWithZone(); + for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) { - me->SetImmuneToAll(false); - me->SetInCombatWithZone(); - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) + if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) { - if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) + if (summon->GetEntry() != NPC_SKARLOC_MOUNT) { - if (summon->GetEntry() != NPC_SKARLOC_MOUNT) - { - summon->SetImmuneToAll(false); - summon->SetInCombatWithZone(); - } + summon->SetImmuneToAll(false); + summon->SetInCombatWithZone(); } } - }, 8s); - } + } + }, 8s); } + } - void JustEngagedWith(Unit* /*who*/) override + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + DoCastSelf(SPELL_DEVOTION_AURA); + scheduler.Schedule(15s, [this](TaskContext context) { - me->CastSpell(me, SPELL_DEVOTION_AURA, true); - - events.ScheduleEvent(EVENT_SPELL_HOLY_LIGHT, 15000); - events.ScheduleEvent(EVENT_SPELL_CLEANSE, 6000); - events.ScheduleEvent(EVENT_SPELL_HAMMER, 20000); - events.ScheduleEvent(EVENT_SPELL_HOLY_SHIELD, 10000); - if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_CONSECRATION, 1000); - } - - void KilledUnit(Unit* /*victim*/) override + DoCastSelf(SPELL_HOLY_LIGHT); + context.Repeat(20s); + }).Schedule(6s, [this](TaskContext context) { - Talk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - me->GetInstanceScript()->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_SKARLOC_KILLED); - me->GetInstanceScript()->SetData(DATA_THRALL_ADD_FLAG, 0); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) + if (roll_chance_i(33)) { - case EVENT_SPELL_HOLY_LIGHT: - me->CastSpell(me, SPELL_HOLY_LIGHT, false); - events.ScheduleEvent(EVENT_SPELL_HOLY_LIGHT, 20000); - break; - case EVENT_SPELL_CLEANSE: - if (roll_chance_i(33)) - Talk(SAY_TAUNT); - me->CastSpell(me, SPELL_CLEANSE, false); - events.ScheduleEvent(EVENT_SPELL_CLEANSE, 10000); - break; - case EVENT_SPELL_HAMMER: - me->CastSpell(me->GetVictim(), SPELL_HAMMER_OF_JUSTICE, false); - events.ScheduleEvent(EVENT_SPELL_HAMMER, 30000); - break; - case EVENT_SPELL_HOLY_SHIELD: - me->CastSpell(me, SPELL_HOLY_SHIELD, false); - events.ScheduleEvent(SPELL_HOLY_SHIELD, 30000); - break; - case EVENT_SPELL_CONSECRATION: - me->CastSpell(me, SPELL_CONSECRATION, false); - events.ScheduleEvent(EVENT_SPELL_CONSECRATION, 20000); - break; + Talk(SAY_TAUNT); } + DoCastSelf(SPELL_CLEANSE); + context.Repeat(10s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastVictim(SPELL_HAMMER_OF_JUSTICE); + context.Repeat(30s); + }).Schedule(10s, [this](TaskContext context) + { + DoCastSelf(SPELL_HOLY_SHIELD); + context.Repeat(30s); + }); - DoMeleeAttackIfReady(); + if (IsHeroic()) + { + scheduler.Schedule(1s, [this](TaskContext context) + { + DoCastSelf(SPELL_CONSECRATION); + context.Repeat(20s); + }); } - }; + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_SLAY); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + me->GetInstanceScript()->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_SKARLOC_KILLED); + me->GetInstanceScript()->SetData(DATA_THRALL_ADD_FLAG, 0); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + scheduler.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + DoMeleeAttackIfReady(); + } }; void AddSC_boss_captain_skarloc() { - new boss_captain_skarloc(); + RegisterOldHillsbradCreatureAI(boss_captain_skarloc); } 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 42c4b358f..83093c43d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp @@ -19,107 +19,98 @@ #include "ScriptedCreature.h" #include "old_hillsbrad.h" -enum EpochHunter +enum Text { - SAY_AGGRO = 5, - SAY_SLAY = 6, - SAY_BREATH = 7, - SAY_DEATH = 8, - - SPELL_SAND_BREATH = 31914, - SPELL_IMPENDING_DEATH = 31916, - SPELL_MAGIC_DISRUPTION_AURA = 33834, - SPELL_WING_BUFFET = 31475, - - EVENT_SPELL_SAND_BREATH = 1, - EVENT_SPELL_IMPENDING_DEATH = 2, - EVENT_SPELL_DISRUPTION = 3, - EVENT_SPELL_WING_BUFFET = 4 + SAY_AGGRO = 5, + SAY_SLAY = 6, + SAY_BREATH = 7, + SAY_DEATH = 8 }; -class boss_epoch_hunter : public CreatureScript +enum Spells { -public: - boss_epoch_hunter() : CreatureScript("boss_epoch_hunter") { } + SPELL_SAND_BREATH = 31914, + SPELL_IMPENDING_DEATH = 31916, + SPELL_MAGIC_DISRUPTION_AURA = 33834, + SPELL_WING_BUFFET = 31475 +}; - CreatureAI* GetAI(Creature* creature) const override +struct boss_epoch_hunter : public BossAI +{ + boss_epoch_hunter(Creature* creature) : BossAI(creature, DATA_EPOCH_HUNTER) { - return GetOldHillsbradAI(creature); + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } - struct boss_epoch_hunterAI : public ScriptedAI + void Reset() override { - boss_epoch_hunterAI(Creature* creature) : ScriptedAI(creature) { } + _Reset(); + } - EventMap events; - - void Reset() override + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + scheduler.Schedule(8s, [this](TaskContext context) { - } - - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - - events.ScheduleEvent(EVENT_SPELL_SAND_BREATH, 8000); - events.ScheduleEvent(EVENT_SPELL_IMPENDING_DEATH, 2000); - events.ScheduleEvent(EVENT_SPELL_DISRUPTION, 20000); - events.ScheduleEvent(EVENT_SPELL_WING_BUFFET, 14000); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void JustDied(Unit* killer) override - { - if (killer && killer == me) - return; - Talk(SAY_DEATH); - me->GetInstanceScript()->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_EPOCH_KILLED); - if (Creature* taretha = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_TARETHA_GUID))) - taretha->AI()->DoAction(me->GetEntry()); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) + if (roll_chance_i(50)) { - case EVENT_SPELL_SAND_BREATH: - if (roll_chance_i(50)) - Talk(SAY_BREATH); - me->CastSpell(me->GetVictim(), SPELL_SAND_BREATH, false); - events.ScheduleEvent(EVENT_SPELL_SAND_BREATH, 20000); - break; - case EVENT_SPELL_IMPENDING_DEATH: - me->CastSpell(me->GetVictim(), SPELL_IMPENDING_DEATH, false); - events.ScheduleEvent(EVENT_SPELL_IMPENDING_DEATH, 30000); - break; - case EVENT_SPELL_WING_BUFFET: - me->CastSpell(me, SPELL_WING_BUFFET, false); - events.ScheduleEvent(EVENT_SPELL_WING_BUFFET, 30000); - break; - case EVENT_SPELL_DISRUPTION: - me->CastSpell(me, SPELL_MAGIC_DISRUPTION_AURA, false); - events.ScheduleEvent(EVENT_SPELL_DISRUPTION, 30000); - break; + Talk(SAY_BREATH); } + DoCastVictim(SPELL_SAND_BREATH); + context.Repeat(20s); + }).Schedule(2s, [this](TaskContext context) + { + DoCastVictim(SPELL_IMPENDING_DEATH); + context.Repeat(30s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastSelf(SPELL_MAGIC_DISRUPTION_AURA); + context.Repeat(30s); + }).Schedule(14s, [this](TaskContext context) + { + DoCastSelf(SPELL_WING_BUFFET); + context.Repeat(30s); + }); + } - DoMeleeAttackIfReady(); + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + + void JustDied(Unit* killer) override + { + if (killer && killer == me) + return; + + _JustDied(); + Talk(SAY_DEATH); + me->GetInstanceScript()->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_EPOCH_KILLED); + if (Creature* taretha = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_TARETHA_GUID))) + { + taretha->AI()->DoAction(me->GetEntry()); } - }; + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + scheduler.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + DoMeleeAttackIfReady(); + } }; void AddSC_boss_epoch_hunter() { - new boss_epoch_hunter(); + RegisterOldHillsbradCreatureAI(boss_epoch_hunter); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp index dc0d744be..afa6f6eb8 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp @@ -21,159 +21,151 @@ #include "SmartScriptMgr.h" #include "old_hillsbrad.h" -enum LieutenantDrake +enum Text { - SAY_ENTER = 0, - SAY_AGGRO = 1, - SAY_SLAY = 2, - SAY_MORTAL = 3, - SAY_SHOUT = 4, - SAY_DEATH = 5, - - SPELL_WHIRLWIND = 31909, - SPELL_EXPLODING_SHOT = 33792, - SPELL_HAMSTRING = 9080, - SPELL_MORTAL_STRIKE = 31911, - SPELL_FRIGHTENING_SHOUT = 33789, - - EVENT_WHIRLWIND = 1, - EVENT_FRIGHTENING_SHOUT = 2, - EVENT_MORTAL_STRIKE = 3, - EVENT_HAMSTRING = 4, - EVENT_EXPLODING_SHOT = 5 + SAY_ENTER = 0, + SAY_AGGRO = 1, + SAY_SLAY = 2, + SAY_MORTAL = 3, + SAY_SHOUT = 4, + SAY_DEATH = 5 }; -class boss_lieutenant_drake : public CreatureScript +enum Spells { -public: - boss_lieutenant_drake() : CreatureScript("boss_lieutenant_drake") { } + SPELL_WHIRLWIND = 31909, + SPELL_EXPLODING_SHOT = 33792, + SPELL_HAMSTRING = 9080, + SPELL_MORTAL_STRIKE = 31911, + SPELL_FRIGHTENING_SHOUT = 33789 +}; - CreatureAI* GetAI(Creature* creature) const override +struct boss_lieutenant_drake : public BossAI +{ + boss_lieutenant_drake(Creature* creature) : BossAI(creature, DATA_LIEUTENANT_DRAKE) { - return GetOldHillsbradAI(creature); + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } - struct boss_lieutenant_drakeAI : public ScriptedAI + void InitializeAI() override { - boss_lieutenant_drakeAI(Creature* creature) : ScriptedAI(creature) + runSecondPath = false; + pathId = me->GetEntry() * 10; + me->GetMotionMaster()->MovePath(pathId, false); + } + + void Reset() override + { + _Reset(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + scheduler.Schedule(4s, [this](TaskContext context) { + DoCastSelf(SPELL_WHIRLWIND); + context.Repeat(25s); + }).Schedule(14s, [this](TaskContext context) + { + if (roll_chance_i(40)) + { + Talk(SAY_SHOUT); + } + DoCastSelf(SPELL_FRIGHTENING_SHOUT); + context.Repeat(25s); + }).Schedule(9s, [this](TaskContext context) + { + if (roll_chance_i(40)) + { + Talk(SAY_MORTAL); + } + DoCastVictim(SPELL_MORTAL_STRIKE); + context.Repeat(10s); + }).Schedule(18s, [this](TaskContext context) + { + DoCastVictim(SPELL_HAMSTRING); + context.Repeat(25s); + }).Schedule(1s, [this](TaskContext context) + { + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 40.0f)) + { + DoCast(target, SPELL_EXPLODING_SHOT); + } + context.Repeat(25s); + }); + } + + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + { + Talk(SAY_SLAY); + } + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + if (InstanceScript* instance = me->GetInstanceScript()) + { + instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_DRAKE_KILLED); + } + } + + void MovementInform(uint32 type, uint32 point) override + { + if (type != WAYPOINT_MOTION_TYPE) + { + return; } - void InitializeAI() override + if (pathId == me->GetEntry() * 10) + { + switch (point) + { + case 7: + Talk(SAY_ENTER); + break; + case 10: + pathId = (me->GetEntry() * 10) + 1; + runSecondPath = true; + break; + default: + break; + } + } + } + + void UpdateAI(uint32 diff) override + { + if (runSecondPath) { runSecondPath = false; - pathId = me->GetEntry() * 10; - me->GetMotionMaster()->MovePath(pathId, false); + me->GetMotionMaster()->MovePath(pathId, true); } - void Reset() override - { - events.Reset(); - } + if (!UpdateVictim()) + return; - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); + scheduler.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - events.ScheduleEvent(EVENT_WHIRLWIND, 4000); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 14000); - events.ScheduleEvent(EVENT_MORTAL_STRIKE, 9000); - events.ScheduleEvent(EVENT_HAMSTRING, 18000); - events.ScheduleEvent(EVENT_EXPLODING_SHOT, 1000); - } + DoMeleeAttackIfReady(); + } - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - if (InstanceScript* instance = me->GetInstanceScript()) - instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_DRAKE_KILLED); - } - - void MovementInform(uint32 type, uint32 point) override - { - if (type != WAYPOINT_MOTION_TYPE) - { - return; - } - - if (pathId == me->GetEntry() * 10) - { - switch (point) - { - case 7: - Talk(SAY_ENTER); - break; - case 10: - pathId = (me->GetEntry() * 10) + 1; - runSecondPath = true; - break; - default: - break; - } - } - } - - void UpdateAI(uint32 diff) override - { - if (runSecondPath) - { - runSecondPath = false; - me->GetMotionMaster()->MovePath(pathId, true); - } - - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_WHIRLWIND: - me->CastSpell(me, SPELL_WHIRLWIND, false); - events.ScheduleEvent(EVENT_WHIRLWIND, 25000); - break; - case EVENT_EXPLODING_SHOT: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 40.0f)) - me->CastSpell(target, SPELL_EXPLODING_SHOT, false); - events.ScheduleEvent(EVENT_EXPLODING_SHOT, 25000); - break; - case EVENT_MORTAL_STRIKE: - if (roll_chance_i(40)) - Talk(SAY_MORTAL); - me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10000); - break; - case EVENT_FRIGHTENING_SHOUT: - if (roll_chance_i(40)) - Talk(SAY_SHOUT); - me->CastSpell(me, SPELL_FRIGHTENING_SHOUT, false); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 25000); - break; - case EVENT_HAMSTRING: - me->CastSpell(me->GetVictim(), SPELL_HAMSTRING, false); - events.ScheduleEvent(EVENT_HAMSTRING, 25000); - break; - } - - DoMeleeAttackIfReady(); - } - - private: - EventMap events; - uint32 pathId; - bool runSecondPath; - }; +private: + uint32 pathId; + bool runSecondPath; }; void AddSC_boss_lieutenant_drake() { - new boss_lieutenant_drake(); + RegisterOldHillsbradCreatureAI(boss_lieutenant_drake); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h index 602b5475f..343453a0b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h @@ -27,6 +27,9 @@ enum DataIds { DATA_ESCORT_PROGRESS = 0, + DATA_LIEUTENANT_DRAKE = 1, + DATA_CAPTAIN_SKARLOC = 2, + DATA_EPOCH_HUNTER = 3, DATA_BOMBS_PLACED = 10, DATA_THRALL_REPOSITION = 11, @@ -95,4 +98,6 @@ inline AI* GetOldHillsbradAI(T* obj) return GetInstanceAI(obj, OldHillsbradScriptName); } +#define RegisterOldHillsbradCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetOldHillsbradAI) + #endif diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index da71faa29..bcfbcfb9a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -19,14 +19,17 @@ #include "ScriptedCreature.h" #include "the_black_morass.h" -enum Enums +enum Text { SAY_AGGRO = 1, SAY_BANISH = 2, SAY_SLAY = 3, SAY_DEATH = 4, - EMOTE_FRENZY = 5, + EMOTE_FRENZY = 5 +}; +enum Spells +{ SPELL_CLEAVE = 40504, SPELL_TIME_STOP = 31422, SPELL_ENRAGE = 37605, diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp index ee0bf883a..98a5d43ef 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp @@ -19,19 +19,21 @@ #include "ScriptedCreature.h" #include "the_black_morass.h" -enum Enums +enum Text { SAY_AGGRO = 1, SAY_BANISH = 2, SAY_SLAY = 3, - SAY_DEATH = 4, + SAY_DEATH = 4 +}; +enum Spells +{ SPELL_ARCANE_BLAST = 31457, SPELL_ARCANE_DISCHARGE = 31472, SPELL_TIME_LAPSE = 31467, SPELL_ATTRACTION = 38540, - - SPELL_BANISH_DRAGON_HELPER = 31550, + SPELL_BANISH_DRAGON_HELPER = 31550 }; struct boss_chrono_lord_deja : public BossAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp index e784ce409..7b161e05f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp @@ -19,13 +19,16 @@ #include "ScriptedCreature.h" #include "the_black_morass.h" -enum Enums +enum Text { SAY_AGGRO = 1, SAY_BANISH = 2, SAY_SLAY = 3, - SAY_DEATH = 4, + SAY_DEATH = 4 +}; +enum Spells +{ SPELL_HASTEN = 31458, SPELL_MORTAL_WOUND = 31464, SPELL_WING_BUFFET = 31475, @@ -46,7 +49,6 @@ struct boss_temporus : public BossAI void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - scheduler.Schedule(12s, [this](TaskContext context) { DoCastSelf(SPELL_HASTEN); @@ -69,7 +71,6 @@ struct boss_temporus : public BossAI context.Repeat(30s); }); } - OwnTalk(SAY_AGGRO); } @@ -98,7 +99,6 @@ struct boss_temporus : public BossAI return; } } - ScriptedAI::MoveInLineOfSight(who); } };