Full aberrus
This commit is contained in:
+3
@@ -37,7 +37,10 @@ enum AberrusDataTypes
|
||||
DATA_MAGMORAX = 6,
|
||||
DATA_ECHO_OF_NELTHARION = 7,
|
||||
DATA_SCALECOMMANDER_SARKARETH = 8,
|
||||
DATA_KAZZARA_INTRO = 9,
|
||||
|
||||
DATA_NELDRIS = 10,
|
||||
DATA_THADRION = 11,
|
||||
// Creatures
|
||||
DATA_SARKARETH_AT_KAZZARA,
|
||||
|
||||
|
||||
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
* This file is part of DekkCore Team
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "CellImpl.h"
|
||||
#include "GameObject.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "aberrus_the_shadowed_crucible.h"
|
||||
|
||||
enum magmoraxSpells
|
||||
{
|
||||
PERIODIC_ENERGY_GAIN = 299956,
|
||||
SPELL_BLAZING_BREATH = 409093,//need test
|
||||
SPELL_BLAZING_BREATH_DAMAGE = 410684,//need test
|
||||
SPELL_BLAZING_TANTRUM = 407879,//ready
|
||||
SPELL_CATASTROPHIC_ERUPTION = 408358,//ready,
|
||||
SPELL_CATASTROPHIC_ERUPTION_DAMAGE = 408359,//ready
|
||||
SPELL_EXPLOSIVE_MAGMA = 411149,//ready
|
||||
SPELL_IGNITING_ROAR = 403740,//ready
|
||||
SPELL_IGNITING_ROAR_DAMAGE = 403747,//ready
|
||||
SPELL_INCINERATING_MAWS = 404846,//need test
|
||||
SPELL_INCINERATING_MAWS_AURA = 408966,//need test
|
||||
SPELL_INCINERATING_MAWS_DAMAGE = 401348,//need test
|
||||
SPELL_INCINERATING_MAWS_AT = 404776,//401507,need script
|
||||
SPELL_LAVA_EJECTION = 413367,//ready
|
||||
SPELL_MOLTEN_SPITTLE = 411692,//need test
|
||||
SPELL_MOLTEN_SPITTLE_PERIODIC = 411695,//need test
|
||||
SPELL_MOLTEN_SPITTLE_DAMAGE = 411697,//need test
|
||||
SPELL_OVERPOWERING_STOMP = 403671,//ready
|
||||
};
|
||||
|
||||
enum magmoraxEvents
|
||||
{
|
||||
EVENT_BLAZING_BREATH = 2,
|
||||
EVENT_BLAZING_TANTRUM = 3,
|
||||
EVENT_CATASTROPHIC_ERUPTION = 4,
|
||||
EVENT_EXPLOSIVE_MAGMA = 5,
|
||||
EVENT_IGNITING_ROAR = 6,
|
||||
EVENT_INCINERATING_MAWS = 7,
|
||||
EVENT_LAVA_EJECTION = 8,
|
||||
EVENT_MOLTEN_SPITTLE = 9,
|
||||
EVENT_OVERPOWERING_STOMP = 10,
|
||||
};
|
||||
|
||||
// 201579
|
||||
struct boss_magmorax : public BossAI
|
||||
{
|
||||
boss_magmorax(Creature* creature) : BossAI(creature, DATA_MAGMORAX)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (!instance->GetData(DATA_MAGMORAX))
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
if (instance)
|
||||
instance->SetBossState(DATA_MAGMORAX, DONE);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_CATASTROPHIC_ERUPTION);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_BLAZING_BREATH, 24s);
|
||||
events.ScheduleEvent(EVENT_BLAZING_TANTRUM, 27s);
|
||||
events.ScheduleEvent(EVENT_EXPLOSIVE_MAGMA, 14s);
|
||||
events.ScheduleEvent(EVENT_IGNITING_ROAR, 20s);
|
||||
events.ScheduleEvent(EVENT_INCINERATING_MAWS, 12s);
|
||||
events.ScheduleEvent(EVENT_LAVA_EJECTION, 9s);
|
||||
events.ScheduleEvent(EVENT_MOLTEN_SPITTLE, 80s);
|
||||
events.ScheduleEvent(EVENT_OVERPOWERING_STOMP, 32s);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
DoCast(me, SPELL_CATASTROPHIC_ERUPTION);
|
||||
DoCast(me, SPELL_CATASTROPHIC_ERUPTION_DAMAGE);
|
||||
}
|
||||
|
||||
std::list<Player*> targetList;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_BLAZING_BREATH:
|
||||
DoCast(SPELL_BLAZING_BREATH);
|
||||
DoCastVictim(SPELL_BLAZING_BREATH_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_BLAZING_BREATH, 31s);
|
||||
break;
|
||||
case EVENT_BLAZING_TANTRUM:
|
||||
DoCast(SPELL_BLAZING_TANTRUM);
|
||||
events.ScheduleEvent(EVENT_BLAZING_TANTRUM, 71s);
|
||||
break;
|
||||
case EVENT_EXPLOSIVE_MAGMA:
|
||||
DoCastVictim(SPELL_EXPLOSIVE_MAGMA);
|
||||
events.ScheduleEvent(EVENT_EXPLOSIVE_MAGMA, 60s);
|
||||
break;
|
||||
case EVENT_IGNITING_ROAR:
|
||||
DoCast(SPELL_IGNITING_ROAR);
|
||||
DoCastVictim(SPELL_IGNITING_ROAR_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_IGNITING_ROAR, 18s);
|
||||
break;
|
||||
case EVENT_INCINERATING_MAWS:
|
||||
DoCastVictim(SPELL_INCINERATING_MAWS);
|
||||
DoCastVictim(SPELL_INCINERATING_MAWS_AURA);
|
||||
DoCastVictim(SPELL_INCINERATING_MAWS_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_INCINERATING_MAWS, 25s);
|
||||
break;
|
||||
case EVENT_LAVA_EJECTION:
|
||||
DoCastVictim(SPELL_LAVA_EJECTION);
|
||||
me->GetPlayerListInGrid(targetList, 150.0f);
|
||||
for (Player* targets : targetList)
|
||||
{
|
||||
if (targets->HasAura(SPELL_CATASTROPHIC_ERUPTION_DAMAGE))
|
||||
targets->RemoveAurasDueToSpell(SPELL_CATASTROPHIC_ERUPTION_DAMAGE);
|
||||
if (targets->HasAura(SPELL_BLAZING_TANTRUM))
|
||||
targets->RemoveAurasDueToSpell(SPELL_BLAZING_TANTRUM);
|
||||
}
|
||||
me->RemoveAurasDueToSpell(SPELL_CATASTROPHIC_ERUPTION);
|
||||
me->RemoveAurasDueToSpell(SPELL_CATASTROPHIC_ERUPTION_DAMAGE);
|
||||
me->RemoveAurasDueToSpell(SPELL_BLAZING_TANTRUM);
|
||||
events.ScheduleEvent(EVENT_LAVA_EJECTION, 12s);
|
||||
break;
|
||||
case EVENT_MOLTEN_SPITTLE:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_MOLTEN_SPITTLE, false);
|
||||
me->CastSpell(target, SPELL_MOLTEN_SPITTLE_PERIODIC, false);
|
||||
me->CastSpell(target, SPELL_MOLTEN_SPITTLE_DAMAGE, false);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_MOLTEN_SPITTLE, 46s);
|
||||
break;
|
||||
case EVENT_OVERPOWERING_STOMP:
|
||||
DoCast(SPELL_OVERPOWERING_STOMP);
|
||||
events.ScheduleEvent(EVENT_OVERPOWERING_STOMP, 80s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_magmorax()
|
||||
{
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_magmorax);
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
/*
|
||||
* This file is part of DekkCore Team
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "CellImpl.h"
|
||||
#include "GameObject.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "aberrus_the_shadowed_crucible.h"
|
||||
|
||||
enum rashoktheelderSpells
|
||||
{
|
||||
PERIODIC_ENERGY_GAIN = 299956,
|
||||
SPELL_ANCIENT_FURY = 405316,//ready
|
||||
SPELL_CHARGED_SMASH = 400777,//ready
|
||||
SPELL_DOOM_FLAMES = 406851,//need test
|
||||
SPELL_DOOM_FLAMES_DAMAGE = 406153,//need test
|
||||
SPELL_EARTHEN_CRUSH = 334575,//need test
|
||||
SPELL_EARTHEN_CRUSH_DAMAGE = 407597,//need test
|
||||
SPELL_ELDERS_CONDUIT = 401419,//ready
|
||||
SPELL_FLAMING_SLASH = 403203,//need test
|
||||
SPELL_FLAMING_SLASH_DAMAGE = 407547,//need test
|
||||
SPELL_OVERCHARGED = 405827,//ready
|
||||
SPELL_SCORCHED_FLESH = 408204, // need test
|
||||
SPELL_SEARING_SLAM = 405819, //need test
|
||||
SPELL_SEARING_SLAM_TRIGGER = 408684, //need test
|
||||
SPELL_SEARING_SLAM_DAMAGE = 405821, //no damage
|
||||
SPELL_SHADOWLAVA_BLAST = 406333,//ready
|
||||
SPELL_SMOLDERING_RAGE = 405091,//ready
|
||||
SPELL_SMOLDERING_RAGE_TRIGGER = 411738,// need fix
|
||||
SPELL_SMOLDERING_RAGE_PERIODIC = 405091,// need test
|
||||
SPELL_SMOLDERING_RAGE_DAMAGE = 411739,// need fix
|
||||
SPELL_SUMMON_DJARUUN = 411740,// need fix
|
||||
SPELL_UNLEASH_SHADOWFLAME = 410070,//ready
|
||||
SPELL_WRATH_OF_DJARUUN = 407641,// need fix
|
||||
};
|
||||
|
||||
enum rashoktheelderEvents
|
||||
{
|
||||
EVENT_ANCIENT_FURY = 2,
|
||||
EVENT_CHARGED_SMASH = 3,
|
||||
EVENT_DOOM_FLAMES = 4,
|
||||
EVENT_EARTHEN_CRUSH = 5,
|
||||
EVENT_FLAMING_SLASH = 6,
|
||||
EVENT_OVERCHARGED = 7,
|
||||
EVENT_SCORCHED_FLESH = 8,
|
||||
EVENT_SEARING_SLAM = 9,
|
||||
EVENT_SHADOWLAVA_BLAST = 10,
|
||||
EVENT_SMOLDERING_RAGE = 11,
|
||||
EVENT_SUMMON_DJARUUN = 12,
|
||||
EVENT_UNLEASH_SHADOWFLAME = 13,
|
||||
EVENT_WRATH_OF_DJARUUN = 14,
|
||||
|
||||
};
|
||||
|
||||
// 201320
|
||||
struct boss_rashok_the_elder : public BossAI
|
||||
{
|
||||
boss_rashok_the_elder(Creature* creature) : BossAI(creature, DATA_RASHOK_THE_ELDER)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (!instance->GetData(DATA_RASHOK_THE_ELDER))
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
if (instance)
|
||||
instance->SetBossState(DATA_RASHOK_THE_ELDER, DONE);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_ELDERS_CONDUIT);
|
||||
me->RemoveAurasDueToSpell(SPELL_ANCIENT_FURY);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_ANCIENT_FURY, 24s);
|
||||
events.ScheduleEvent(EVENT_CHARGED_SMASH, 27s);
|
||||
events.ScheduleEvent(EVENT_DOOM_FLAMES, 60s);
|
||||
events.ScheduleEvent(EVENT_EARTHEN_CRUSH, 14s);
|
||||
events.ScheduleEvent(EVENT_FLAMING_SLASH, 20s);
|
||||
events.ScheduleEvent(EVENT_OVERCHARGED, 12s);
|
||||
events.ScheduleEvent(EVENT_SCORCHED_FLESH, 90s);
|
||||
events.ScheduleEvent(EVENT_SEARING_SLAM, 80s);
|
||||
events.ScheduleEvent(EVENT_SHADOWLAVA_BLAST, 32s);
|
||||
events.ScheduleEvent(EVENT_SMOLDERING_RAGE, 44s);
|
||||
events.ScheduleEvent(EVENT_SUMMON_DJARUUN, 55s);
|
||||
events.ScheduleEvent(EVENT_UNLEASH_SHADOWFLAME, 66s);
|
||||
events.ScheduleEvent(EVENT_WRATH_OF_DJARUUN, 70s);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
DoCast(me, SPELL_ELDERS_CONDUIT);
|
||||
}
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ANCIENT_FURY:
|
||||
DoCast(SPELL_ANCIENT_FURY);
|
||||
events.ScheduleEvent(EVENT_ANCIENT_FURY, 65s);
|
||||
break;
|
||||
case EVENT_CHARGED_SMASH:
|
||||
DoCastVictim(SPELL_CHARGED_SMASH);
|
||||
events.ScheduleEvent(EVENT_CHARGED_SMASH, 27s);
|
||||
break;
|
||||
case EVENT_DOOM_FLAMES:
|
||||
DoCastVictim(SPELL_DOOM_FLAMES);
|
||||
DoCastVictim(SPELL_DOOM_FLAMES_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_DOOM_FLAMES, 60s);
|
||||
break;
|
||||
case EVENT_EARTHEN_CRUSH:
|
||||
DoCastVictim(SPELL_EARTHEN_CRUSH);
|
||||
DoCastVictim(SPELL_EARTHEN_CRUSH_DAMAGE);
|
||||
me->RemoveAurasDueToSpell(SPELL_ANCIENT_FURY);
|
||||
me->RemoveAurasDueToSpell(SPELL_ELDERS_CONDUIT);
|
||||
events.ScheduleEvent(EVENT_EARTHEN_CRUSH, 14s);
|
||||
break;
|
||||
case EVENT_FLAMING_SLASH:
|
||||
DoCastVictim(SPELL_FLAMING_SLASH);
|
||||
DoCastVictim(SPELL_FLAMING_SLASH_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_FLAMING_SLASH, 21s);
|
||||
break;
|
||||
case EVENT_OVERCHARGED:
|
||||
DoCastVictim(SPELL_OVERCHARGED);
|
||||
events.ScheduleEvent(EVENT_OVERCHARGED, 31s);
|
||||
break;
|
||||
case EVENT_SCORCHED_FLESH:
|
||||
DoCastVictim(SPELL_SCORCHED_FLESH);
|
||||
events.ScheduleEvent(EVENT_SCORCHED_FLESH, 90s);
|
||||
break;
|
||||
case EVENT_SEARING_SLAM:
|
||||
DoCastVictim(SPELL_SEARING_SLAM);
|
||||
DoCastVictim(SPELL_SEARING_SLAM_TRIGGER);
|
||||
DoCastVictim(SPELL_SEARING_SLAM_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_SEARING_SLAM, 80s);
|
||||
break;
|
||||
case EVENT_SHADOWLAVA_BLAST:
|
||||
DoCastVictim(SPELL_SHADOWLAVA_BLAST);
|
||||
events.ScheduleEvent(EVENT_SHADOWLAVA_BLAST, 32s);
|
||||
break;
|
||||
case EVENT_SMOLDERING_RAGE:
|
||||
DoCastVictim(SPELL_SMOLDERING_RAGE);
|
||||
DoCastVictim(SPELL_SMOLDERING_RAGE_TRIGGER);
|
||||
DoCastVictim(SPELL_SMOLDERING_RAGE_PERIODIC);
|
||||
DoCastVictim(SPELL_SMOLDERING_RAGE_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_SMOLDERING_RAGE, 44s);
|
||||
break;
|
||||
case EVENT_SUMMON_DJARUUN:
|
||||
DoCastVictim(SPELL_SUMMON_DJARUUN);
|
||||
events.ScheduleEvent(EVENT_SUMMON_DJARUUN, 55s);
|
||||
break;
|
||||
case EVENT_UNLEASH_SHADOWFLAME:
|
||||
DoCastVictim(SPELL_UNLEASH_SHADOWFLAME);
|
||||
events.ScheduleEvent(EVENT_UNLEASH_SHADOWFLAME, 66s);
|
||||
break;
|
||||
case EVENT_WRATH_OF_DJARUUN:
|
||||
DoCastVictim(SPELL_WRATH_OF_DJARUUN);
|
||||
events.ScheduleEvent(EVENT_WRATH_OF_DJARUUN, 70s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_rashok_the_elder()
|
||||
{
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_rashok_the_elder);
|
||||
}
|
||||
+403
@@ -0,0 +1,403 @@
|
||||
/*
|
||||
* This file is part of DekkCore Team
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "CellImpl.h"
|
||||
#include "GameObject.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "aberrus_the_shadowed_crucible.h"
|
||||
|
||||
enum scalecommandersarkarethSpells
|
||||
{
|
||||
PERIODIC_ENERGY_GAIN = 299956,
|
||||
SPELL_ABYSSAL_BREATH = 410243,//need test
|
||||
SPELL_ABYSSAL_BREATH_AT = 404474,//need script
|
||||
SPELL_BURNING_CLAWS = 401325,//need test
|
||||
SPELL_BURNING_CLAWS_DAMAGE = 401339,//no damage
|
||||
SPELL_BURNING_CLAWS_AREA = 403120,//need test
|
||||
SPELL_BURNING_CLAWS_AREA_DAAMGE = 417928,//need script
|
||||
SPELL_BURNING_CLAWS_AREA_AURAE = 401330,//need script
|
||||
SPELL_BURNING_GROUND = 406989,//ready
|
||||
SPELL_COSMIC_ASCENSION = 403766,//need test
|
||||
SPELL_COSMIC_ASCENSION_DAMAGE = 403771,//need test
|
||||
SPELL_DAZZIED = 401905,//ready
|
||||
SPELL_DESOLATE_BLOSSOM = 404403,//need test
|
||||
SPELL_DESOLATE_BLOSSOM_SUMMON = 404417,//need test
|
||||
SPELL_DESOLATE_BLOSSOM_HEAL_ABSORB = 404425,//need test
|
||||
SPELL_DESTABILIZE = 351092,//need test 408805
|
||||
SPELL_DESTABILIZE_DEBUFF = 334695,//need test
|
||||
SPELL_EBON_MIGHT = 404269, //ready
|
||||
SPELL_EMBRACE_OF_NOTHINGNESS = 403517,//ready
|
||||
SPELL_EMBRACE_OF_NOTHINGNESS_DAMAGE = 403520,//ready
|
||||
SPELL_END_EXISTENCE = 410611,//need test
|
||||
SPELL_ENGULFING_VOID = 405933,//ready
|
||||
SPELL_ENGULFING_VOID_DAMAGE = 405934,//ready
|
||||
SPELL_GLITERING_SURGE = 401810,//ready
|
||||
SPELL_HURTING_BARRAGE = 405485,//need test
|
||||
SPELL_INFINITE_DURESS = 404288,//ready
|
||||
SPELL_INFINITE_DURESS_DAMAGE = 407496,//ready
|
||||
SPELL_MASS_DISINTEGRATE = 401642,//need test
|
||||
SPELL_MASS_DISINTEGRATE_SUMMON = 401653,//need test
|
||||
SPELL_MASS_DISINTEGRATE_TRIGGER = 401642,//need test
|
||||
SPELL_MASS_DISINTEGRATE_DAMAGE = 402600,//need test
|
||||
SPELL_OBLIVION = 417537,//need test
|
||||
SPELL_OBLIVION_DAMAGE = 401952,//need test
|
||||
SPELL_OPPRESSING_HOWL = 401383,//ready
|
||||
SPELL_SCORCHING_BOMB = 401500,//ready
|
||||
SPELL_SCORCHING_DETONATION = 401525,//ready
|
||||
SPELL_SCOURING_ETERNITY = 403625,//ready
|
||||
SPELL_SEARING_BREATH = 402050,//ready
|
||||
SPELL_SEARING_BREATH_DAMAGE = 402051,//ready
|
||||
SPELL_VOID_BOMB = 404027,//ready
|
||||
SPELL_VOID_CLAWS = 408448,//need test
|
||||
SPELL_VOID_CLAWS_DAMAGE = 411242,//need test
|
||||
SPELL_VOID_EMPOWERMENT = 403284,//ready
|
||||
SPELL_VOID_FRACTURE = 410642,//ready
|
||||
SPELL_VOID_MIGHT = 413106,//ready
|
||||
SPELL_VOID_SLASH = 408429,//need test
|
||||
SPELL_VOID_SLASH_DAMAGE = 315746,//need test
|
||||
SPELL_VOID_SURGE = 404154,//ready
|
||||
};
|
||||
|
||||
enum scalecommandersarkarethEvents
|
||||
{
|
||||
EVENT_ABYSSAL_BREATH = 2,
|
||||
EVENT_BURNING_CLAWS = 3,
|
||||
EVENT_BURNING_GROUND = 4,
|
||||
EVENT_COSMIC_ASCENSION = 5,
|
||||
EVENT_DAZZIED = 6,
|
||||
EVENT_DESOLATE_BLOSSOM = 7,
|
||||
EVENT_DESTABILIZE = 8,
|
||||
EVENT_EBON_MIGHT = 9,
|
||||
EVENT_EMBRACE_OF_NOTHINGNESS = 10,
|
||||
EVENT_END_EXISTENCE = 11,
|
||||
EVENT_ENGULFING_VOID = 12,
|
||||
EVENT_GLITERING_SURGE = 13,
|
||||
EVENT_HURTING_BARRAGE = 14,
|
||||
EVENT_INFINITE_DURESS = 15,
|
||||
EVENT_MASS_DISINTEGRATE = 16,
|
||||
EVENT_OBLIVION = 17,
|
||||
EVENT_OPPRESSING_HOWL = 18,
|
||||
EVENT_SCORCHING_BOMB = 19,
|
||||
EVENT_SCORCHING_DETONATION = 20,
|
||||
EVENT_SCOURING_ETERNITY = 21,
|
||||
EVENT_SEARING_BREATH = 22,
|
||||
EVENT_VOID_BOMB = 23,
|
||||
EVENT_VOID_CLAWS = 24,
|
||||
EVENT_VOID_EMPOWERMENT = 25,
|
||||
EVENT_VOID_FRACTURE = 26,
|
||||
EVENT_VOID_MIGHT = 27,
|
||||
EVENT_VOID_SLASH = 28,
|
||||
EVENT_VOID_SURGE = 29,
|
||||
};
|
||||
|
||||
enum scalecommandersarkarethAchievement
|
||||
{
|
||||
ACHIEVEMENT_MYTHIC_SARKARETH = 18159
|
||||
};
|
||||
|
||||
// 201754
|
||||
struct boss_scale_commander_sarkareth : public BossAI
|
||||
{
|
||||
boss_scale_commander_sarkareth(Creature* creature) : BossAI(creature, DATA_SCALECOMMANDER_SARKARETH)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENGULFING_VOID_DAMAGE);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_OPPRESSING_HOWL);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BURNING_GROUND);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DESTABILIZE);
|
||||
me->RemoveAurasDueToSpell(SPELL_ENGULFING_VOID);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (!instance->GetData(DATA_SCALECOMMANDER_SARKARETH))
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
if (instance)
|
||||
instance->SetBossState(DATA_SCALECOMMANDER_SARKARETH, DONE);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
EndEncounter();
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENGULFING_VOID_DAMAGE);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_OPPRESSING_HOWL);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BURNING_GROUND);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DESTABILIZE);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_MASS_DISINTEGRATE);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_ABYSSAL_BREATH, 90s);
|
||||
events.ScheduleEvent(EVENT_BURNING_CLAWS, 27s);
|
||||
events.ScheduleEvent(EVENT_BURNING_GROUND, 60s);
|
||||
events.ScheduleEvent(EVENT_COSMIC_ASCENSION, 14s);
|
||||
events.ScheduleEvent(EVENT_DAZZIED, 30s);
|
||||
events.ScheduleEvent(EVENT_DESOLATE_BLOSSOM, 12s);
|
||||
events.ScheduleEvent(EVENT_DESTABILIZE, 90s);
|
||||
events.ScheduleEvent(EVENT_EBON_MIGHT, 80s);
|
||||
events.ScheduleEvent(EVENT_EMBRACE_OF_NOTHINGNESS, 32s);
|
||||
events.ScheduleEvent(EVENT_END_EXISTENCE, 300s);
|
||||
events.ScheduleEvent(EVENT_ENGULFING_VOID, 55s);
|
||||
events.ScheduleEvent(EVENT_GLITERING_SURGE, 66s);
|
||||
events.ScheduleEvent(EVENT_HURTING_BARRAGE, 70s);
|
||||
events.ScheduleEvent(EVENT_INFINITE_DURESS, 83s);
|
||||
events.ScheduleEvent(EVENT_MASS_DISINTEGRATE, 20s);
|
||||
events.ScheduleEvent(EVENT_OBLIVION, 36s);
|
||||
events.ScheduleEvent(EVENT_OPPRESSING_HOWL, 52s);
|
||||
events.ScheduleEvent(EVENT_SCORCHING_BOMB, 48s);
|
||||
events.ScheduleEvent(EVENT_SCORCHING_DETONATION, 24s);
|
||||
events.ScheduleEvent(EVENT_SCOURING_ETERNITY, 65s);
|
||||
events.ScheduleEvent(EVENT_SEARING_BREATH, 29s);
|
||||
events.ScheduleEvent(EVENT_VOID_BOMB, 22s);
|
||||
events.ScheduleEvent(EVENT_VOID_CLAWS, 40s);
|
||||
events.ScheduleEvent(EVENT_VOID_EMPOWERMENT, 55s);
|
||||
events.ScheduleEvent(EVENT_VOID_FRACTURE, 18s);
|
||||
events.ScheduleEvent(EVENT_VOID_MIGHT, 58s);
|
||||
events.ScheduleEvent(EVENT_VOID_SLASH, 68s);
|
||||
events.ScheduleEvent(EVENT_VOID_SURGE, 73s);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
DoCast(me, SPELL_MASS_DISINTEGRATE);
|
||||
}
|
||||
|
||||
std::list<Player*> targetList;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ABYSSAL_BREATH:
|
||||
DoCastVictim(SPELL_ABYSSAL_BREATH);
|
||||
DoCastVictim(SPELL_ABYSSAL_BREATH_AT);
|
||||
me->GetPlayerListInGrid(targetList, 150.0f);
|
||||
for (Player* targets : targetList)
|
||||
{
|
||||
if (targets->HasAura(SPELL_OPPRESSING_HOWL))
|
||||
targets->RemoveAurasDueToSpell(SPELL_OPPRESSING_HOWL);
|
||||
if (targets->HasAura(SPELL_BURNING_GROUND))
|
||||
targets->RemoveAurasDueToSpell(SPELL_BURNING_GROUND);
|
||||
if (targets->HasAura(SPELL_DESTABILIZE))
|
||||
targets->RemoveAurasDueToSpell(SPELL_DESTABILIZE);
|
||||
}
|
||||
me->RemoveAurasDueToSpell(SPELL_ENGULFING_VOID);
|
||||
events.ScheduleEvent(EVENT_ABYSSAL_BREATH, 24s);
|
||||
break;
|
||||
case EVENT_BURNING_CLAWS:
|
||||
DoCastVictim(SPELL_BURNING_CLAWS);
|
||||
DoCastVictim(SPELL_BURNING_CLAWS_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_BURNING_CLAWS, 31s);
|
||||
break;
|
||||
case EVENT_BURNING_GROUND:
|
||||
DoCastVictim(SPELL_BURNING_GROUND);
|
||||
events.ScheduleEvent(EVENT_BURNING_GROUND, 35s);
|
||||
break;
|
||||
case EVENT_COSMIC_ASCENSION:
|
||||
DoCast(SPELL_COSMIC_ASCENSION);
|
||||
DoCastVictim(SPELL_COSMIC_ASCENSION_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_COSMIC_ASCENSION, 40s);
|
||||
break;
|
||||
case EVENT_DAZZIED:
|
||||
DoCastVictim(SPELL_DAZZIED);
|
||||
events.ScheduleEvent(EVENT_DAZZIED, 112s);
|
||||
break;
|
||||
case EVENT_DESOLATE_BLOSSOM:
|
||||
DoCastVictim(SPELL_DESOLATE_BLOSSOM);
|
||||
DoCastVictim(SPELL_DESOLATE_BLOSSOM_SUMMON);
|
||||
DoCastVictim(SPELL_DESOLATE_BLOSSOM_HEAL_ABSORB);
|
||||
events.ScheduleEvent(EVENT_DESOLATE_BLOSSOM, 44s);
|
||||
break;
|
||||
case EVENT_DESTABILIZE:
|
||||
DoCastVictim(SPELL_DESTABILIZE);
|
||||
DoCastVictim(SPELL_DESTABILIZE_DEBUFF);
|
||||
events.ScheduleEvent(EVENT_DESTABILIZE, 48s);
|
||||
break;
|
||||
case EVENT_EBON_MIGHT:
|
||||
DoCastSelf(SPELL_EBON_MIGHT);
|
||||
events.ScheduleEvent(EVENT_EBON_MIGHT, 52s);
|
||||
break;
|
||||
case EVENT_EMBRACE_OF_NOTHINGNESS:
|
||||
DoCastVictim(SPELL_EMBRACE_OF_NOTHINGNESS);
|
||||
DoCastVictim(SPELL_EMBRACE_OF_NOTHINGNESS_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_EMBRACE_OF_NOTHINGNESS, 57s);
|
||||
break;
|
||||
case EVENT_END_EXISTENCE:
|
||||
{
|
||||
std::list<Player*> targetList;
|
||||
me->GetPlayerListInGrid(targetList, 200.0f);
|
||||
for (Player* targets : targetList)
|
||||
{
|
||||
me->CastSpell(targets->GetPosition(), SPELL_END_EXISTENCE, true);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_END_EXISTENCE, 300s);
|
||||
break;
|
||||
}
|
||||
case EVENT_ENGULFING_VOID:
|
||||
DoCastVictim(SPELL_ENGULFING_VOID);
|
||||
DoCastVictim(SPELL_ENGULFING_VOID_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_ENGULFING_VOID, 61s);
|
||||
break;
|
||||
case EVENT_GLITERING_SURGE:
|
||||
DoCastVictim(SPELL_GLITERING_SURGE);
|
||||
events.ScheduleEvent(EVENT_GLITERING_SURGE, 74s);
|
||||
break;
|
||||
case EVENT_HURTING_BARRAGE:
|
||||
DoCast(SPELL_HURTING_BARRAGE);
|
||||
events.ScheduleEvent(EVENT_HURTING_BARRAGE, 70s);
|
||||
break;
|
||||
case EVENT_INFINITE_DURESS:
|
||||
DoCastVictim(SPELL_INFINITE_DURESS);
|
||||
DoCastVictim(SPELL_INFINITE_DURESS_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_INFINITE_DURESS, 74s);
|
||||
break;
|
||||
case EVENT_MASS_DISINTEGRATE:
|
||||
DoCastVictim(SPELL_MASS_DISINTEGRATE);
|
||||
DoCastVictim(SPELL_MASS_DISINTEGRATE_TRIGGER);
|
||||
DoCastVictim(SPELL_MASS_DISINTEGRATE_SUMMON);
|
||||
DoCastVictim(SPELL_MASS_DISINTEGRATE_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_MASS_DISINTEGRATE, 79s);
|
||||
break;
|
||||
case EVENT_OBLIVION:
|
||||
DoCastVictim(SPELL_OBLIVION);
|
||||
DoCastVictim(SPELL_OBLIVION_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_OBLIVION, 83s);
|
||||
break;
|
||||
case EVENT_OPPRESSING_HOWL:
|
||||
DoCastVictim(SPELL_OPPRESSING_HOWL);
|
||||
events.ScheduleEvent(EVENT_OPPRESSING_HOWL, 88s);
|
||||
break;
|
||||
case EVENT_SCORCHING_BOMB:
|
||||
DoCastVictim(SPELL_SCORCHING_BOMB);
|
||||
events.ScheduleEvent(EVENT_SCORCHING_BOMB, 94s);
|
||||
break;
|
||||
case EVENT_SCORCHING_DETONATION:
|
||||
DoCastVictim(SPELL_SCORCHING_DETONATION);
|
||||
events.ScheduleEvent(EVENT_SCORCHING_DETONATION, 99s);
|
||||
break;
|
||||
case EVENT_SCOURING_ETERNITY:
|
||||
DoCastVictim(SPELL_SCOURING_ETERNITY);
|
||||
events.ScheduleEvent(EVENT_SCOURING_ETERNITY, 105s);
|
||||
break;
|
||||
case EVENT_SEARING_BREATH:
|
||||
DoCastVictim(SPELL_SEARING_BREATH);
|
||||
DoCastVictim(SPELL_SEARING_BREATH_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_SEARING_BREATH, 116s);
|
||||
break;
|
||||
case EVENT_VOID_BOMB:
|
||||
DoCastVictim(SPELL_VOID_BOMB);
|
||||
events.ScheduleEvent(EVENT_VOID_BOMB, 121s);
|
||||
break;
|
||||
case EVENT_VOID_CLAWS:
|
||||
DoCastVictim(SPELL_VOID_CLAWS);
|
||||
DoCastVictim(SPELL_VOID_CLAWS_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_VOID_CLAWS, 125s);
|
||||
break;
|
||||
case EVENT_VOID_EMPOWERMENT:
|
||||
DoCastSelf(SPELL_VOID_EMPOWERMENT);
|
||||
events.ScheduleEvent(EVENT_VOID_EMPOWERMENT, 109s);
|
||||
break;
|
||||
case EVENT_VOID_FRACTURE:
|
||||
DoCastVictim(SPELL_VOID_FRACTURE);
|
||||
events.ScheduleEvent(EVENT_VOID_FRACTURE, 112s);
|
||||
break;
|
||||
case EVENT_VOID_MIGHT:
|
||||
DoCastVictim(SPELL_VOID_MIGHT);
|
||||
events.ScheduleEvent(EVENT_VOID_MIGHT, 129s);
|
||||
break;
|
||||
case EVENT_VOID_SLASH:
|
||||
DoCastVictim(SPELL_VOID_SLASH);
|
||||
DoCastVictim(SPELL_VOID_SLASH_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_VOID_SLASH, 134s);
|
||||
break;
|
||||
case EVENT_VOID_SURGE:
|
||||
DoCastVictim(SPELL_VOID_SURGE);
|
||||
events.ScheduleEvent(EVENT_VOID_SURGE, 139s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void EndEncounter()
|
||||
{
|
||||
if (IsMythic())
|
||||
{
|
||||
if (AchievementEntry const* mythicsarkareth = sAchievementStore.LookupEntry(ACHIEVEMENT_MYTHIC_SARKARETH))
|
||||
{
|
||||
me->GetMap()->DoOnPlayers([mythicsarkareth](Player* player)
|
||||
{
|
||||
player->CompletedAchievement(mythicsarkareth);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
void AddSC_boss_scale_commander_sarkareth()
|
||||
{
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_scale_commander_sarkareth);
|
||||
}
|
||||
+1459
File diff suppressed because it is too large
Load Diff
+754
@@ -0,0 +1,754 @@
|
||||
/*
|
||||
* This file is part of DekkCore Team
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "CellImpl.h"
|
||||
#include "GameObject.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "aberrus_the_shadowed_crucible.h"
|
||||
|
||||
enum theforgottenexperimentsSpells
|
||||
{
|
||||
// Neldris
|
||||
PERIODIC_ENERGY_GAIN = 299956,
|
||||
SPELL_INFUSED_EXPLOSION = 407302,
|
||||
SPELL_INFUSED_STRIKES = 406313,
|
||||
SPELL_MASSIVE_SLAM = 404472,
|
||||
SPELL_MASSIVE_SLAM_1 = 404473,
|
||||
SPELL_MASSIVE_SLAM_2 = 412117,
|
||||
SPELL_RENDING_CHARGE = 406358,
|
||||
SPELL_RENDING_CHARGE_JUMP_CHARGE = 406370,
|
||||
SPELL_RENDING_CHARGE_KNOCKBACK = 413076,
|
||||
SPELL_RENDING_CHARGE_AURA = 406317,
|
||||
SPELL_RENDING_CHARGE_DAMAGE = 406365,
|
||||
SPELL_VAT_BREAK = 404031,
|
||||
SPELL_BELOWING_ROAR = 404713,
|
||||
SPELL_BELOWING_ROAR_DAMAGE = 409367,
|
||||
|
||||
// Thadrion
|
||||
SPELL_UNSTABLE_ESSENCE = 405042,
|
||||
SPELL_UNSTABLE_ESSENCE_DAMAGE = 407327,
|
||||
SPELL_UNSTABLE_ESSENCE_TRIGGER = 405077,
|
||||
SPELL_UNSTABLE_ESSENCE_DAMAGE2 = 408462,
|
||||
SPELL_VAT_BREAK_T = 404032,
|
||||
SPELL_VIOLENT_ERUPTION = 405375,
|
||||
SPELL_VIOLENT_ERUPTION_DAMAGE = 407775,
|
||||
SPELL_VOLATILE_SPEW = 410019,
|
||||
SPELL_VOLATILE_SPEW_TRIGGER = 405586,
|
||||
SPELL_VOLATILE_SPEW_DAMAGE = 405599,
|
||||
|
||||
// Rionthus
|
||||
SPELL_DEEP_BREATH = 406233,
|
||||
SPELL_DEEP_BREATH_TRIGGER = 406229,//need fix trigger 413074,406233
|
||||
SPELL_DEEP_BREATH_DAMAGE = 408576,
|
||||
SPELL_DISINTEGRATE = 405391,//need fix
|
||||
SPELL_DISINTEGRATE_TRIGGER = 405392,//need fix
|
||||
SPELL_DISINTEGRATE_PERIODIC = 405413, //need fix
|
||||
SPELL_DISINTEGRATE_DAMAGE = 405423,//no damage
|
||||
SPELL_TEMPORAL_ANOMALY = 407552,//need fix
|
||||
SPELL_TEMPORAL_ANOMALY_SHIELD = 407617,
|
||||
SPELL_TEMPORAL_ANOMALY_DAMAGE = 410608,
|
||||
SPELL_TEMPORAL_ANOMALY_AT = 407572,// 28608
|
||||
SPELL_TEMPORAL_FRACTURE = 410635,
|
||||
};
|
||||
|
||||
enum theforgottenexperimentsEvents
|
||||
{
|
||||
// Neldris
|
||||
EVENT_VAT_BREAK = 2,
|
||||
EVENT_INFUSED_EXPLOSION = 3,
|
||||
EVENT_RENDING_CHARGE = 4,
|
||||
EVENT_INFUSED_STRIKES = 5,
|
||||
EVENT_BELOWING_ROAR = 6,
|
||||
EVENT_MASSIVE_SLAM = 7,
|
||||
|
||||
// Thadrion
|
||||
EVENT_INFUSED_EXPLOSION_T = 8,
|
||||
EVENT_INFUSED_STRIKES_T = 9,
|
||||
EVENT_UNSTABLE_ESSENCE = 10,
|
||||
EVENT_VAT_BREAK_T = 11,
|
||||
EVENT_VIOLENT_ERUPTION = 12,
|
||||
EVENT_VOLATILE_SPEW = 13,
|
||||
|
||||
// Rionthus
|
||||
EVENT_DEEP_BREATH = 14,
|
||||
EVENT_DISINTEGRATE = 15,
|
||||
EVENT_INFUSED_EXPLOSION_R = 16,
|
||||
EVENT_INFUSED_STRIKES_R = 17,
|
||||
EVENT_TEMPORAL_ANOMALY = 18,
|
||||
EVENT_TEMPORAL_FRACTURE = 19,
|
||||
};
|
||||
|
||||
Position Positionthadrion = { 2884.59f, 2689.06f, 746.814f, 0.851714f };
|
||||
Position Positionrionthus = { 2880.07f, 2694.74f, 746.81f, 0.71f };
|
||||
|
||||
// 200912,200913,200918
|
||||
// 200912
|
||||
struct boss_neldris : public BossAI
|
||||
{
|
||||
boss_neldris(Creature* creature) : BossAI(creature, DATA_NELDRIS)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
me->SummonCreature(BOSS_THADRION, Positionthadrion, TEMPSUMMON_DEAD_DESPAWN);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_RENDING_CHARGE_DAMAGE);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_STRIKES);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_RENDING_CHARGE_DAMAGE);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_VAT_BREAK, 20s);
|
||||
events.ScheduleEvent(EVENT_INFUSED_EXPLOSION, 24s);
|
||||
events.ScheduleEvent(EVENT_RENDING_CHARGE, 30s);
|
||||
events.ScheduleEvent(EVENT_INFUSED_STRIKES, 12s);
|
||||
events.ScheduleEvent(EVENT_BELOWING_ROAR, 7s);
|
||||
events.ScheduleEvent(EVENT_MASSIVE_SLAM, 16s);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
}
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_VAT_BREAK:
|
||||
DoCastVictim(SPELL_VAT_BREAK);
|
||||
events.ScheduleEvent(EVENT_VAT_BREAK, 54s);
|
||||
break;
|
||||
case EVENT_INFUSED_EXPLOSION:
|
||||
DoCastVictim(SPELL_INFUSED_EXPLOSION);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_RENDING_CHARGE_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_INFUSED_EXPLOSION, 25s);
|
||||
break;
|
||||
case EVENT_RENDING_CHARGE:
|
||||
DoCastVictim(SPELL_RENDING_CHARGE);
|
||||
events.ScheduleEvent(EVENT_RENDING_CHARGE, 30s);
|
||||
break;
|
||||
case EVENT_INFUSED_STRIKES:
|
||||
DoCastVictim(SPELL_INFUSED_STRIKES);
|
||||
DoCastVictim(SPELL_MASSIVE_SLAM);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_STRIKES);
|
||||
events.ScheduleEvent(EVENT_INFUSED_STRIKES, 14s);
|
||||
break;
|
||||
case EVENT_BELOWING_ROAR:
|
||||
DoCastVictim(SPELL_BELOWING_ROAR);
|
||||
events.ScheduleEvent(EVENT_BELOWING_ROAR, 35s);
|
||||
break;
|
||||
case EVENT_MASSIVE_SLAM:
|
||||
DoCastVictim(SPELL_MASSIVE_SLAM);
|
||||
DoCastVictim(SPELL_MASSIVE_SLAM_1);
|
||||
DoCastVictim(SPELL_MASSIVE_SLAM_2);
|
||||
events.ScheduleEvent(EVENT_MASSIVE_SLAM, 41s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// 200913
|
||||
struct boss_thadrion : public BossAI
|
||||
{
|
||||
boss_thadrion(Creature* creature) : BossAI(creature, DATA_THADRION)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (Creature* rionthus = me->FindNearestCreature(BOSS_RIONTHUS, 150.0f))
|
||||
{
|
||||
rionthus->SetUninteractible(false);
|
||||
rionthus->SetImmuneToAll(false);
|
||||
rionthus->SetVisible(true);
|
||||
rionthus->AI()->DoZoneInCombat();
|
||||
}
|
||||
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
summon->AI()->DoZoneInCombat(nullptr);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_STRIKES);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_INFUSED_EXPLOSION_R, 24s);
|
||||
events.ScheduleEvent(EVENT_INFUSED_STRIKES_R, 30s);
|
||||
events.ScheduleEvent(EVENT_UNSTABLE_ESSENCE, 60s);
|
||||
events.ScheduleEvent(EVENT_VAT_BREAK_T, 14s);
|
||||
events.ScheduleEvent(EVENT_VIOLENT_ERUPTION, 37s);
|
||||
events.ScheduleEvent(EVENT_VOLATILE_SPEW, 12s);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
}
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_INFUSED_EXPLOSION_R:
|
||||
DoCastVictim(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_STRIKES);
|
||||
events.ScheduleEvent(EVENT_INFUSED_EXPLOSION_R, 12s);
|
||||
break;
|
||||
case EVENT_INFUSED_STRIKES_R:
|
||||
DoCastVictim(SPELL_INFUSED_STRIKES);
|
||||
events.ScheduleEvent(EVENT_INFUSED_STRIKES_R, 14s);
|
||||
break;
|
||||
case EVENT_UNSTABLE_ESSENCE:
|
||||
DoCastVictim(SPELL_UNSTABLE_ESSENCE);
|
||||
events.ScheduleEvent(EVENT_UNSTABLE_ESSENCE, 30s);
|
||||
break;
|
||||
case EVENT_VAT_BREAK_T:
|
||||
DoCastVictim(SPELL_VAT_BREAK_T);
|
||||
events.ScheduleEvent(EVENT_VAT_BREAK_T, 60s);
|
||||
break;
|
||||
case EVENT_VIOLENT_ERUPTION:
|
||||
DoCastVictim(SPELL_VIOLENT_ERUPTION);
|
||||
DoCastVictim(SPELL_VIOLENT_ERUPTION_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_VIOLENT_ERUPTION, 55s);
|
||||
break;
|
||||
case EVENT_VOLATILE_SPEW:
|
||||
DoCastVictim(SPELL_VOLATILE_SPEW_TRIGGER);
|
||||
events.ScheduleEvent(EVENT_VOLATILE_SPEW, 46s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// 200918
|
||||
struct boss_rionthus : public BossAI
|
||||
{
|
||||
boss_rionthus(Creature* creature) : BossAI(creature, DATA_THE_FORGOTTEN_EXPERIMENTS)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
me->SetUninteractible(true);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetVisible(false);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
if (instance)
|
||||
instance->SetBossState(DATA_THE_FORGOTTEN_EXPERIMENTS, DONE);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_STRIKES);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_DEEP_BREATH, 24s);
|
||||
events.ScheduleEvent(EVENT_DISINTEGRATE, 30s);
|
||||
events.ScheduleEvent(EVENT_INFUSED_EXPLOSION_R, 12s);
|
||||
events.ScheduleEvent(EVENT_INFUSED_STRIKES_R, 14s);
|
||||
events.ScheduleEvent(EVENT_TEMPORAL_ANOMALY, 37s);
|
||||
events.ScheduleEvent(EVENT_TEMPORAL_FRACTURE, 60s);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
}
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_DEEP_BREATH:
|
||||
DoCastVictim(SPELL_DEEP_BREATH);
|
||||
DoCastVictim(SPELL_DEEP_BREATH_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_DEEP_BREATH, 49s);
|
||||
break;
|
||||
case EVENT_DISINTEGRATE:
|
||||
DoCastSelf(SPELL_DISINTEGRATE);
|
||||
DoCastSelf(SPELL_DISINTEGRATE_TRIGGER);
|
||||
DoCastVictim(SPELL_DISINTEGRATE_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_DISINTEGRATE, 55s);
|
||||
break;
|
||||
case EVENT_INFUSED_EXPLOSION_R:
|
||||
DoCastVictim(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_EXPLOSION);
|
||||
me->RemoveAurasDueToSpell(SPELL_INFUSED_STRIKES);
|
||||
events.ScheduleEvent(EVENT_INFUSED_EXPLOSION_R, 15s);
|
||||
break;
|
||||
case EVENT_INFUSED_STRIKES_R:
|
||||
DoCastVictim(SPELL_INFUSED_STRIKES);
|
||||
events.ScheduleEvent(EVENT_INFUSED_STRIKES_R, 20s);
|
||||
break;
|
||||
case EVENT_TEMPORAL_ANOMALY:
|
||||
DoCastSelf(SPELL_TEMPORAL_ANOMALY);
|
||||
DoCastVictim(SPELL_TEMPORAL_ANOMALY_AT);
|
||||
events.ScheduleEvent(EVENT_TEMPORAL_ANOMALY, 60s);
|
||||
break;
|
||||
case EVENT_TEMPORAL_FRACTURE:
|
||||
DoCastVictim(SPELL_TEMPORAL_FRACTURE);
|
||||
events.ScheduleEvent(EVENT_TEMPORAL_FRACTURE, 67s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// Rending Charge 406358
|
||||
class spell_rending_charge : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rending_charge() : SpellScriptLoader("spell_rending_charge") { }
|
||||
|
||||
class spell_rending_charge_SpellScript : public SpellScript
|
||||
{
|
||||
uint8 targetsCount = 1;
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
if(targets.size())
|
||||
targetsCount = targets.size();
|
||||
}
|
||||
|
||||
void HandleHit(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
caster->CastSpell(target, SPELL_RENDING_CHARGE_JUMP_CHARGE, true);
|
||||
caster->CastSpell(nullptr, SPELL_RENDING_CHARGE_KNOCKBACK, true);
|
||||
caster->CastSpell(nullptr, SPELL_RENDING_CHARGE_DAMAGE, true);
|
||||
caster->CastSpell(target, SPELL_RENDING_CHARGE_AURA, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rending_charge_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_rending_charge_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_rending_charge_SpellScript::HandleHit, EFFECT_1, SPELL_EFFECT_CREATE_AREATRIGGER);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_rending_charge_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
//28447 areatrigger - spell 406358
|
||||
struct at_spell_rending_charge : AreaTriggerAI
|
||||
{
|
||||
at_spell_rending_charge(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { }
|
||||
|
||||
void OnUnitEnter(Unit* unit) override
|
||||
{
|
||||
if (!unit->IsPlayer())
|
||||
return;
|
||||
|
||||
unit->CastSpell(unit, SPELL_RENDING_CHARGE_DAMAGE, true);
|
||||
}
|
||||
|
||||
void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override
|
||||
{
|
||||
if (!unit->IsPlayer())
|
||||
return;
|
||||
|
||||
unit->RemoveAura(SPELL_RENDING_CHARGE_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
//404713
|
||||
class spell_belowing_roar : public SpellScript
|
||||
{
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
caster->CastSpell(nullptr, SPELL_BELOWING_ROAR_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunch += SpellEffectFn(spell_belowing_roar::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//405042
|
||||
class spell_unstable_essence : public SpellScript
|
||||
{
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
caster->CastSpell(nullptr, SPELL_UNSTABLE_ESSENCE_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunch += SpellEffectFn(spell_unstable_essence::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
OnEffectLaunch += SpellEffectFn(spell_unstable_essence::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 407327
|
||||
class spell_unstable_essence_aura : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_unstable_essence_aura() : SpellScriptLoader("spell_unstable_essence_aura") { }
|
||||
|
||||
class spell_unstable_essence_aura_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_unstable_essence_aura_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_UNSTABLE_ESSENCE_DAMAGE,
|
||||
SPELL_UNSTABLE_ESSENCE_DAMAGE2,
|
||||
SPELL_UNSTABLE_ESSENCE_TRIGGER
|
||||
});
|
||||
}
|
||||
|
||||
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
{
|
||||
caster->CastSpell(target, SPELL_UNSTABLE_ESSENCE_TRIGGER, true);
|
||||
caster->CastSpell(target, SPELL_UNSTABLE_ESSENCE_DAMAGE2, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_unstable_essence_aura_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_unstable_essence_aura_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
//405586
|
||||
class spell_volatile_spew_trigger : public SpellScript
|
||||
{
|
||||
void HandleTriggerSpell(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
|
||||
Unit* caster = GetCaster();
|
||||
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (WorldLocation const* target = GetExplTargetDest())
|
||||
caster->CastSpell(target->GetPosition(), SPELL_VOLATILE_SPEW_TRIGGER, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_volatile_spew_trigger::HandleTriggerSpell, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
|
||||
}
|
||||
};
|
||||
|
||||
//405599 405601
|
||||
class spell_volatile_spew_damage : public SpellScript
|
||||
{
|
||||
void HandleDamage(SpellEffIndex /*effectIndex*/)
|
||||
{
|
||||
SetHitDamage(GetHitDamage());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_volatile_spew_damage::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
//405392
|
||||
class spell_disintegrate_periodic : public AuraScript
|
||||
{
|
||||
void OnTick(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
if (auto aurEff = GetAura()->GetEffect(EFFECT_0))
|
||||
{
|
||||
float damage = aurEff->GetBaseAmount() * aurEff->GetTickNumber();
|
||||
aurEff->SetAmount(damage);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_disintegrate_periodic::OnTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
//405423
|
||||
class spell_disintegrate_trigger : public AuraScript
|
||||
{
|
||||
void OnTick(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
if (auto aurEff = GetAura()->GetEffect(EFFECT_0))
|
||||
{
|
||||
float damage = aurEff->GetBaseAmount() * aurEff->GetTickNumber();
|
||||
aurEff->SetAmount(damage);
|
||||
}
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
if (!target)
|
||||
return;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_disintegrate_trigger::OnTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_disintegrate_trigger::OnRemove, EFFECT_1, SPELL_AURA_MOD_DECREASE_SPEED, AURA_EFFECT_HANDLE_REAPPLY);
|
||||
}
|
||||
};
|
||||
|
||||
//407617
|
||||
class temporal_anomaly : public AuraScript
|
||||
{
|
||||
void CalculateAmount(AuraEffect const* /*AuraEffect**/, int32& amount, bool& /*canBeRecalculated*/)
|
||||
{
|
||||
amount = -1;
|
||||
}
|
||||
|
||||
void Absorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
|
||||
{
|
||||
if (auto target = GetTarget())
|
||||
{
|
||||
if (dmgInfo.GetDamage() < target->GetHealth())
|
||||
return;
|
||||
|
||||
target->SetHealth(target->CountPctFromMaxHealth(GetSpellInfo()->GetEffect(EFFECT_1).BasePoints));
|
||||
aurEff->GetBase()->Remove();
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(temporal_anomaly::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
|
||||
OnEffectAbsorb += AuraEffectAbsorbFn(temporal_anomaly::Absorb, EFFECT_0);
|
||||
}
|
||||
};
|
||||
|
||||
//28608 areatrigger - spell 407572
|
||||
struct at_temporal_anomaly : AreaTriggerAI
|
||||
{
|
||||
at_temporal_anomaly(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { }
|
||||
|
||||
void OnUnitEnter(Unit* unit) override
|
||||
{
|
||||
if (unit->IsPlayer())
|
||||
unit->CastSpell(unit, SPELL_TEMPORAL_ANOMALY_DAMAGE, true);
|
||||
else
|
||||
unit->CastSpell(unit, SPELL_TEMPORAL_ANOMALY_SHIELD, true);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_the_forgotten_experiment()
|
||||
{
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_neldris);
|
||||
new spell_rending_charge();
|
||||
RegisterAreaTriggerAI(at_spell_rending_charge);
|
||||
RegisterSpellScript(spell_belowing_roar);
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_thadrion);
|
||||
RegisterSpellScript(spell_unstable_essence);
|
||||
new spell_unstable_essence_aura();
|
||||
RegisterSpellScript(spell_volatile_spew_trigger);
|
||||
RegisterSpellScript(spell_volatile_spew_damage);
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_rionthus);
|
||||
RegisterSpellScript(spell_disintegrate_periodic);
|
||||
RegisterSpellScript(spell_disintegrate_trigger);
|
||||
RegisterSpellScript(temporal_anomaly);
|
||||
RegisterAreaTriggerAI(at_temporal_anomaly);
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
/*
|
||||
* This file is part of DekkCore Team
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "CellImpl.h"
|
||||
#include "GameObject.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "aberrus_the_shadowed_crucible.h"
|
||||
|
||||
enum warlordkagniSpells
|
||||
{
|
||||
PERIODIC_ENERGY_GAIN = 299956,
|
||||
SPELL_BARRIER_BACKFIRE = 404687,//ready
|
||||
SPELL_CATASTROPHIC_SLAM = 410516,//ready
|
||||
SPELL_CATASTROPHIC_SLAM_DAMAGE = 410535,//ready
|
||||
SPELL_DESPERATE_INMOLATION = 409359,// need test
|
||||
SPELL_DESPERATE_INMOLATION_DAMAGE = 397514,// need test
|
||||
SPELL_DEVASTATING_LEAP = 408117,// need test 406291
|
||||
SPELL_DEVASTATING_LEAP_DAMAGE = 418126,// need test
|
||||
SPELL_FLAMING_CUDGEL = 410351,// need test
|
||||
SPELL_FLAMING_CUDGEL_TRIGGER = 410353, // need test
|
||||
SPELL_FLAMING_CUDGEL_DAMAGE = 410369, // need test no damage
|
||||
SPELL_HEAVY_CUDGEL = 401258,// need test
|
||||
SPELL_HEAVY_CUDGEL_DAMAGE = 408873,// need test
|
||||
SPELL_HEAVY_CUDGEL_FALL_DAMAGE = 400450,// need test
|
||||
SPELL_IGNARAS_FLAME = 411230,// need test
|
||||
SPELL_IGNARAS_FURY = 406585,//ready
|
||||
SPELL_WEAKENED_VITALITY = 404616,//ready
|
||||
SPELL_ZAQAIL_AIDE = 404382,// need script, summon 2 adds for helping boss
|
||||
SPELL_ZAQAIL_AIDE_TRIGGER = 410207,// need script
|
||||
SPELL_ZAQAIL_AIDE_DAMAGE = 411767,// for the 2 npcs summoned
|
||||
};
|
||||
|
||||
enum warlordkagniEvents
|
||||
{
|
||||
EVENT_BARRIER_BACKFIRE = 2,
|
||||
EVENT_CATASTROPHIC_SLAM = 3,
|
||||
EVENT_DESPERATE_INMOLATION = 4,
|
||||
EVENT_DEVASTATING_LEAP = 5,
|
||||
EVENT_FLAMING_CUDGEL = 6,
|
||||
EVENT_HEAVY_CUDGEL = 7,
|
||||
EVENT_IGNARAS_FLAME = 8,
|
||||
EVENT_WEAKENED_VITALITY = 9,
|
||||
EVENT_ZAQAIL_AIDE = 10
|
||||
};
|
||||
|
||||
// 199659
|
||||
struct boss_warlord_kagni : public BossAI
|
||||
{
|
||||
boss_warlord_kagni(Creature* creature) : BossAI(creature, DATA_ASSAULT_OF_THE_ZAQALI)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (!instance->GetData(DATA_ASSAULT_OF_THE_ZAQALI))
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
if (instance)
|
||||
instance->SetBossState(DATA_ASSAULT_OF_THE_ZAQALI, DONE);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_WEAKENED_VITALITY);
|
||||
me->RemoveAurasDueToSpell(SPELL_IGNARAS_FLAME);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_BARRIER_BACKFIRE, 24s);
|
||||
events.ScheduleEvent(EVENT_CATASTROPHIC_SLAM, 24s);
|
||||
events.ScheduleEvent(EVENT_DESPERATE_INMOLATION, 60s);
|
||||
events.ScheduleEvent(EVENT_DEVASTATING_LEAP, 14s);
|
||||
events.ScheduleEvent(EVENT_FLAMING_CUDGEL, 12s);
|
||||
events.ScheduleEvent(EVENT_HEAVY_CUDGEL, 20s);
|
||||
events.ScheduleEvent(EVENT_IGNARAS_FLAME, 54s);
|
||||
events.ScheduleEvent(EVENT_WEAKENED_VITALITY, 90s);
|
||||
events.ScheduleEvent(EVENT_ZAQAIL_AIDE, 80s);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_IGNARAS_FURY);
|
||||
}
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_BARRIER_BACKFIRE:
|
||||
DoCast(SPELL_BARRIER_BACKFIRE);
|
||||
events.ScheduleEvent(EVENT_BARRIER_BACKFIRE, 63s);
|
||||
break;
|
||||
case EVENT_CATASTROPHIC_SLAM:
|
||||
DoCastVictim(SPELL_CATASTROPHIC_SLAM);
|
||||
DoCastVictim(SPELL_CATASTROPHIC_SLAM_DAMAGE);
|
||||
me->RemoveAurasDueToSpell(SPELL_IGNARAS_FLAME);
|
||||
me->RemoveAurasDueToSpell(SPELL_IGNARAS_FURY);
|
||||
me->RemoveAurasDueToSpell(SPELL_BARRIER_BACKFIRE);
|
||||
events.ScheduleEvent(EVENT_CATASTROPHIC_SLAM, 20s);
|
||||
break;
|
||||
case EVENT_DESPERATE_INMOLATION:
|
||||
DoCastSelf(SPELL_DESPERATE_INMOLATION);
|
||||
DoCastSelf(SPELL_DESPERATE_INMOLATION_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_DESPERATE_INMOLATION, 60s);
|
||||
break;
|
||||
case EVENT_DEVASTATING_LEAP:
|
||||
DoCastVictim(SPELL_DEVASTATING_LEAP);
|
||||
DoCastVictim(SPELL_DEVASTATING_LEAP_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_DEVASTATING_LEAP, 35s);
|
||||
break;
|
||||
case EVENT_FLAMING_CUDGEL:
|
||||
DoCastVictim(SPELL_FLAMING_CUDGEL);
|
||||
DoCastVictim(SPELL_FLAMING_CUDGEL_TRIGGER);
|
||||
DoCastVictim(SPELL_FLAMING_CUDGEL_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_FLAMING_CUDGEL, 40s);
|
||||
break;
|
||||
case EVENT_HEAVY_CUDGEL:
|
||||
DoCastVictim(SPELL_HEAVY_CUDGEL);
|
||||
DoCastVictim(SPELL_HEAVY_CUDGEL_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_HEAVY_CUDGEL, 54s);
|
||||
break;
|
||||
case EVENT_IGNARAS_FLAME:
|
||||
DoCastSelf(SPELL_IGNARAS_FLAME);
|
||||
DoCast(SPELL_IGNARAS_FURY);
|
||||
events.ScheduleEvent(EVENT_IGNARAS_FLAME, 120s);
|
||||
break;
|
||||
case EVENT_WEAKENED_VITALITY:
|
||||
DoCastVictim(SPELL_WEAKENED_VITALITY);
|
||||
events.ScheduleEvent(EVENT_WEAKENED_VITALITY, 44s);
|
||||
break;
|
||||
case EVENT_ZAQAIL_AIDE:
|
||||
DoCastVictim(SPELL_ZAQAIL_AIDE);
|
||||
DoCastVictim(SPELL_ZAQAIL_AIDE_TRIGGER);
|
||||
DoCastVictim(SPELL_ZAQAIL_AIDE_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_ZAQAIL_AIDE, 80s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_warlord_kagni()
|
||||
{
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_warlord_kagni);
|
||||
}
|
||||
+206
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
* This file is part of DekkCore Team
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "CellImpl.h"
|
||||
#include "GameObject.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "aberrus_the_shadowed_crucible.h"
|
||||
|
||||
enum zskarnthevigilantstewardSpells
|
||||
{
|
||||
PERIODIC_ENERGY_GAIN = 299956,
|
||||
SPELL_ANIMATE_GOLEMS = 309653,// need test /golem npc 147286
|
||||
SPELL_BLAST_WAVE = 403978,// ready
|
||||
SPELL_DRAGONFIRE_TRAPS = 405462,// need test
|
||||
SPELL_ELIMINATION_PROTOCOL_MARK = 404404,// need test
|
||||
SPELL_ELIMINATION_PROTOCOL_TRIGGER = 403440,// need test
|
||||
SPELL_ELIMINATION_PROTOCOL = 409942,// need test
|
||||
SPELL_SEARING_CLAVES = 404939,// ready
|
||||
SPELL_SEARING_CLAVES_DAMAGE = 404942,// ready
|
||||
SPELL_SHARPNEL_BOMB = 404955,// ready
|
||||
SPELL_SHARPNEL_BOMB_TRIGGER = 404959,// ready
|
||||
SPELL_SHARPNEL_BOMB_DAMAGE = 406725,// ready
|
||||
SPELL_TACTICAL_DESTRUCTION = 406678, // need test,
|
||||
SPELL_UNSTABLE_EMBERS = 369198, // need test
|
||||
SPELL_UNSTABLE_EMBERS_DAMAGE = 404404, // need test
|
||||
};
|
||||
|
||||
enum zskarnthevigilantstewardEvents
|
||||
{
|
||||
EVENT_ANIMATE_GOLEMS = 2,
|
||||
EVENT_BLAST_WAVE = 3,
|
||||
EVENT_DRAGONFIRE_TRAPS = 4,
|
||||
EVENT_ELIMINATION_PROTOCOL = 5,
|
||||
EVENT_SEARING_CLAVES = 6,
|
||||
EVENT_SHARPNEL_BOMB = 7,
|
||||
EVENT_TACTICAL_DESTRUCTION = 8,
|
||||
EVENT_UNSTABLE_EMBERS = 9,
|
||||
};
|
||||
|
||||
// 202637/202375
|
||||
struct boss_zskarn_the_vigilant_steward : public BossAI
|
||||
{
|
||||
boss_zskarn_the_vigilant_steward(Creature* creature) : BossAI(creature, DATA_ZSKARN_THE_VIGILANT_STEWARD)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAura(PERIODIC_ENERGY_GAIN);
|
||||
me->SetPowerType(POWER_ENERGY);
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
me->SetPower(POWER_ENERGY, 0);
|
||||
}
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
if (!instance->GetData(DATA_ZSKARN_THE_VIGILANT_STEWARD))
|
||||
{
|
||||
me->SetUninteractible(false);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
scheduler.CancelAll();
|
||||
if (instance)
|
||||
instance->SetBossState(DATA_ZSKARN_THE_VIGILANT_STEWARD, DONE);
|
||||
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_TACTICAL_DESTRUCTION);
|
||||
me->RemoveAurasDueToSpell(SPELL_SEARING_CLAVES);
|
||||
|
||||
summons.DespawnAll();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
DoCast(PERIODIC_ENERGY_GAIN);
|
||||
events.ScheduleEvent(EVENT_ANIMATE_GOLEMS, 24s);
|
||||
events.ScheduleEvent(EVENT_BLAST_WAVE, 27s);
|
||||
events.ScheduleEvent(EVENT_DRAGONFIRE_TRAPS, 60s);
|
||||
events.ScheduleEvent(EVENT_ELIMINATION_PROTOCOL, 14s);
|
||||
events.ScheduleEvent(EVENT_SEARING_CLAVES, 20s);
|
||||
events.ScheduleEvent(EVENT_SHARPNEL_BOMB, 12s);
|
||||
events.ScheduleEvent(EVENT_TACTICAL_DESTRUCTION, 90s);
|
||||
events.ScheduleEvent(EVENT_UNSTABLE_EMBERS, 80s);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->GetPowerPct(POWER_ENERGY) == 100)
|
||||
{
|
||||
me->ModifyPower(POWER_ENERGY, -100);
|
||||
DoCast(me, SPELL_TACTICAL_DESTRUCTION);
|
||||
}
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ANIMATE_GOLEMS:
|
||||
DoCastVictim(SPELL_ANIMATE_GOLEMS);
|
||||
me->RemoveAurasDueToSpell(SPELL_SEARING_CLAVES);
|
||||
events.ScheduleEvent(EVENT_ANIMATE_GOLEMS, 24s);
|
||||
break;
|
||||
case EVENT_BLAST_WAVE:
|
||||
DoCastVictim(SPELL_BLAST_WAVE);
|
||||
events.ScheduleEvent(EVENT_BLAST_WAVE, 27s);
|
||||
break;
|
||||
case EVENT_DRAGONFIRE_TRAPS:
|
||||
DoCastVictim(SPELL_DRAGONFIRE_TRAPS);
|
||||
events.ScheduleEvent(EVENT_DRAGONFIRE_TRAPS, 60s);
|
||||
break;
|
||||
case EVENT_ELIMINATION_PROTOCOL:
|
||||
{
|
||||
std::list<Player*> playerList;
|
||||
me->GetPlayerListInGrid(playerList, 150.0f);
|
||||
if (!playerList.empty())
|
||||
{
|
||||
for (auto player : playerList)
|
||||
{
|
||||
if (player->HasAura(SPELL_ELIMINATION_PROTOCOL_MARK))
|
||||
{
|
||||
me->CastSpell(player, SPELL_ELIMINATION_PROTOCOL_TRIGGER, true);
|
||||
me->CastSpell(player, SPELL_ELIMINATION_PROTOCOL, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
events.ScheduleEvent(EVENT_ELIMINATION_PROTOCOL, 35s);
|
||||
break;
|
||||
}
|
||||
case EVENT_SEARING_CLAVES:
|
||||
DoCastVictim(SPELL_SEARING_CLAVES);
|
||||
DoCastVictim(SPELL_SEARING_CLAVES_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_SEARING_CLAVES, 31s);
|
||||
break;
|
||||
case EVENT_SHARPNEL_BOMB:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_SHARPNEL_BOMB, true);
|
||||
me->CastSpell(target, SPELL_SHARPNEL_BOMB_TRIGGER, true);
|
||||
me->CastSpell(target, SPELL_SHARPNEL_BOMB_DAMAGE, true);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SHARPNEL_BOMB, 39s);
|
||||
break;
|
||||
}
|
||||
case EVENT_TACTICAL_DESTRUCTION:
|
||||
DoCastVictim(SPELL_TACTICAL_DESTRUCTION);
|
||||
events.ScheduleEvent(EVENT_TACTICAL_DESTRUCTION, 90s);
|
||||
break;
|
||||
case EVENT_UNSTABLE_EMBERS:
|
||||
DoCastVictim(SPELL_UNSTABLE_EMBERS);
|
||||
DoCastVictim(SPELL_UNSTABLE_EMBERS_DAMAGE);
|
||||
events.ScheduleEvent(EVENT_UNSTABLE_EMBERS, 80s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_zskarn_the_vigilant_steward()
|
||||
{
|
||||
RegisterAberrusTheShadowedCrucibleCreatureAI(boss_zskarn_the_vigilant_steward);
|
||||
}
|
||||
@@ -32,6 +32,13 @@ void AddSC_instance_aberrus_the_shadowed_crucible();
|
||||
void AddSC_aberrus_the_shadowed_crucible();
|
||||
void AddSC_boss_kazzara_the_hellforged();
|
||||
void AddSC_boss_echo_of_neltharion();
|
||||
void AddSC_boss_magmorax();
|
||||
void AddSC_boss_rashok_the_elder();
|
||||
void AddSC_boss_scale_commander_sarkareth();
|
||||
void AddSC_boss_the_amalgamation_chamber();
|
||||
void AddSC_boss_the_forgotten_experiment();
|
||||
void AddSC_boss_warlord_kagni();
|
||||
void AddSC_boss_zskarn_the_vigilant_steward();
|
||||
|
||||
// The name of this function should match:
|
||||
// void Add${NameOfDirectory}Scripts()
|
||||
@@ -53,4 +60,11 @@ void AddDragonIslesScripts()
|
||||
AddSC_aberrus_the_shadowed_crucible();
|
||||
AddSC_boss_kazzara_the_hellforged();
|
||||
AddSC_boss_echo_of_neltharion();
|
||||
AddSC_boss_magmorax();
|
||||
AddSC_boss_rashok_the_elder();
|
||||
AddSC_boss_scale_commander_sarkareth();
|
||||
AddSC_boss_the_amalgamation_chamber();
|
||||
AddSC_boss_the_forgotten_experiment();
|
||||
AddSC_boss_warlord_kagni();
|
||||
AddSC_boss_zskarn_the_vigilant_steward();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user