diff options
-rw-r--r-- | src/server/scripts/Outland/BlackTemple/black_temple.h | 4 | ||||
-rw-r--r-- | src/server/scripts/Outland/BlackTemple/boss_supremus.cpp | 203 |
2 files changed, 86 insertions, 121 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h index 4af561480be..32f427148b9 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.h +++ b/src/server/scripts/Outland/BlackTemple/black_temple.h @@ -65,7 +65,9 @@ enum CreatureIds NPC_ILLIDARI_COUNCIL = 23426, NPC_BLOOD_ELF_COUNCIL_VOICE = 23499, - NPC_ILLIDAN_STORMRAGE = 22917 + NPC_ILLIDAN_STORMRAGE = 22917, + + NPC_SUPREMUS_VOLCANO = 23085 }; enum GameObjectIds diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index a705659337f..f88dc1bb3c3 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,46 +15,47 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Supremus -SD%Complete: 95 -SDComment: Need to implement molten punch -SDCategory: Black Temple -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "PassiveAI.h" #include "black_temple.h" -enum Supremus +enum Texts { - EMOTE_NEW_TARGET = 0, - EMOTE_PUNCH_GROUND = 1, - EMOTE_GROUND_CRACK = 2, - - //Spells - SPELL_MOLTEN_PUNCH = 40126, - SPELL_HATEFUL_STRIKE = 41926, - SPELL_MOLTEN_FLAME = 40980, - SPELL_VOLCANIC_ERUPTION = 40117, - SPELL_VOLCANIC_SUMMON = 40276, - SPELL_BERSERK = 45078, + EMOTE_NEW_TARGET = 0, + EMOTE_PUNCH_GROUND = 1, + EMOTE_GROUND_CRACK = 2 +}; - CREATURE_VOLCANO = 23085, - CREATURE_STALKER = 23095, +enum Spells +{ + SPELL_MOLTEN_PUNCH = 40126, + SPELL_HATEFUL_STRIKE = 41926, + SPELL_MOLTEN_FLAME = 40980, + SPELL_VOLCANIC_ERUPTION = 40117, + SPELL_VOLCANIC_SUMMON = 40276, + SPELL_BERSERK = 45078 +}; - PHASE_STRIKE = 1, - PHASE_CHASE = 2, +enum Events +{ + EVENT_BERSERK = 1, + EVENT_SWITCH_PHASE, + EVENT_FLAME, + EVENT_VOLCANO, + EVENT_SWITCH_TARGET, + EVENT_HATEFUL_STRIKE +}; - EVENT_BERSERK = 1, - EVENT_SWITCH_PHASE = 2, - EVENT_FLAME = 3, - EVENT_VOLCANO = 4, - EVENT_SWITCH_TARGET = 5, - EVENT_HATEFUL_STRIKE = 6, +enum Phases +{ + PHASE_STRIKE = 1, + PHASE_CHASE = 2 +}; - GCD_CAST = 1 +enum EventGroups +{ + GCD_CAST = 1 }; class molten_flame : public CreatureScript @@ -88,38 +88,22 @@ class boss_supremus : public CreatureScript public: boss_supremus() : CreatureScript("boss_supremus") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_supremusAI>(creature); - } - - struct boss_supremusAI : public ScriptedAI + struct boss_supremusAI : public BossAI { - boss_supremusAI(Creature* creature) : ScriptedAI(creature), summons(me) - { - instance = creature->GetInstanceScript(); + boss_supremusAI(Creature* creature) : BossAI(creature, DATA_SUPREMUS) + { + phase = 0; } - InstanceScript* instance; - EventMap events; - SummonList summons; - uint32 phase; - void Reset() override { - if (me->IsAlive()) - instance->SetBossState(DATA_SUPREMUS, NOT_STARTED); - + _Reset(); phase = 0; - - events.Reset(); - summons.DespawnAll(); } void EnterCombat(Unit* /*who*/) override { - instance->SetBossState(DATA_SUPREMUS, IN_PROGRESS); - + _EnterCombat(); ChangePhase(); events.ScheduleEvent(EVENT_BERSERK, 900000, GCD_CAST); events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST); @@ -152,23 +136,6 @@ public: events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000, GCD_CAST); } - void JustDied(Unit* /*killer*/) override - { - instance->SetBossState(DATA_SUPREMUS, DONE); - - summons.DespawnAll(); - } - - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - } - - void SummonedCreatureDespawn(Creature* summon) override - { - summons.Despawn(summon); - } - Unit* CalculateHatefulStrikeTarget() { uint32 health = 0; @@ -192,63 +159,59 @@ public: return target; } - void UpdateAI(uint32 diff) override + void ExecuteEvent(uint32 eventId) override { - if (!UpdateVictim()) - return; - - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) + switch (eventId) { - switch (eventId) - { - case EVENT_BERSERK: - DoCast(me, SPELL_BERSERK, true); - break; - case EVENT_FLAME: - DoCast(me, SPELL_MOLTEN_PUNCH); - events.DelayEvents(1500, GCD_CAST); - events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST); - break; - case EVENT_HATEFUL_STRIKE: - if (Unit* target = CalculateHatefulStrikeTarget()) - DoCast(target, SPELL_HATEFUL_STRIKE); - events.DelayEvents(1000, GCD_CAST); - events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 5000, GCD_CAST, PHASE_STRIKE); - break; - case EVENT_SWITCH_TARGET: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true)) - { - DoResetThreat(); - me->AddThreat(target, 5000000.0f); - Talk(EMOTE_NEW_TARGET); - } - events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, 0, PHASE_CHASE); - break; - case EVENT_VOLCANO: + case EVENT_BERSERK: + DoCast(me, SPELL_BERSERK, true); + break; + case EVENT_FLAME: + DoCast(me, SPELL_MOLTEN_PUNCH); + events.DelayEvents(1500, GCD_CAST); + events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST); + break; + case EVENT_HATEFUL_STRIKE: + if (Unit* target = CalculateHatefulStrikeTarget()) + DoCast(target, SPELL_HATEFUL_STRIKE); + events.DelayEvents(1000, GCD_CAST); + events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 5000, GCD_CAST, PHASE_STRIKE); + break; + case EVENT_SWITCH_TARGET: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true)) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 999, true); - if (!target) target = me->GetVictim(); - if (target) - { - //DoCast(target, SPELL_VOLCANIC_SUMMON);//movement bugged - me->SummonCreature(CREATURE_VOLCANO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 30000); - Talk(EMOTE_GROUND_CRACK); - events.DelayEvents(1500, GCD_CAST); - } - events.ScheduleEvent(EVENT_VOLCANO, 10000, GCD_CAST, PHASE_CHASE); - return; + DoResetThreat(); + me->AddThreat(target, 5000000.0f); + Talk(EMOTE_NEW_TARGET); } - case EVENT_SWITCH_PHASE: - ChangePhase(); - break; - } + events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, 0, PHASE_CHASE); + break; + case EVENT_VOLCANO: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 999, true)) + { + //DoCast(target, SPELL_VOLCANIC_SUMMON);//movement bugged + me->SummonCreature(NPC_SUPREMUS_VOLCANO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 30000); + Talk(EMOTE_GROUND_CRACK); + events.DelayEvents(1500, GCD_CAST); + } + events.ScheduleEvent(EVENT_VOLCANO, 10000, GCD_CAST, PHASE_CHASE); + return; + case EVENT_SWITCH_PHASE: + ChangePhase(); + break; + default: + break; } - - DoMeleeAttackIfReady(); } + + private: + uint32 phase; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetBlackTempleAI<boss_supremusAI>(creature); + } }; class npc_volcano : public CreatureScript |