diff options
author | MitchesD <majklprofik@seznam.cz> | 2015-04-18 18:26:54 +0200 |
---|---|---|
committer | MitchesD <majklprofik@seznam.cz> | 2015-04-18 18:30:57 +0200 |
commit | 4d8ddac555436d68b8cda0921a71befdc4de2e0d (patch) | |
tree | bb85751bedbc47af640ee3e0d5597d07775f6c86 /src | |
parent | 5b5c0938da0faa5d3fcf4fd062fa712a448a67ff (diff) |
Scripts/CoS: Chrono Lord Epoch converted to BossAI
(cherry picked from commit d74e0d823d96df02822005e7165139b2bf1709de)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp | 150 |
1 files changed, 59 insertions, 91 deletions
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index 0311ed61c6a..ecda065fda9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -32,8 +32,7 @@ enum Spells SPELL_CURSE_OF_EXERTION = 52772, SPELL_TIME_WARP = 52766, //Time slows down, reducing attack, casting and movement speed by 70% for 6 sec. SPELL_TIME_STOP = 58848, //Stops time in a 50 yard sphere for 2 sec. - SPELL_WOUNDING_STRIKE = 52771, //Used only on the tank - H_SPELL_WOUNDING_STRIKE = 58830 + SPELL_WOUNDING_STRIKE = 52771 //Used only on the tank }; enum Yells @@ -45,109 +44,78 @@ enum Yells SAY_DEATH = 4 }; -class boss_epoch : public CreatureScript +enum Events { -public: - boss_epoch() : CreatureScript("boss_epoch") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_epochAI>(creature); - } - - struct boss_epochAI : public ScriptedAI - { - boss_epochAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = creature->GetInstanceScript(); - } - - void Initialize() - { - uiStep = 1; - uiStepTimer = 26000; - uiCurseOfExertionTimer = 9300; - uiTimeWarpTimer = 25300; - uiTimeStopTimer = 21300; - uiWoundingStrikeTimer = 5300; - } - - uint8 uiStep; - - uint32 uiStepTimer; - uint32 uiWoundingStrikeTimer; - uint32 uiTimeWarpTimer; - uint32 uiTimeStopTimer; - uint32 uiCurseOfExertionTimer; - - InstanceScript* instance; - - void Reset() override - { - Initialize(); - - instance->SetBossState(DATA_EPOCH, NOT_STARTED); - } - - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_AGGRO); + EVENT_CURSE_OF_EXERTION = 1, + EVENT_TIME_WARP, + EVENT_TIME_STOP, + EVENT_WOUNDING_STRIKE +}; - instance->SetBossState(DATA_EPOCH, IN_PROGRESS); - } +class boss_epoch : public CreatureScript +{ + public: + boss_epoch() : CreatureScript("boss_epoch") { } - void UpdateAI(uint32 diff) override + struct boss_epochAI : public BossAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_epochAI(Creature* creature) : BossAI(creature, DATA_EPOCH) { } - if (uiCurseOfExertionTimer < diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_CURSE_OF_EXERTION); - uiCurseOfExertionTimer = 9300; - } else uiCurseOfExertionTimer -= diff; + Talk(SAY_AGGRO); + _EnterCombat(); - if (uiWoundingStrikeTimer < diff) - { - DoCastVictim(SPELL_WOUNDING_STRIKE); - uiWoundingStrikeTimer = 5300; - } else uiWoundingStrikeTimer -= diff; + events.ScheduleEvent(EVENT_CURSE_OF_EXERTION, 9300); + events.ScheduleEvent(EVENT_TIME_WARP, 25300); + events.ScheduleEvent(EVENT_TIME_STOP, 21300); + events.ScheduleEvent(EVENT_WOUNDING_STRIKE, 5300); + } - if (uiTimeStopTimer < diff) + void ExecuteEvent(uint32 eventId) override { - DoCastAOE(SPELL_TIME_STOP); - uiTimeStopTimer = 21300; - } else uiTimeStopTimer -= diff; - - if (uiTimeWarpTimer < diff) + switch (eventId) + { + case EVENT_CURSE_OF_EXERTION: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_CURSE_OF_EXERTION); + events.ScheduleEvent(EVENT_CURSE_OF_EXERTION, 9300); + break; + case EVENT_TIME_WARP: + Talk(SAY_TIME_WARP); + DoCastAOE(SPELL_TIME_WARP); + events.ScheduleEvent(EVENT_TIME_WARP, 25300); + break; + case EVENT_TIME_STOP: + DoCastAOE(SPELL_TIME_STOP); + events.ScheduleEvent(EVENT_TIME_STOP, 21300); + break; + case EVENT_WOUNDING_STRIKE: + DoCastVictim(SPELL_WOUNDING_STRIKE); + events.ScheduleEvent(EVENT_WOUNDING_STRIKE, 5300); + break; + default: + break; + } + } + + void JustDied(Unit* /*killer*/) override { - Talk(SAY_TIME_WARP); - DoCastAOE(SPELL_TIME_WARP); - uiTimeWarpTimer = 25300; - } else uiTimeWarpTimer -= diff; + Talk(SAY_DEATH); + _JustDied(); + } - DoMeleeAttackIfReady(); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - - instance->SetBossState(DATA_EPOCH, DONE); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + }; - void KilledUnit(Unit* victim) override + CreatureAI* GetAI(Creature* creature) const override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + return GetInstanceAI<boss_epochAI>(creature); } - }; - }; void AddSC_boss_epoch() |