Antorus full
This commit is contained in:
@@ -55,7 +55,21 @@ enum AntorusCreatureIds
|
||||
NPC_DECIMATOR = 122773,
|
||||
NPC_ANNIHILATOR = 122778,
|
||||
NPC_ANNIHILATION = 122818,
|
||||
NPC_GAROTHI_WORLDBREAKER = 124167
|
||||
NPC_GAROTHI_WORLDBREAKER = 124167,
|
||||
|
||||
//Antoran High Command
|
||||
NPC_CENTER_STALKER = 122637, //Event Manager
|
||||
NPC_ADMIRAL_SVIRAX = 122367,
|
||||
|
||||
// Encounter related creatures
|
||||
NPC_ARGUS_THE_UNMAKER = 124828,
|
||||
NPC_FHARG = 122477,
|
||||
NPC_SHATUG = 122135,
|
||||
|
||||
//Aggramar
|
||||
NPC_AGGRAMAR = 121975,
|
||||
NPC_EMBER_OF_TAESHALACH = 122532,
|
||||
NPC_FLAME_OF_TAESHALACH = 121985,
|
||||
};
|
||||
|
||||
enum AntorusGameObjectIds
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*
|
||||
* This file is part of Wow Community
|
||||
*
|
||||
*/
|
||||
|
||||
#include "antorus_the_burning_throne.h"
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellScript.h"
|
||||
#include "ScriptedGossip.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_TAESHALACH_S_REACH = 243431,
|
||||
//SPELL_TAESHALACH_S_REACH = 245990,
|
||||
//SPELL_FLAME_REND = 244033,
|
||||
SPELL_FLAME_REND = 245463,//????
|
||||
//SPELL_FLAME_REND = 254654,
|
||||
//SPELL_FOE_BREAKER = 244291,
|
||||
SPELL_FOE_BREAKER = 245458,//???
|
||||
//SPELL_FOE_BREAKER = 254655,
|
||||
SPELL_WAKE_OF_FLAME = 244693,
|
||||
//SPELL_WAKE_OF_FLAME = 244736,
|
||||
SPELL_BURNING_RAGE = 244713,
|
||||
SPELL_CORRUPT_AEGIS = 244894,
|
||||
SPELL_SEARING_TEMPEST = 245301,
|
||||
//SPELL_SEARING_TEMPEST = 246014,
|
||||
SPELL_SCORCHING_BLAZE = 245994,
|
||||
SPELL_EMPOWERED_FLAME_REND = 247079,
|
||||
//SPELL_EMPOWERED_FLAME_REND = 255058,
|
||||
SPELL_RAVENOUS_BLAZE = 254452,
|
||||
SPELL_EMPOWERED_FOE_BREAKER = 255059,
|
||||
//SPELL_EMPOWERED_FOE_BREAKER = 255060,
|
||||
SPELL_EMPOWERED_SEARING_TEMPEST = 255061,
|
||||
//SPELL_EMPOWERED_SEARING_TEMPEST = 255062,
|
||||
SPELL_SEARING_BINDING = 255528,
|
||||
|
||||
SPELL_TAESHALACH_TECHNIQUE = 256208,//244688
|
||||
|
||||
SPELL_BLAZING_ERUPTION = 244912,
|
||||
SPELL_MOLTEN_REMNANTS = 245905,
|
||||
//SPELL_SEARING_TEMPEST = 254653,
|
||||
SPELL_UNENDING_BLAZE = 254695,
|
||||
|
||||
SPELL_TITANS_ASSEMBLE_MOVIE = 254311,
|
||||
SPELL_FLARE = 245983,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
// Intro
|
||||
EVENT_INTRO = 1,
|
||||
EVNET_PHASE_2 = 2,
|
||||
EVNET_PHASE_3 = 3,
|
||||
EVENT_A1 = 4,
|
||||
EVENT_A2 = 5,
|
||||
EVENT_A3 = 6,
|
||||
EVENT_A4 = 7,
|
||||
};
|
||||
enum Phases
|
||||
{
|
||||
PHASE_NORMAL,
|
||||
PHASE_INTRO,
|
||||
PHASE_1,
|
||||
PHASE_2,
|
||||
PHASE_3,
|
||||
PHASE_4,
|
||||
};
|
||||
|
||||
///.go creature id
|
||||
struct boss_aggramar : public BossAI
|
||||
{
|
||||
boss_aggramar(Creature* creature) : BossAI(creature, DATA_AGGRAMAR) { Initialize(); }
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
PhaseStatus = Phases::PHASE_INTRO;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
instance->SetBossState(DATA_AGGRAMAR, DONE);
|
||||
instance->DoPlayConversation(6127);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (me->HealthBelowPctDamaged(80, damage))
|
||||
{
|
||||
PhaseStatus = PHASE_2;
|
||||
events.Reset();
|
||||
me->GetMotionMaster()->MovePoint(1, Position(-12634.2f, -2255.2478f, 2514.2617f, 4.674f));
|
||||
Talk(4);
|
||||
DoCastSelf(SPELL_CORRUPT_AEGIS);
|
||||
killCount = 2;
|
||||
events.RescheduleEvent(EVNET_PHASE_2, 1s);
|
||||
}
|
||||
else if (me->HealthBelowPctDamaged(40, damage))
|
||||
{
|
||||
PhaseStatus = PHASE_3;
|
||||
events.Reset();
|
||||
me->GetMotionMaster()->MovePoint(1, Position(-12634.2f, -2255.2478f, 2514.2617f, 4.674f));
|
||||
DoCastSelf(SPELL_CORRUPT_AEGIS);
|
||||
killCount = 2;
|
||||
events.RescheduleEvent(EVNET_PHASE_3, 1s);
|
||||
}
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (action == 1)
|
||||
{
|
||||
PhaseStatus = PHASE_INTRO;
|
||||
instance->SetBossState(DATA_AGGRAMAR, SPECIAL);
|
||||
events.Reset();
|
||||
}
|
||||
if (action == 2)
|
||||
{
|
||||
--killCount;
|
||||
if (killCount <= 0)
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_CORRUPT_AEGIS);
|
||||
|
||||
events.ScheduleEvent(SPELL_FLAME_REND, 5s);
|
||||
events.ScheduleEvent(SPELL_FOE_BREAKER, 5s);
|
||||
if (PhaseStatus < PHASE_2)
|
||||
events.ScheduleEvent(SPELL_WAKE_OF_FLAME, 6s);
|
||||
else
|
||||
events.ScheduleEvent(SPELL_FLARE, 6s);
|
||||
events.ScheduleEvent(SPELL_BURNING_RAGE, 5s);
|
||||
events.ScheduleEvent(SPELL_CORRUPT_AEGIS, 5s);
|
||||
events.ScheduleEvent(SPELL_SEARING_TEMPEST, 5s);
|
||||
events.ScheduleEvent(SPELL_SCORCHING_BLAZE, 8s);
|
||||
events.ScheduleEvent(SPELL_TAESHALACH_TECHNIQUE, 60s);
|
||||
|
||||
if (me->GetMap()->IsMythic())
|
||||
{
|
||||
events.ScheduleEvent(SPELL_EMPOWERED_FLAME_REND, 5s);
|
||||
events.ScheduleEvent(SPELL_RAVENOUS_BLAZE, 5s);
|
||||
events.ScheduleEvent(SPELL_EMPOWERED_FOE_BREAKER, 5s);
|
||||
events.ScheduleEvent(SPELL_EMPOWERED_SEARING_TEMPEST, 5s);
|
||||
events.ScheduleEvent(SPELL_SEARING_BINDING, 5s);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
Talk(0);
|
||||
DoCastSelf(SPELL_TAESHALACH_S_REACH);
|
||||
events.ScheduleEvent(SPELL_FLAME_REND, 5s);
|
||||
events.ScheduleEvent(SPELL_FOE_BREAKER, 5s);
|
||||
if (PhaseStatus < PHASE_2)
|
||||
events.ScheduleEvent(SPELL_WAKE_OF_FLAME, 6s);
|
||||
else
|
||||
events.ScheduleEvent(SPELL_FLARE, 6s);
|
||||
events.ScheduleEvent(SPELL_BURNING_RAGE, 5s);
|
||||
events.ScheduleEvent(SPELL_CORRUPT_AEGIS, 5s);
|
||||
events.ScheduleEvent(SPELL_SEARING_TEMPEST, 5s);
|
||||
events.ScheduleEvent(SPELL_SCORCHING_BLAZE, 8s);
|
||||
events.ScheduleEvent(SPELL_TAESHALACH_TECHNIQUE, 60s);
|
||||
|
||||
if (me->GetMap()->IsMythic())
|
||||
{
|
||||
events.ScheduleEvent(SPELL_EMPOWERED_FLAME_REND, 5s);
|
||||
events.ScheduleEvent(SPELL_RAVENOUS_BLAZE, 5s);
|
||||
events.ScheduleEvent(SPELL_EMPOWERED_FOE_BREAKER, 5s);
|
||||
events.ScheduleEvent(SPELL_EMPOWERED_SEARING_TEMPEST, 5s);
|
||||
events.ScheduleEvent(SPELL_SEARING_BINDING, 5s);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
|
||||
|
||||
switch (eventId)
|
||||
{
|
||||
case SPELL_WAKE_OF_FLAME:
|
||||
{
|
||||
Talk(1);
|
||||
DoCast(SPELL_WAKE_OF_FLAME);
|
||||
events.Repeat(25s);
|
||||
break;
|
||||
}
|
||||
case SPELL_FLARE:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_FLARE, false);
|
||||
|
||||
if (Unit* target2 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target2, SPELL_FLARE, false);
|
||||
|
||||
if (Unit* target3 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target3, SPELL_FLARE, false);
|
||||
events.Repeat(25s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SEARING_TEMPEST:
|
||||
{
|
||||
DoCast(SPELL_SEARING_TEMPEST);
|
||||
//events.Repeat(20s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SCORCHING_BLAZE:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_SCORCHING_BLAZE, false);
|
||||
|
||||
if (Unit* target2 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target2, SPELL_SCORCHING_BLAZE, false);
|
||||
events.Repeat(8s);
|
||||
break;
|
||||
}
|
||||
|
||||
case SPELL_TAESHALACH_TECHNIQUE:
|
||||
{
|
||||
Talk(2);
|
||||
DoCast(SPELL_TAESHALACH_TECHNIQUE);
|
||||
Talk(3);
|
||||
events.ScheduleEvent(EVENT_A1, 1s);
|
||||
events.Repeat(60s);
|
||||
break;
|
||||
}
|
||||
case EVENT_A1:
|
||||
{
|
||||
DoCast(SPELL_FOE_BREAKER);
|
||||
events.ScheduleEvent(EVENT_A2, 4s);
|
||||
break;
|
||||
}
|
||||
case EVENT_A2:
|
||||
{
|
||||
DoCast(SPELL_FLAME_REND);
|
||||
DoCast(SPELL_BURNING_RAGE);
|
||||
events.ScheduleEvent(EVENT_A3, 4s);
|
||||
break;
|
||||
}
|
||||
case EVENT_A3:
|
||||
{
|
||||
DoCast(SPELL_FOE_BREAKER);
|
||||
events.ScheduleEvent(EVENT_A4, 4s);
|
||||
break;
|
||||
}
|
||||
case EVENT_A4:
|
||||
{
|
||||
DoCast(SPELL_FLAME_REND);
|
||||
DoCast(SPELL_BURNING_RAGE);
|
||||
events.ScheduleEvent(SPELL_SEARING_TEMPEST, 5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_EMPOWERED_FLAME_REND:
|
||||
{
|
||||
DoCast(SPELL_EMPOWERED_FLAME_REND);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_RAVENOUS_BLAZE:
|
||||
{
|
||||
DoCast(SPELL_RAVENOUS_BLAZE);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_EMPOWERED_FOE_BREAKER:
|
||||
{
|
||||
DoCast(SPELL_EMPOWERED_FOE_BREAKER);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_EMPOWERED_SEARING_TEMPEST:
|
||||
{
|
||||
DoCast(SPELL_EMPOWERED_SEARING_TEMPEST);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SEARING_BINDING:
|
||||
{
|
||||
DoCast(SPELL_SEARING_BINDING);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->IsWithinDist(who, 50.0f, false) && PhaseStatus == Phases::PHASE_INTRO)
|
||||
{
|
||||
PhaseStatus = Phases::PHASE_1;
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
BossAI::JustSummoned(summon);
|
||||
switch (summon->GetEntry())
|
||||
{
|
||||
case NPC_EMBER_OF_TAESHALACH:
|
||||
{
|
||||
summon->SetFaction(me->GetFaction());
|
||||
summon->GetMotionMaster()->MovePoint(1, Position(-12634.2f, -2255.2478f, 2514.2617f, 4.674f));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
uint8 PhaseStatus;
|
||||
uint8 killCount;
|
||||
};
|
||||
|
||||
struct npc_ember_of_taeshalach_122532 : public ScriptedAI
|
||||
{
|
||||
npc_ember_of_taeshalach_122532(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (Creature* aggramar = me->FindNearestCreature(NPC_AGGRAMAR, 50.0f, true))
|
||||
aggramar->AI()->DoAction(2);
|
||||
DoCastSelf(SPELL_MOLTEN_REMNANTS);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (who->GetEntry() == NPC_AGGRAMAR && me->IsWithinDist(who, 3.0f, false))
|
||||
{
|
||||
DoCastAOE(SPELL_BLAZING_ERUPTION);
|
||||
me->KillSelf();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_magni_bronzebeard_128169 : public ScriptedAI
|
||||
{
|
||||
npc_magni_bronzebeard_128169(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/)
|
||||
{
|
||||
CloseGossipMenuFor(player);
|
||||
player->CastSpell(player, SPELL_TITANS_ASSEMBLE_MOVIE, true);
|
||||
player->TeleportTo(1712, 2826.39f, -4567.94f, 291.95f, 0.02513274f);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_aggramar()
|
||||
{
|
||||
RegisterAntorusTheBurningThroneCreatureAI(boss_aggramar);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_ember_of_taeshalach_122532);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_magni_bronzebeard_128169);
|
||||
}
|
||||
@@ -0,0 +1,426 @@
|
||||
/*
|
||||
* This file is part of Wow Community
|
||||
*
|
||||
*/
|
||||
|
||||
#include "antorus_the_burning_throne.h"
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellScript.h"
|
||||
|
||||
/// .go -2826.932, 10857.5, 139.512 1712
|
||||
enum Spells
|
||||
{
|
||||
SPELL_CHAOS_PULSE = 257974,//share radom 2 player
|
||||
|
||||
NPC_FANATICAL_PYROMANCER = 127724,
|
||||
SPELL_PYROBLAST = 246505,
|
||||
|
||||
NPC_FELBLADE_SHOCKTROOPER = 127725,
|
||||
SPELL_BLADESTORM = 253038,
|
||||
|
||||
|
||||
SPELL_ENTROPIC_MINE_2 = 257262,
|
||||
SPELL_ENTROPIC_BLAST = 253290,//after 3:45
|
||||
|
||||
NPC_ADMIRALS_POD = 122554,
|
||||
SPELL_WITHERING_FIRE = 245103, //[Admiral's Pod]'
|
||||
|
||||
|
||||
///Use Chief Engineer Ishkar's pod
|
||||
SPELL_FELSHIELD_EMITTER = 244902, //summon
|
||||
NPC_FELSHIELD_EMITTER = 122867,
|
||||
///Phase Three - Active Boss: General Erodus
|
||||
SPELL_SUMMON_DISRUPTOR_BEACON = 245174,
|
||||
NPC_DISRUPTOR_BEACON = 122884,
|
||||
//general
|
||||
SPELL_EXPLOIT_WEAKNESS = 244892,
|
||||
SPELL_SHOCK_GRENADE = 244722, // mythic
|
||||
SPELL_ASSUME_COMMAND = 245227,// 90s
|
||||
//In Pod
|
||||
//Admiral Svirax
|
||||
SPELL_FUSILLADE = 244625, //30s
|
||||
//Chief Engineer Ishkar
|
||||
SPELL_ENTROPIC_MINE = 245161,//5s every 10s summon 122992/entropic-mine
|
||||
//General Erodus
|
||||
SPELL_SUMMON_REINFORCEMENTS = 245546,//8s every 8.4s summon 1 NPC_FANATICAL_PYROMANCER 2 NPC_FELBLADE_SHOCKTROOPER
|
||||
|
||||
|
||||
NPC_CHIEF_ENGINEER_ISHKAR = 122369,
|
||||
NPC_GENERAL_ERODUS = 122333,
|
||||
};
|
||||
|
||||
Position const phase2pos = { -2809.739f,10829.299f,139.751f,2.05f };
|
||||
Position const phase3pos = { -2859.6398f,10864.7998f,139.74f,5.9322f };
|
||||
//Phase One - Active Boss: Admiral Svirax
|
||||
//Phase Two - Active Boss: Chief Engineer Ishkar
|
||||
//Phase Three - Active Boss: General Erodus
|
||||
struct boss_admiral_svirax : public BossAI
|
||||
{
|
||||
boss_admiral_svirax(Creature* creature) : BossAI(creature, DATA_ANTORAN_HIGH_COMMAND) { Initialize(); }
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
SubDamageTaken(NPC_CHIEF_ENGINEER_ISHKAR, damage);
|
||||
SubDamageTaken(NPC_GENERAL_ERODUS, damage);
|
||||
}
|
||||
|
||||
void SubDamageTaken(uint32 dragonid, uint32& damage)
|
||||
{
|
||||
if (Creature* target = me->FindNearestCreature(dragonid, 500.0f))
|
||||
{
|
||||
uint64 ohealth = target->GetHealth() - damage;
|
||||
target->SetHealth(ohealth > 0 ? ohealth : 0);
|
||||
|
||||
if (ohealth <= 0)
|
||||
target->setDeathState(JUST_DIED);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
Talk(2);
|
||||
instance->SetBossState(DATA_ANTORAN_HIGH_COMMAND, DONE);
|
||||
me->SummonCreature(129449, Position(-3098.5f, 10474.6298f, -112.6252f, 4.157f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
if (instance)
|
||||
instance->DoPlayConversation(5525);
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
PhaseStatus = 1;
|
||||
events.ScheduleEvent(NPC_CHIEF_ENGINEER_ISHKAR, 90s);
|
||||
events.ScheduleEvent(NPC_GENERAL_ERODUS, 180s);
|
||||
//general
|
||||
events.ScheduleEvent(SPELL_EXPLOIT_WEAKNESS, 8s);
|
||||
if (IsMythic())
|
||||
events.ScheduleEvent(SPELL_SHOCK_GRENADE, 15s);
|
||||
events.ScheduleEvent(SPELL_ASSUME_COMMAND, 90s);
|
||||
events.ScheduleEvent(SPELL_CHAOS_PULSE, 15s);
|
||||
events.ScheduleEvent(SPELL_FUSILLADE, 30s);
|
||||
|
||||
events.ScheduleEvent(SPELL_ENTROPIC_MINE, 5s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case NPC_CHIEF_ENGINEER_ISHKAR:
|
||||
{
|
||||
PhaseStatus = 2;
|
||||
events.CancelEvent(SPELL_ENTROPIC_MINE);
|
||||
events.ScheduleEvent(SPELL_SUMMON_REINFORCEMENTS, 8s);
|
||||
me->SummonCreature(NPC_CHIEF_ENGINEER_ISHKAR, phase2pos, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
break;
|
||||
}
|
||||
case NPC_GENERAL_ERODUS:
|
||||
{
|
||||
PhaseStatus = 3;
|
||||
events.CancelEvent(SPELL_SUMMON_REINFORCEMENTS);
|
||||
events.ScheduleEvent(SPELL_ENTROPIC_MINE, 5s);
|
||||
me->SummonCreature(NPC_GENERAL_ERODUS, phase2pos, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
break;
|
||||
}
|
||||
case SPELL_EXPLOIT_WEAKNESS:
|
||||
{
|
||||
DoCast(SPELL_EXPLOIT_WEAKNESS);
|
||||
events.Repeat(8s, 9s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SHOCK_GRENADE:
|
||||
{
|
||||
DoCast(SPELL_SHOCK_GRENADE);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_ASSUME_COMMAND:
|
||||
{
|
||||
DoCast(SPELL_ASSUME_COMMAND);
|
||||
events.Repeat(90s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CHAOS_PULSE:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target->GetPosition(), SPELL_CHAOS_PULSE, false);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target->GetPosition(), SPELL_CHAOS_PULSE, false);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_FUSILLADE:
|
||||
{
|
||||
DoCast(SPELL_FUSILLADE);
|
||||
events.Repeat(30s);
|
||||
break;
|
||||
}
|
||||
case SPELL_ENTROPIC_MINE:
|
||||
{
|
||||
DoCast(SPELL_ENTROPIC_MINE);
|
||||
for (uint8 i = 0; i < 5; ++i)
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target->GetPosition(), SPELL_CHAOS_PULSE, false);
|
||||
events.Repeat(10s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SUMMON_REINFORCEMENTS:
|
||||
{
|
||||
DoCast(SPELL_SUMMON_REINFORCEMENTS);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->SummonCreature(NPC_FANATICAL_PYROMANCER, target->GetRandomNearPosition(15.0f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->SummonCreature(NPC_CHIEF_ENGINEER_ISHKAR, target->GetRandomNearPosition(15.0f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->SummonCreature(NPC_FELBLADE_SHOCKTROOPER, target->GetRandomNearPosition(15.0f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
events.Repeat(8s, 9s);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->IsWithinDist(who, 25.0f, false))
|
||||
{
|
||||
Talk(0);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
BossAI::JustSummoned(summon);
|
||||
switch (summon->GetEntry())
|
||||
{
|
||||
case NPC_CHIEF_ENGINEER_ISHKAR:
|
||||
case NPC_GENERAL_ERODUS:
|
||||
{
|
||||
summon->SetFaction(me->GetFaction());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
uint8 PhaseStatus;
|
||||
};
|
||||
|
||||
struct npc_chief_engineer_ishkar_122369 : public ScriptedAI
|
||||
{
|
||||
npc_chief_engineer_ishkar_122369(Creature* creature) : ScriptedAI(creature) { Initialize(); }
|
||||
|
||||
void JustEngagedWith (Unit* /*attacker*/) override
|
||||
{
|
||||
events.ScheduleEvent(SPELL_EXPLOIT_WEAKNESS, 8s);
|
||||
if (IsMythic())
|
||||
events.ScheduleEvent(SPELL_SHOCK_GRENADE, 15s);
|
||||
events.ScheduleEvent(SPELL_ASSUME_COMMAND, 90s);
|
||||
events.ScheduleEvent(SPELL_CHAOS_PULSE, 15s);
|
||||
//In Pod
|
||||
events.ScheduleEvent(SPELL_ENTROPIC_MINE, 5s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case SPELL_EXPLOIT_WEAKNESS:
|
||||
{
|
||||
DoCast(SPELL_EXPLOIT_WEAKNESS);
|
||||
events.Repeat(8s, 9s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SHOCK_GRENADE:
|
||||
{
|
||||
DoCast(SPELL_SHOCK_GRENADE);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_ASSUME_COMMAND:
|
||||
{
|
||||
DoCast(SPELL_ASSUME_COMMAND);
|
||||
events.Repeat(90s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CHAOS_PULSE:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_CHAOS_PULSE, false);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_CHAOS_PULSE, false);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_ENTROPIC_MINE:
|
||||
{
|
||||
DoCast(SPELL_ENTROPIC_MINE);
|
||||
for (uint8 i = 0; i < 5; ++i)
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target->GetPosition(), SPELL_CHAOS_PULSE, false);
|
||||
events.Repeat(10s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
SubDamageTaken(NPC_ADMIRAL_SVIRAX, damage);
|
||||
SubDamageTaken(NPC_GENERAL_ERODUS, damage);
|
||||
}
|
||||
|
||||
void SubDamageTaken(uint32 dragonid, uint32& damage)
|
||||
{
|
||||
if (Creature* target = me->FindNearestCreature(dragonid, 500.0f))
|
||||
{
|
||||
uint64 ohealth = target->GetHealth() - damage;
|
||||
target->SetHealth(ohealth > 0 ? ohealth : 0);
|
||||
|
||||
if (ohealth <= 0)
|
||||
target->setDeathState(JUST_DIED);
|
||||
}
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
instance = me->GetInstanceScript();
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* instance;
|
||||
};
|
||||
|
||||
struct npc_general_erodus_122333 : public ScriptedAI
|
||||
{
|
||||
npc_general_erodus_122333(Creature* creature) : ScriptedAI(creature) { Initialize(); }
|
||||
|
||||
void JustEngagedWith(Unit* /*attacker*/) override
|
||||
{
|
||||
events.ScheduleEvent(SPELL_EXPLOIT_WEAKNESS, 8s);
|
||||
if (IsMythic())
|
||||
events.ScheduleEvent(SPELL_SHOCK_GRENADE, 15s);
|
||||
events.ScheduleEvent(SPELL_ASSUME_COMMAND, 90s);
|
||||
events.ScheduleEvent(SPELL_CHAOS_PULSE, 15s);
|
||||
//In Pod
|
||||
events.ScheduleEvent(SPELL_SUMMON_REINFORCEMENTS, 8s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case SPELL_EXPLOIT_WEAKNESS:
|
||||
{
|
||||
DoCast(SPELL_EXPLOIT_WEAKNESS);
|
||||
events.Repeat(8s, 9s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SHOCK_GRENADE:
|
||||
{
|
||||
DoCast(SPELL_SHOCK_GRENADE);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_ASSUME_COMMAND:
|
||||
{
|
||||
DoCast(SPELL_ASSUME_COMMAND);
|
||||
events.Repeat(90s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CHAOS_PULSE:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_CHAOS_PULSE, false);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_CHAOS_PULSE, false);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SUMMON_REINFORCEMENTS:
|
||||
{
|
||||
DoCast(SPELL_SUMMON_REINFORCEMENTS);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->SummonCreature(NPC_FANATICAL_PYROMANCER, target->GetRandomNearPosition(15.0f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->SummonCreature(NPC_CHIEF_ENGINEER_ISHKAR, target->GetRandomNearPosition(15.0f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->SummonCreature(NPC_FELBLADE_SHOCKTROOPER, target->GetRandomNearPosition(15.0f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
events.Repeat(8s, 9s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
SubDamageTaken(NPC_ADMIRAL_SVIRAX, damage);
|
||||
SubDamageTaken(NPC_CHIEF_ENGINEER_ISHKAR, damage);
|
||||
}
|
||||
|
||||
void SubDamageTaken(uint32 dragonid, uint32& damage)
|
||||
{
|
||||
if (Creature* target = me->FindNearestCreature(dragonid, 500.0f))
|
||||
{
|
||||
uint64 ohealth = target->GetHealth() - damage;
|
||||
target->SetHealth(ohealth > 0 ? ohealth : 0);
|
||||
|
||||
if (ohealth <= 0)
|
||||
target->setDeathState(JUST_DIED);
|
||||
}
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
instance = me->GetInstanceScript();
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* instance;
|
||||
};
|
||||
|
||||
struct npc_entropic_mine_122992 : public ScriptedAI
|
||||
{
|
||||
npc_entropic_mine_122992(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
SetCombatMovement(false);
|
||||
me->CastSpell(me, SPELL_ENTROPIC_MINE_2, true);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->IsWithinDist(who, 5.0f, false))
|
||||
{
|
||||
me->CastSpell(who, SPELL_ENTROPIC_BLAST, true);
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_antoran()
|
||||
{
|
||||
RegisterAntorusTheBurningThroneCreatureAI(boss_admiral_svirax);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_chief_engineer_ishkar_122369);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_general_erodus_122333);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_entropic_mine_122992);
|
||||
}
|
||||
@@ -0,0 +1,605 @@
|
||||
/*
|
||||
* This file is part of Wow Community
|
||||
*
|
||||
*/
|
||||
|
||||
#include "antorus_the_burning_throne.h"
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellScript.h"
|
||||
#include "PhasingHandler.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_PANTHEON_INTRO_MOVIE = 256945,
|
||||
SPELL_RAID_ANTORUS_BONUS_ROLL_PROMPT_BOSS11_LOOT = 250608, //SPELL_EFFECT_LOOT A 75888 B 438
|
||||
//Stage One: Storm and Sky
|
||||
SPELL_SWEEPING_SCYTHE = 248499,//phase 1 every 5-6s phase2 start 16-17s
|
||||
SPELL_CONE_OF_DEATH = 248165,// start 30s 19.4-24 256457,
|
||||
SPELL_SOULBLIGHT_ORB = 248317,// start 35 22-32
|
||||
SPELL_TORTURED_RAGE = 257296,//12 13-16
|
||||
SPELL_SKY_AND_SEA = 255594,//10 24.9-27.8
|
||||
//Stage one Mythic
|
||||
SPELL_SARGERAS_GAZE = 258068,//8 35
|
||||
//Stage Two: The Protector Redeemed
|
||||
SPELL_GOLGANNETHS_WRATH = 255648,
|
||||
SPELL_SOULBOMB = 251570,//30s 42s
|
||||
SPELL_SOULBURST = 250669,//30s 42s
|
||||
SPELL_EDGE_OF_OBLITERATION = 255826,//21s 34s
|
||||
//Aggramar's Aid BUFF
|
||||
SPELL_AVTAR_OF_AGGRAMAR = 255199,//21s 60S
|
||||
SPELL_AGGRAMARS_BOON = 255200,// player buff nearby
|
||||
//Stage Three: The Arcane Masters
|
||||
SPELL_CLEARALLDEBUFFS = 34098,
|
||||
SPELL_COSMIC_RAY = 252729,//30s 20s
|
||||
SPELL_COSMIC_BEACON = 252616,//40s 20s 14S NEXT
|
||||
//257645/Aman'thul will cast on Argu
|
||||
NPC_AMANTHUL = 125885,
|
||||
SPELL_TEMPORAL_BLAST = 257645,
|
||||
|
||||
//Norgannon's Aid 15 seconds after all the adds have spawned, Norgannon casts .
|
||||
NPC_NORGANNON = 126266,
|
||||
SPELL_THE_DISCS_OF_NORGANNNON = 252516, //15s
|
||||
//Stage Three Mythic
|
||||
SPELL_SOULRENDING_SCYTHE = 258838,// 8-9s
|
||||
SPELL_SENTENCE_OF_SARGERAS = 257966,//35s
|
||||
SPELL_EDGE_OF_ANNIHILATION = 258834, // 5-6s
|
||||
//Stage Four: The Gift of Life, The Forge of Loss (Non Mythic)
|
||||
//Argus has replaced with
|
||||
SPEEL_DEADLY_SCYTHE = 258039, // 5-6s
|
||||
//256388 Initialization Sequence 258029 Initialization Sequence (Mythic)
|
||||
SPELL_REORIGINATION_MODULE = 256389, //48s
|
||||
SPELL_REAP_SOUL = 256542,
|
||||
SPELL_GIFT_OF_THE_LIFEBINDER = 257619, //8
|
||||
|
||||
//PHASE 1
|
||||
SPELL_DEATH_FOG = 248167, //SPELL_CONE_OF_DEATH SPELL_SOULBLIGHT_ORB
|
||||
|
||||
//Golganneth's Aid BUFF
|
||||
SPELL_STRENGTH_OF_THE_SEA_MARK = 258647,
|
||||
SPELL_STRENGTH_OF_THE_SKY_MARK = 258646,
|
||||
SPELL_STRENGTH_OF_THE_SEA_AT = 257306,//253889
|
||||
SPELL_STRENGTH_OF_THE_SKY_AT = 257313,//253884
|
||||
SPELL_STRENGTH_OF_THE_SEA = 253901,
|
||||
SPELL_STRENGTH_OF_THE_SKY = 253903,
|
||||
//PHASE 2
|
||||
|
||||
SPELL_VOLATILE_SOUL = 252280,
|
||||
|
||||
SPELL_SOULBURST_DETONATION = 251572,
|
||||
|
||||
|
||||
|
||||
|
||||
//PHASE 3
|
||||
|
||||
//Constellar Designate adds can not be crowd controlled
|
||||
NPC_CONSTELLAR_DESIGNATE = 127192,
|
||||
SPELL_STARBLAST = 253061,// RANDOM
|
||||
|
||||
SPELL_COSMIC_SMASH = 252634,
|
||||
SPELL_SWORD_OF_THE_COSMOS = 255496,
|
||||
SPELL_COSMIC_POWER = 255935,
|
||||
|
||||
|
||||
//PHASE 4
|
||||
//Eonar's Aid Shortly after the raid dies, Eonar will create a [Gift of the Lifebinder] tree.
|
||||
NPC_EONAR = 126267,
|
||||
NPC_GIFT_OF_THE_LIFEBINDER = 129386,
|
||||
|
||||
SPELL_END_OF_ALL_THINGS = 256544,
|
||||
|
||||
NPC_SOULBLIGHT_ORB = 125008,
|
||||
SPELL_BLIGHT_ORB = 248376,
|
||||
SPELL_SOULBLIGHT = 248396,
|
||||
|
||||
NPC_HUNGERING_SOUL = 129635,
|
||||
|
||||
NPC_REORIGINATION_MODULE = 127809,
|
||||
SPELL_INITIALIZATION_SEQUENCE = 256388,
|
||||
SPELL_REORIGINATION_MODULE_DMG = 256396,
|
||||
NPC_GOLGANNETH = 126268,
|
||||
|
||||
HP_70 = 70,
|
||||
HP_40 = 40,
|
||||
HP_30 = 30,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
// Intro
|
||||
EVENT_INTRO = 1,
|
||||
EVENT_2 = 2,
|
||||
EVENT_3 = 3,
|
||||
EVENT_4 = 4,
|
||||
EVENT_5 = 5,
|
||||
};
|
||||
|
||||
///.go creature id
|
||||
struct boss_argus_the_unmaker : public BossAI
|
||||
{
|
||||
boss_argus_the_unmaker(Creature* creature) : BossAI(creature, DATA_ARGUS_THE_UNMAKER) { Initialize(); }
|
||||
|
||||
Position pos1 = { 2877.458f, -4592.133f, 292.0213f, 3.341679f };
|
||||
Position pos2 = { 3112.8728f, -9635.2373f, 62.25f, 3.137645f };
|
||||
uint32 _mobsCount = 0;
|
||||
void Initialize()
|
||||
{
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
if (IsMythic())
|
||||
{
|
||||
instance->DoCompleteAchievement(12002);
|
||||
}
|
||||
|
||||
instance->DoCompleteAchievement(11991);
|
||||
instance->DoCompleteAchievement(12266);
|
||||
|
||||
instance->AddTimedDelayedOperation(5000, [this]() -> void
|
||||
{
|
||||
instance->DoStartMovie(688);
|
||||
});
|
||||
instance->DoNearTeleportPlayers(pos2, false);
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (action == 1)
|
||||
{
|
||||
--_mobsCount;
|
||||
if (_mobsCount <= 0)
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->Attack(me->GetVictim(), true);
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
DoCastAOE(SPELL_CLEARALLDEBUFFS);
|
||||
|
||||
if (IsMythic())
|
||||
{
|
||||
events.ScheduleEvent(SPELL_SOULRENDING_SCYTHE, 5s);
|
||||
events.ScheduleEvent(SPELL_SENTENCE_OF_SARGERAS, 35s);
|
||||
events.ScheduleEvent(SPELL_EDGE_OF_ANNIHILATION, 5s);
|
||||
}
|
||||
events.ScheduleEvent(SPELL_SOULBOMB, 41s);
|
||||
events.ScheduleEvent(SPELL_SOULBURST, 41s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SwitchPhase(uint32 phase)
|
||||
{
|
||||
switch (phase)
|
||||
{
|
||||
case 1:
|
||||
PhaseStatus = 1;
|
||||
events.Reset();
|
||||
events.ScheduleEvent(SPELL_SWEEPING_SCYTHE, 5s, 6s);
|
||||
events.ScheduleEvent(SPELL_CONE_OF_DEATH, 30s);
|
||||
events.ScheduleEvent(SPELL_SOULBLIGHT_ORB, 35s);
|
||||
events.ScheduleEvent(SPELL_TORTURED_RAGE, 12s);
|
||||
events.ScheduleEvent(SPELL_SKY_AND_SEA, 10s);
|
||||
if (IsMythic())
|
||||
events.ScheduleEvent(SPELL_SARGERAS_GAZE, 8s);
|
||||
break;
|
||||
case 2:
|
||||
PhaseStatus = 2;
|
||||
events.Reset();
|
||||
DoCast(SPELL_GOLGANNETHS_WRATH);
|
||||
if (Creature* target = me->FindNearestCreature(NPC_GOLGANNETH, 150.0f, true))
|
||||
target->AI()->DoAction(2);
|
||||
//AREA CLEAR
|
||||
|
||||
instance->AddTimedDelayedOperation(2500, [this]() -> void
|
||||
{
|
||||
events.ScheduleEvent(SPELL_SWEEPING_SCYTHE, 16s, 17s);
|
||||
events.ScheduleEvent(SPELL_SOULBOMB, 30s);
|
||||
events.ScheduleEvent(SPELL_SOULBURST, 30s);
|
||||
events.ScheduleEvent(SPELL_EDGE_OF_OBLITERATION, 21s);
|
||||
events.ScheduleEvent(SPELL_AVTAR_OF_AGGRAMAR, 21s);
|
||||
if (IsMythic())
|
||||
events.ScheduleEvent(SPELL_SARGERAS_GAZE, 26s);
|
||||
});
|
||||
|
||||
//events.ScheduleEvent(SPELL_TORTURED_RAGE, 15s);
|
||||
events.ScheduleEvent(SPELL_VOLATILE_SOUL, 15s);
|
||||
events.ScheduleEvent(SPELL_SOULBURST_DETONATION, 15s);
|
||||
break;
|
||||
case 3:
|
||||
PhaseStatus = 3;
|
||||
events.Reset();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->AttackStop();
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->GetMotionMaster()->MovePoint(0, me->GetHomePosition());
|
||||
if (Creature* amanthul = me->FindNearestCreature(NPC_AMANTHUL, 150.0f, true))
|
||||
{
|
||||
amanthul->CastSpell(me, SPELL_TEMPORAL_BLAST, true);
|
||||
instance->AddTimedDelayedOperation(5000, [this, amanthul]() -> void
|
||||
{
|
||||
me->SetFacingToObject(amanthul);
|
||||
});
|
||||
DoCast(SPELL_TEMPORAL_BLAST);
|
||||
}
|
||||
_health = (uint64)(me->GetMaxHealth() * HP_40 / 100);
|
||||
me->SetHealth(_health);
|
||||
instance->AddTimedDelayedOperation(10000, [this]() -> void
|
||||
{
|
||||
//summon NPC
|
||||
_mobsCount = 7;
|
||||
if (Creature* norgannon = me->FindNearestCreature(NPC_NORGANNON, 150.0f, true))
|
||||
norgannon->CastSpell(me, SPELL_THE_DISCS_OF_NORGANNNON, true);
|
||||
//PhasingHandler::AddPhase(me, 170);
|
||||
});
|
||||
break;
|
||||
case 4:
|
||||
//phase4
|
||||
PhaseStatus = 4;
|
||||
events.Reset();
|
||||
instance->SetBossState(DATA_ARGUS_THE_UNMAKER, SPECIAL);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->GetMotionMaster()->MovePoint(1, me->GetHomePosition());
|
||||
instance->DoNearTeleportPlayers(Position(2887.892f, -4567.8f, 291.965f, 3.09f), false);
|
||||
_health = (uint64)(me->GetMaxHealth() * HP_30 / 100);
|
||||
me->SetHealth(_health);
|
||||
//DoAction(SPECIAL);
|
||||
instance->AddTimedDelayedOperation(12000, [this]() -> void
|
||||
{
|
||||
if (Creature* life = me->FindNearestCreature(NPC_EONAR, 150.0f, true))
|
||||
life->CastSpell(me, SPELL_GIFT_OF_THE_LIFEBINDER, true);
|
||||
});
|
||||
//SPELL_REAP_SOUL kill all
|
||||
if (Creature* amanthul = me->FindNearestCreature(NPC_AMANTHUL, 150.0f, true))
|
||||
me->SetFacingToObject(amanthul);
|
||||
DoCast(SPELL_REAP_SOUL);
|
||||
|
||||
instance->AddTimedDelayedOperation(20000, [this]() -> void
|
||||
{
|
||||
uint64 _health = (uint64)(me->GetMaxHealth() * HP_30 / 100);
|
||||
me->SetHealth(_health);
|
||||
if (Creature* life = me->FindNearestCreature(NPC_EONAR, 150.0f, true))
|
||||
life->SummonCreature(NPC_GIFT_OF_THE_LIFEBINDER, Position(2893.73f, -4545.36f, 292.028f, 3.77829f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
instance->DoResurrectPlayers(1.0f);
|
||||
});
|
||||
|
||||
instance->AddTimedDelayedOperation(22000, [this]() -> void
|
||||
{
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->Attack(me->GetVictim(), true);
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
events.ScheduleEvent(SPEEL_DEADLY_SCYTHE, 5s);
|
||||
events.ScheduleEvent(SPELL_REORIGINATION_MODULE, 48s);
|
||||
events.ScheduleEvent(SPELL_SOULBOMB, 80s);
|
||||
events.ScheduleEvent(SPELL_SOULBURST, 40s);
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
if (Creature* life = me->FindNearestCreature(NPC_GIFT_OF_THE_LIFEBINDER, 150.0f, true))
|
||||
life->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case SPELL_SWEEPING_SCYTHE:
|
||||
{
|
||||
DoCast(SPELL_SWEEPING_SCYTHE);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_TORTURED_RAGE:
|
||||
{
|
||||
DoCast(SPELL_TORTURED_RAGE);
|
||||
events.Repeat(13s, 16s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CONE_OF_DEATH:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_CONE_OF_DEATH, false);
|
||||
events.Repeat(19s, 24s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SOULBLIGHT_ORB:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_SOULBLIGHT_ORB, false);
|
||||
events.Repeat(22s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SKY_AND_SEA:
|
||||
{
|
||||
if (Creature* target = me->FindNearestCreature(NPC_GOLGANNETH, 150.0f, true))
|
||||
target->AI()->DoAction(1);
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
{
|
||||
me->CastSpell(target1, SPELL_STRENGTH_OF_THE_SEA_MARK, false);
|
||||
instance->AddTimedDelayedOperation(4000, [this, target1]() -> void
|
||||
{
|
||||
me->CastSpell(target1, SPELL_STRENGTH_OF_THE_SEA_AT, false);
|
||||
target1->CastSpell(target1, SPELL_STRENGTH_OF_THE_SEA, false);
|
||||
});
|
||||
}
|
||||
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
{
|
||||
me->CastSpell(target1, SPELL_STRENGTH_OF_THE_SKY_MARK, false);
|
||||
instance->AddTimedDelayedOperation(4000, [this, target1]() -> void
|
||||
{
|
||||
me->CastSpell(target1, SPELL_STRENGTH_OF_THE_SKY_AT, false);
|
||||
target1->CastSpell(target1, SPELL_STRENGTH_OF_THE_SKY, false);
|
||||
});
|
||||
}
|
||||
events.Repeat(25s, 28s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SARGERAS_GAZE:
|
||||
{
|
||||
DoCast(SPELL_SARGERAS_GAZE);
|
||||
events.Repeat(35s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SOULBOMB:
|
||||
{
|
||||
DoCast(SPELL_SOULBOMB);
|
||||
events.Repeat(42s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SOULBURST:
|
||||
{
|
||||
DoCast(SPELL_SOULBURST);//2 Targets
|
||||
events.Repeat(42s);
|
||||
break;
|
||||
}
|
||||
case SPELL_EDGE_OF_OBLITERATION:
|
||||
{
|
||||
DoCast(SPELL_EDGE_OF_OBLITERATION);
|
||||
events.Repeat(34s);
|
||||
break;
|
||||
}
|
||||
case SPELL_AVTAR_OF_AGGRAMAR:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
target1->CastSpell(target1, SPELL_AVTAR_OF_AGGRAMAR, true);
|
||||
events.Repeat(60s);
|
||||
break;
|
||||
}
|
||||
|
||||
case SPELL_SOULRENDING_SCYTHE:
|
||||
{
|
||||
DoCast(SPELL_SOULRENDING_SCYTHE);
|
||||
events.Repeat(8s, 9s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SENTENCE_OF_SARGERAS:
|
||||
{
|
||||
DoCast(SPELL_SENTENCE_OF_SARGERAS);
|
||||
events.Repeat(35s);
|
||||
break;
|
||||
}
|
||||
case SPELL_EDGE_OF_ANNIHILATION:
|
||||
{
|
||||
DoCast(SPELL_EDGE_OF_ANNIHILATION);
|
||||
events.Repeat(5s, 6s);
|
||||
break;
|
||||
}
|
||||
case SPEEL_DEADLY_SCYTHE:
|
||||
{
|
||||
DoCast(SPEEL_DEADLY_SCYTHE);
|
||||
events.Repeat(5s, 6s);
|
||||
break;
|
||||
}
|
||||
case SPELL_REORIGINATION_MODULE:
|
||||
{
|
||||
DoCast(SPELL_REORIGINATION_MODULE);
|
||||
events.Repeat(35s);
|
||||
break;
|
||||
}
|
||||
|
||||
case SPELL_VOLATILE_SOUL:
|
||||
{
|
||||
DoCast(SPELL_VOLATILE_SOUL);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
|
||||
case SPELL_SOULBURST_DETONATION:
|
||||
{
|
||||
DoCast(SPELL_SOULBURST_DETONATION);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (who->IsPlayer() && me->IsWithinDist(who, 50.0f, false))
|
||||
{
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
BossAI::JustSummoned(summon);
|
||||
switch (summon->GetEntry())
|
||||
{
|
||||
case NPC_HUNGERING_SOUL:
|
||||
case NPC_CONSTELLAR_DESIGNATE:
|
||||
case NPC_REORIGINATION_MODULE:
|
||||
{
|
||||
summon->SetFaction(me->GetFaction());
|
||||
break;
|
||||
}
|
||||
case NPC_SOULBLIGHT_ORB:
|
||||
{
|
||||
summon->SetFaction(me->GetFaction());
|
||||
summon->CastSpell(summon, SPELL_BLIGHT_ORB, true);
|
||||
summon->DespawnOrUnsummon(9s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
uint8 PhaseStatus;
|
||||
uint8 killCount;
|
||||
uint64 _health;
|
||||
};
|
||||
|
||||
struct npc_golganneth_126268 : public ScriptedAI
|
||||
{
|
||||
npc_golganneth_126268(Creature* creature) : ScriptedAI(creature) { }
|
||||
Position pos = { 2867.12f, -4567.54f, 292.942f };//center pos
|
||||
void DoAction(int32 param)
|
||||
{
|
||||
switch (param)
|
||||
{
|
||||
case 1:
|
||||
Talk(0);
|
||||
me->CastSpell(me, SPELL_SKY_AND_SEA, true);
|
||||
break;
|
||||
case 2:
|
||||
if (Creature* boss = me->FindNearestCreature(NPC_ARGUS_THE_UNMAKER, 150.0f, true))
|
||||
me->CastSpell(boss, SPELL_GOLGANNETHS_WRATH, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_constellar_designate_127192 : public ScriptedAI
|
||||
{
|
||||
npc_constellar_designate_127192(Creature* creature) : ScriptedAI(creature) { SetCombatMovement(false); }
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (Creature* boss = me->FindNearestCreature(NPC_ARGUS_THE_UNMAKER, 150.0f, true))
|
||||
boss->AI()->DoAction(1);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*attacker*/) override
|
||||
{
|
||||
events.ScheduleEvent(SPELL_STARBLAST, 8s);
|
||||
if (!IsMythic())
|
||||
events.ScheduleEvent(SPELL_COSMIC_RAY, 30s);
|
||||
events.ScheduleEvent(SPELL_COSMIC_BEACON, 40s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case SPELL_STARBLAST:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_STARBLAST, false);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_COSMIC_RAY:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_COSMIC_RAY, false);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
}
|
||||
case SPELL_COSMIC_BEACON:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_COSMIC_BEACON, false);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
DoSpellAttackIfReady(SPELL_STARBLAST);
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_gift_of_the_lifebinder_129386 : public ScriptedAI
|
||||
{
|
||||
npc_gift_of_the_lifebinder_129386(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
events.ScheduleEvent(SPELL_STARBLAST, 8s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case SPELL_STARBLAST:
|
||||
{
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
instance->DoResurrectPlayers(1.0f);
|
||||
events.Repeat(8s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_reorigination_module_127809 : public ScriptedAI
|
||||
{
|
||||
npc_reorigination_module_127809(Creature* creature) : ScriptedAI(creature) { SetCombatMovement(false); }
|
||||
|
||||
void JustEngagedWith(Unit* /*attacker*/) override
|
||||
{
|
||||
events.ScheduleEvent(SPELL_INITIALIZATION_SEQUENCE, 8s);
|
||||
events.ScheduleEvent(SPELL_REORIGINATION_MODULE_DMG, 45s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case SPELL_INITIALIZATION_SEQUENCE:
|
||||
{
|
||||
DoCastSelf(SPELL_INITIALIZATION_SEQUENCE);
|
||||
events.Repeat(30s);
|
||||
break;
|
||||
}
|
||||
case SPELL_REORIGINATION_MODULE_DMG:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
|
||||
me->CastSpell(target, SPELL_REORIGINATION_MODULE_DMG, false);
|
||||
events.Repeat(45s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_argus()
|
||||
{
|
||||
RegisterAntorusTheBurningThroneCreatureAI(boss_argus_the_unmaker);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_golganneth_126268);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_constellar_designate_127192);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_gift_of_the_lifebinder_129386);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_reorigination_module_127809);
|
||||
}
|
||||
@@ -0,0 +1,351 @@
|
||||
/*
|
||||
* This file is part of Wow Community
|
||||
*
|
||||
*/
|
||||
|
||||
#include "antorus_the_burning_throne.h"
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellScript.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "Log.h"
|
||||
#include "WaypointDefines.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_DESTROYERS_BOON = 244049,
|
||||
SPELL_SARGERAS_BLESSING = 246057,
|
||||
SPELL_FEL_IMBUEMENT = 253602,
|
||||
SPELL_TRAMPLE = 252044,
|
||||
|
||||
SPELL_DECAY = 245098,
|
||||
SPELL_CORRUPTING_MAW = 251447,
|
||||
SPELL_CORRUPTING_MAW_DAMAGE = 254760,
|
||||
SPELL_SIPHONED = 248819,
|
||||
SPELL_CONSUMING_SPHERE = 244131,
|
||||
|
||||
|
||||
SPELL_BURNING_MAW = 254747,
|
||||
SPELL_DESOLATE_GAZE = 244768,
|
||||
|
||||
//hero
|
||||
SPELL_WEIGHT_OF_DARKNESS = 244071,
|
||||
SPELL_MOLTEN_TOUCH = 244086,
|
||||
};
|
||||
|
||||
|
||||
struct boss_shatug_fhargAI : public BossAI
|
||||
{
|
||||
boss_shatug_fhargAI(Creature* creature) : BossAI(creature, DATA_FELHOUNDS_OF_SAGERAS)
|
||||
{
|
||||
Initialize();
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_DESTROYERS_BOON);
|
||||
DoCastSelf(SPELL_TRAMPLE);
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
|
||||
virtual bool IAmShatug() = 0;
|
||||
virtual void Reset() override = 0;
|
||||
|
||||
void TwinReset()
|
||||
{
|
||||
Initialize();
|
||||
me->ClearUnitState(UNIT_STATE_STUNNED);
|
||||
}
|
||||
|
||||
void TwinDistanceAura()
|
||||
{
|
||||
if (!me->IsAlive())
|
||||
return;
|
||||
|
||||
Creature* pOtherBoss = GetOtherBoss();
|
||||
if (!pOtherBoss)
|
||||
return;
|
||||
if (me->GetDistance(pOtherBoss->GetPosition()) <= 40.0f)
|
||||
{
|
||||
me->CastSpell(pOtherBoss, SPELL_SARGERAS_BLESSING, true);
|
||||
me->RemoveAurasDueToSpell(SPELL_FEL_IMBUEMENT);
|
||||
pOtherBoss->RemoveAurasDueToSpell(SPELL_FEL_IMBUEMENT);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//SPELL_FEL_IMBUEMENT
|
||||
DoCastSelf(SPELL_FEL_IMBUEMENT);
|
||||
pOtherBoss->AI()->DoCastSelf(SPELL_FEL_IMBUEMENT);
|
||||
me->RemoveAurasDueToSpell(SPELL_SARGERAS_BLESSING);
|
||||
pOtherBoss->RemoveAurasDueToSpell(SPELL_SARGERAS_BLESSING);
|
||||
}
|
||||
}
|
||||
|
||||
Creature* GetOtherBoss()
|
||||
{
|
||||
return IAmShatug() ? me->FindNearestCreature(NPC_FHARG, 500.0f) : me->FindNearestCreature(NPC_SHATUG, 500.0f);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
Creature* pOtherBoss = GetOtherBoss();
|
||||
if (pOtherBoss)
|
||||
{
|
||||
pOtherBoss->SetHealth(0);
|
||||
pOtherBoss->setDeathState(JUST_DIED);
|
||||
pOtherBoss->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
||||
}
|
||||
me->SummonCreature(128289, Position(-3224.603f, 10388.73f, -155.3857f, 1.190612f), TEMPSUMMON_MANUAL_DESPAWN);
|
||||
if (instance)
|
||||
instance->DoPlayConversation(5523);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
JustEngagedWith(who);
|
||||
Creature* pOtherBoss = GetOtherBoss();
|
||||
if (pOtherBoss)
|
||||
{
|
||||
/// @todo we should activate the other boss location so he can start attackning even if nobody
|
||||
// is near I dont know how to do that
|
||||
if (!pOtherBoss->IsInCombat())
|
||||
{
|
||||
CreatureAI* otherAI = pOtherBoss->AI();
|
||||
otherAI->AttackStart(who);
|
||||
otherAI->DoZoneInCombat();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct boss_shatug : public boss_shatug_fhargAI
|
||||
{
|
||||
bool IAmShatug() override { return true; }
|
||||
boss_shatug(Creature* creature) : boss_shatug_fhargAI(creature)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
TwinReset();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
if (instance)
|
||||
instance->DoPlayConversation(5522);
|
||||
events.ScheduleEvent(SPELL_SARGERAS_BLESSING, 1s);
|
||||
|
||||
events.ScheduleEvent(SPELL_DECAY, 5s);
|
||||
events.ScheduleEvent(SPELL_CORRUPTING_MAW, 5s);
|
||||
events.ScheduleEvent(SPELL_CORRUPTING_MAW_DAMAGE, 5s);
|
||||
events.ScheduleEvent(SPELL_SIPHONED, 5s);
|
||||
events.ScheduleEvent(SPELL_CONSUMING_SPHERE, 5s);
|
||||
if (me->GetMap()->IsHeroic() || me->GetMap()->IsMythic())
|
||||
events.ScheduleEvent(SPELL_WEIGHT_OF_DARKNESS, 30s, 40s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
|
||||
switch (eventId)
|
||||
{
|
||||
case SPELL_SARGERAS_BLESSING:
|
||||
{
|
||||
TwinDistanceAura();
|
||||
events.Repeat(1s);
|
||||
break;
|
||||
}
|
||||
case SPELL_DECAY:
|
||||
{
|
||||
DoCast(SPELL_DECAY);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CORRUPTING_MAW:
|
||||
{
|
||||
DoCast(SPELL_CORRUPTING_MAW);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CORRUPTING_MAW_DAMAGE:
|
||||
{
|
||||
DoCast(SPELL_CORRUPTING_MAW_DAMAGE);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_SIPHONED:
|
||||
{
|
||||
//random
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_SIPHONED, false);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CONSUMING_SPHERE:
|
||||
{
|
||||
//random
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_CONSUMING_SPHERE, false);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_WEIGHT_OF_DARKNESS:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_WEIGHT_OF_DARKNESS, false);
|
||||
events.Repeat(30s, 45s);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct boss_fharg : public boss_shatug_fhargAI
|
||||
{
|
||||
bool IAmShatug() override { return false; }
|
||||
boss_fharg(Creature* creature) : boss_shatug_fhargAI(creature)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
TwinReset();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
events.ScheduleEvent(SPELL_SARGERAS_BLESSING, 1s);
|
||||
events.ScheduleEvent(SPELL_CORRUPTING_MAW, 5s);
|
||||
events.ScheduleEvent(SPELL_DESOLATE_GAZE, 5s);
|
||||
|
||||
events.ScheduleEvent(SPELL_CONSUMING_SPHERE, 5s);
|
||||
if (me->GetMap()->IsHeroic() || me->GetMap()->IsMythic())
|
||||
events.ScheduleEvent(SPELL_MOLTEN_TOUCH, 30s, 40s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
|
||||
switch (eventId)
|
||||
{
|
||||
case SPELL_SARGERAS_BLESSING:
|
||||
{
|
||||
TwinDistanceAura();
|
||||
events.Repeat(1s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CORRUPTING_MAW:
|
||||
{
|
||||
DoCast(SPELL_CORRUPTING_MAW);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_DESOLATE_GAZE:
|
||||
{
|
||||
DoCast(SPELL_DESOLATE_GAZE);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
}
|
||||
case SPELL_CONSUMING_SPHERE:
|
||||
{
|
||||
//random
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_CONSUMING_SPHERE, false);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
}
|
||||
case SPELL_MOLTEN_TOUCH:
|
||||
{
|
||||
if (Unit* target1 = SelectTarget(SelectTargetMethod::Random, 0.0, 0.0, true))
|
||||
me->CastSpell(target1, SPELL_MOLTEN_TOUCH, false);
|
||||
events.Repeat(30s, 45s);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
//SPELL_GATEWAY = 254464,
|
||||
SPELL_GATEWAY = 253773,
|
||||
};
|
||||
|
||||
enum Points
|
||||
{
|
||||
POINT_1,
|
||||
};
|
||||
|
||||
WaypointPath const Path01 =
|
||||
{
|
||||
POINT_1,
|
||||
{
|
||||
{ 0, -3211.96f, 10384.4f, -155.4712f },
|
||||
{ 1, -3191.431f, 10370.25f, -108.6854f },
|
||||
{ 2, -3111.775879f, 10468.264648f, -76.464317f },
|
||||
{ 3, -3084.96582f, 10496.886719f, -110.809273f }
|
||||
},
|
||||
WaypointMoveType::Run,
|
||||
WaypointPathFlags::FlyingPath
|
||||
};
|
||||
|
||||
struct npc_lightforged_teleport_pod_128289 : public ScriptedAI
|
||||
{
|
||||
npc_lightforged_teleport_pod_128289(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void IsSummonedBy(WorldObject* /*summoner*/) override
|
||||
{
|
||||
me->SetNpcFlag(UNIT_NPC_FLAG_SPELLCLICK);
|
||||
}
|
||||
|
||||
void OnSpellClick(Unit* clicker, bool /*spellClickHandled*/) override
|
||||
{
|
||||
if (Player* player = clicker->ToPlayer())
|
||||
{
|
||||
player->CastSpell(player, SPELL_GATEWAY, true);
|
||||
player->GetMotionMaster()->MovePath(Path01, false);
|
||||
me->GetScheduler().Schedule(Milliseconds(4000), [player](TaskContext context)
|
||||
{
|
||||
player->CastSpell(player, SPELL_GATEWAY, true);
|
||||
if (context.GetRepeatCounter() < 4)
|
||||
context.Repeat(4s);
|
||||
});
|
||||
if (instance)
|
||||
instance->DoPlayConversation(5524);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* instance = me->GetInstanceScript();
|
||||
};
|
||||
|
||||
void AddSC_boss_felhounds()
|
||||
{
|
||||
RegisterAntorusTheBurningThroneCreatureAI(npc_lightforged_teleport_pod_128289);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(boss_fharg);
|
||||
RegisterAntorusTheBurningThroneCreatureAI(boss_shatug);
|
||||
}
|
||||
@@ -17,6 +17,10 @@
|
||||
|
||||
// This is where scripts' loading functions should be declared:
|
||||
void AddSC_boss_garothi_worldbreaker();
|
||||
void AddSC_boss_aggramar();
|
||||
void AddSC_boss_antoran();
|
||||
void AddSC_boss_argus();
|
||||
void AddSC_boss_felhounds();
|
||||
void AddSC_instance_antorus_the_burning_throne();
|
||||
|
||||
// The name of this function should match:
|
||||
@@ -24,5 +28,9 @@ void AddSC_instance_antorus_the_burning_throne();
|
||||
void AddArgusScripts()
|
||||
{
|
||||
AddSC_boss_garothi_worldbreaker(); // Antorus the Burning Throne
|
||||
AddSC_boss_aggramar();
|
||||
AddSC_boss_antoran();
|
||||
AddSC_boss_argus();
|
||||
AddSC_boss_felhounds();
|
||||
AddSC_instance_antorus_the_burning_throne();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user