This commit is contained in:
luis
2026-02-27 22:22:35 -03:00
parent 0838a21a59
commit 84e69da02c
15 changed files with 1825 additions and 4 deletions
@@ -120,7 +120,7 @@ public:
events.ScheduleEvent(EVENT_BITE, 14s);
break;
case EVENT_CALL_HIENAS:
DoCastVictim(SPELL_CALL_HIENAS, 50);
DoCastVictim(SPELL_CALL_HIENAS);
events.ScheduleEvent(EVENT_BITE, 30s);
break;
default:
@@ -114,7 +114,7 @@ struct npc_rira_hackclaw : public BossAI
case EVENT_BLADESTORM:
DoCastVictim(SPELL_BLADESTORM);
DoCastVictim(SPELL_BLADESTORM_VISUAL);
DoCastVictim(SPELL_BLADESTORM_DAMAGE, 100.0f);
DoCastVictim(SPELL_BLADESTORM_DAMAGE);
events.ScheduleEvent(EVENT_BLADESTORM, 8s);
break;
case EVENT_CLEAVE:
@@ -289,7 +289,7 @@ struct npc_gasTricktotem_186125 : public ScriptedAI
_events.ScheduleEvent(EVENT_EARTHBOLT, 6s);
break;
case EVENT_GREATER_HEALING:
DoCastAOE(SPELL_GREATER_HEALING, 50.0f);
DoCastAOE(SPELL_GREATER_HEALING);
DoCastSelf(SPELL_GREATER_HEALING_2);
_events.ScheduleEvent(EVENT_GREATER_HEALING, 12s);
break;
@@ -0,0 +1,259 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "AreaTrigger.h"
#include "AreaTriggerAI.h"
#include "InstanceScript.h"
#include "Map.h"
#include "SpellAuras.h"
#include "SpellScript.h"
#include "ScriptMgr.h"
#include "Unit.h"
#include "Dawnoftheinfinite.h"
enum NpcsSpells
{
SPELL_ANCIENT_RADIANCE = 413023,
SPELL_ORB_OF_CONTEMPLATION = 412128,
SPELL_ORB_OF_CONTEMPLATION_STUN = 412131,
SPELL_ORB_OF_CONTEMPLATION_VISUAL = 412130,
SPELL_DISPLACEMENT_STRIKE_AREATRIGGER = 410875,
SPELL_DISPLACEMENT_STRIKE = 410890,
SPELL_DISPLACEMENT = 409038,
SPELL_DISPLACEMENT_TELEPORT = 417476,
SPELL_DEPLOY_DWARVEN_BOMBERS = 418684,
SPELL_EMBERS = 407315,
SPELL_SHRAPNEL = 407313,
SPELL_VOLATILE_MORTAR = 407205,
};
enum Events
{
EVENT_ANCIENT_RADIANCE = 1,
EVENT_ORB_OF_CONTEMPLATION,
EVENT_DISPLACEMENET_STRIKE,
EVENT_DISPLACEMENET_STRIKE_TELEPORT,
EVENT_DEPLOY_DWARVEN_BOMBERS,
EVENT_EMBERS,
EVENT_SHRAPNEL,
EVENT_VOLATILE_MORTAR,
};
//205152 Lerai, Timesworn Maiden
struct npc_lerai_timeswornd_maiden : public ScriptedAI
{
npc_lerai_timeswornd_maiden(Creature* creature) : ScriptedAI(creature) { }
void Reset() override {}
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_ANCIENT_RADIANCE, 5s);
_events.ScheduleEvent(EVENT_ORB_OF_CONTEMPLATION, 11s);
}
void JustDied(Unit* /*killer*/) override
{
if (Creature* tyrtheinfinitekeeper = me->FindNearestCreature(BOSS_TYR_THE_INFINITE_KEEPER, 500.0f))
tyrtheinfinitekeeper->AI()->DoZoneInCombat();
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_ANCIENT_RADIANCE:
DoCastVictim(SPELL_ANCIENT_RADIANCE);
_events.ScheduleEvent(EVENT_ANCIENT_RADIANCE, 10s);
break;
case EVENT_ORB_OF_CONTEMPLATION:
DoCastVictim(SPELL_ORB_OF_CONTEMPLATION_VISUAL);
DoCastVictim(SPELL_ORB_OF_CONTEMPLATION);
DoCastVictim(SPELL_ORB_OF_CONTEMPLATION_STUN);
_events.ScheduleEvent(EVENT_ORB_OF_CONTEMPLATION, 15s);
break;
default:
break;
}
}
}
private:
EventMap _events;
InstanceScript* _instance;
};
//205259 Infinite Warder
struct npc_infinite_warder : public ScriptedAI
{
npc_infinite_warder(Creature* creature) : ScriptedAI(creature) { }
void Reset() override {}
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_DISPLACEMENET_STRIKE, 1s);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_DISPLACEMENET_STRIKE:
{
DoCast(SPELL_DISPLACEMENT_STRIKE_AREATRIGGER);
DoCastVictim(SPELL_DISPLACEMENT_STRIKE);
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 20.0f, true))
target->CastSpell(target,SPELL_DISPLACEMENT, false);
_events.ScheduleEvent(EVENT_DISPLACEMENET_STRIKE, 8s);
_events.ScheduleEvent(EVENT_DISPLACEMENET_STRIKE_TELEPORT, 3s);
break;
}
case EVENT_DISPLACEMENET_STRIKE_TELEPORT:
{
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 5.0f, true))
target->CastSpell(target, SPELL_DISPLACEMENT_TELEPORT, false);
break;
}
default:
break;
}
}
}
private:
EventMap _events;
InstanceScript* _instance;
};
//208208 Alliance destroyer
struct npc_alliance_destroyer : public ScriptedAI
{
npc_alliance_destroyer(Creature* creature) : ScriptedAI(creature) { }
void Reset() override {}
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_DEPLOY_DWARVEN_BOMBERS, 5s);
_events.ScheduleEvent(EVENT_EMBERS, 11s);
_events.ScheduleEvent(EVENT_SHRAPNEL, 16s);
_events.ScheduleEvent(EVENT_VOLATILE_MORTAR, 21s);
}
void JustDied(Unit* killer) override
{
if (killer->ToPlayer()->GetTeamId() == TEAM_HORDE)
{
if (Creature* anduin = me->FindNearestCreature(BOSS_TIME_LOST_BATTLEFIELD_A, 500.0f))
anduin->AI()->DoZoneInCombat();
if (Creature* archer = me->FindNearestCreature(NPC_ALLIANCE_ARCHER, 500.0f))
archer->AI()->DoZoneInCombat();
if (Creature* footman = me->FindNearestCreature(NPC_ALLIANCE_FOOTMAN, 500.0f))
footman->AI()->DoZoneInCombat();
if (Creature* conjuror = me->FindNearestCreature(NPC_ALLIANCE_CONJUROR, 500.0f))
conjuror->AI()->DoZoneInCombat();
if (Creature* paladinsilver = me->FindNearestCreature(NPC_PALADIN_OF_THE_SILVER_HAND, 500.0f))
paladinsilver->AI()->DoZoneInCombat();
if (Creature* anduinlothar = me->FindNearestCreature(NPC_ANDUIN_LOTHAR, 500.0f))
anduinlothar->AI()->DoZoneInCombat();
if (Creature* knight = me->FindNearestCreature(NPC_ALLIANCE_KNIGHT, 500.0f))
knight->AI()->DoZoneInCombat();
}
else
{
if (Creature* grommash = me->FindNearestCreature(BOSS_TIME_LOST_BATTLEFIELD, 500.0f))
grommash->AI()->DoZoneInCombat();
if (Creature* grunt = me->FindNearestCreature(NPC_HORDE_GRUNT, 500.0f))
grunt->AI()->DoZoneInCombat();
if (Creature* warlock = me->FindNearestCreature(NPC_HORDE_WARLOCK, 500.0f))
warlock->AI()->DoZoneInCombat();
if (Creature* axethrower = me->FindNearestCreature(NPC_HORDE_AXE_THROWER, 500.0f))
axethrower->AI()->DoZoneInCombat();
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_DEPLOY_DWARVEN_BOMBERS:
DoCastVictim(SPELL_DEPLOY_DWARVEN_BOMBERS);
_events.ScheduleEvent(EVENT_DEPLOY_DWARVEN_BOMBERS, 10s);
break;
case EVENT_EMBERS:
DoCastVictim(SPELL_EMBERS);
_events.ScheduleEvent(EVENT_EMBERS, 15s);
break;
case EVENT_SHRAPNEL:
DoCastVictim(SPELL_SHRAPNEL);
_events.ScheduleEvent(EVENT_SHRAPNEL, 21s);
break;
case EVENT_VOLATILE_MORTAR:
DoCastVictim(SPELL_VOLATILE_MORTAR);
_events.ScheduleEvent(EVENT_VOLATILE_MORTAR, 29s);
break;
default:
break;
}
}
}
private:
EventMap _events;
InstanceScript* _instance;
};
void AddSC_Dawnoftheinfinite()
{
RegisterCreatureAI(npc_lerai_timeswornd_maiden);
RegisterCreatureAI(npc_infinite_warder);
RegisterCreatureAI(npc_alliance_destroyer);
}
@@ -0,0 +1,69 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#ifndef DEF_DAWNOFTHEINFINITEDF_H_
#define DEF_DAWNOFTHEINFINITEDDF_H_
#include "CreatureAIImpl.h"
#define DataHeader "DawnoftheinfiniteScriptName"
#define DawnoftheinfiniteScriptNameScriptName "instance_dawnoftheinfinite_df"
uint32 const EncounterCount = 8;
enum dawnoftheinfiniteDataTypes
{
// Encounters
DATA_CHRONIKAR = 1,
DATA_MANIFESTED_TIMEWAYS,
DATA_BLIGHT_OF_GALAKROND,
DATA_IRIDIKRON_THE_STONESCALED,
DATA_TYR_THE_INFINITE_KEEPER,
DATA_MORCHIE,
DATA_TIME_LOST_BATTLEFIELD,
DATA_CHRONO_LORD_DEIOS,
};
enum dawnoftheinfiniteCreatureIds
{
// Bosses
BOSS_CHRONIKAR = 198995,
BOSS_MANIFESTED_TIMEWAYS = 206238,
BOSS_BLIGHT_OF_GALAKROND = 207639,
BOSS_IRIDIKRON_THE_STONESCALED = 194907,
BOSS_TYR_THE_INFINITE_KEEPER = 198998,
BOSS_MORCHIE = 202789,
BOSS_TIME_LOST_BATTLEFIELD = 209207,
BOSS_TIME_LOST_BATTLEFIELD_A = 209208,
BOSS_CHRONO_LORD_DEIOS = 199000,
NPC_FUTURE_SELF = 208957,
//add boss_time_lost_battlefield
NPC_ALLIANCE_ARCHER = 206352,
NPC_ALLIANCE_FOOTMAN = 203763,
NPC_ALLIANCE_CONJUROR = 206351,
NPC_PALADIN_OF_THE_SILVER_HAND = 208193,
NPC_ANDUIN_LOTHAR = 203679,
NPC_ALLIANCE_KNIGHT = 208165,
NPC_HORDE_GRUNT = 203688,
NPC_HORDE_WARLOCK = 203857,
NPC_HORDE_AXE_THROWER = 203799,
};
template <class AI, class T>
inline AI* GetdawnoftheinfinitedfAI(T* obj)
{
return GetInstanceAI<AI>(obj, DawnoftheinfiniteScriptNameScriptName);
}
#define RegisterdawnoftheinfinitedfCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetdawnoftheinfinitedfAI)
#endif
@@ -0,0 +1,161 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum BlightofgalakrondSpells
{
SPELL_BLIGHT_RECLAMATION = 407159,
SPELL_BLIGHT_SEEP = 407057,
SPELL_BLIGHT_SEEP_AURA = 407147,
SPELL_CORROSION = 407406,
SPELL_CORROSIVE_EXPULSION = 407027,
SPELL_CORROSIVE_INFUSION = 406886,
SPELL_CORRUPTED_MIND = 418346, //MYTHIC
SPELL_MALIGNANT_TRANSFERAL = 415097,
PERIODIC_ENERGY_GAIN = 299956,
};
enum Blightofgalakrondevents
{
EVENT_BLIGHT_RECLAMATION = 1,
EVENT_BLIGHT_SEEP,
EVENT_CORROSION,
EVENT_CORROSIVE_EXPULSION,
EVENT_CORROSIVE_INFUSION,
EVENT_CORRUPTED_MIND,
EVENT_MALIGNANT_TRANSFERAL,
};
//207639 blight of galakrond
class boss_blight_of_galakrond : public BossAI
{
public:
boss_blight_of_galakrond(Creature* creature) : BossAI(creature, DATA_BLIGHT_OF_GALAKROND) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_BLIGHT_RECLAMATION, 24s);
if (IsMythic())
events.ScheduleEvent(EVENT_CORRUPTED_MIND, 8s);
events.ScheduleEvent(EVENT_BLIGHT_SEEP, 12s);
events.ScheduleEvent(EVENT_CORROSION, 14s);
events.ScheduleEvent(EVENT_CORROSIVE_EXPULSION, 22s);
events.ScheduleEvent(EVENT_CORROSIVE_INFUSION, 17s);
events.ScheduleEvent(EVENT_MALIGNANT_TRANSFERAL, 29s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_MALIGNANT_TRANSFERAL, 2s);
}
events.Update(diff);
std::list<Player*> targetList;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_BLIGHT_RECLAMATION:
DoCastVictim(SPELL_BLIGHT_RECLAMATION);
me->RemoveAurasDueToSpell(SPELL_MALIGNANT_TRANSFERAL);
events.ScheduleEvent(EVENT_BLIGHT_RECLAMATION, 20s);
break;
case EVENT_BLIGHT_SEEP:
DoCastVictim(SPELL_BLIGHT_SEEP);
DoCastVictim(SPELL_BLIGHT_SEEP_AURA);
events.ScheduleEvent(EVENT_BLIGHT_SEEP, 25s);
break;
case EVENT_CORROSION:
DoCastVictim(SPELL_CORROSION);
events.ScheduleEvent(EVENT_CORROSION, 12s);
break;
case EVENT_CORROSIVE_EXPULSION:
DoCastVictim(SPELL_CORROSIVE_EXPULSION);
me->GetPlayerListInGrid(targetList, 100.0f);
for (Player* targets : targetList)
targets->RemoveAurasDueToSpell(SPELL_BLIGHT_SEEP_AURA);
events.ScheduleEvent(EVENT_CORROSIVE_EXPULSION, 33s);
break;
case EVENT_CORROSIVE_INFUSION:
DoCast(SPELL_CORROSIVE_INFUSION);
events.ScheduleEvent(EVENT_CORROSIVE_INFUSION, 37s);
break;
case EVENT_MALIGNANT_TRANSFERAL:
DoCastSelf(SPELL_MALIGNANT_TRANSFERAL);
events.ScheduleEvent(EVENT_MALIGNANT_TRANSFERAL, 61s);
break;
case EVENT_CORRUPTED_MIND:
DoCastVictim(SPELL_CORRUPTED_MIND);
events.ScheduleEvent(EVENT_CORRUPTED_MIND, 37s);
break;
default:
break;
}
}
}
};
void AddSC_boss_blight_of_galakrond()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_blight_of_galakrond);
};
@@ -0,0 +1,150 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum chronikarSpells
{
SPELL_CHRONOSHEAR = 413013,//
SPELL_EON_SHATTER_JUMP = 413105,
SPELL_EON_SHATTER = 402784,
SPELL_EON_SHATTER_DAMAGE = 413107,
SPELL_EON_SHATTER_AURA = 403041,
SPELL_SAND_STOMP_AURA = 401420,
SPELL_SAND_STOMP = 401421,
SPELL_SHEARED_LIFESPAN_AURA = 413041,// MYTHIC
SPELL_SHEARED_LIFESPAN = 416716,// MYTHIC
SPELL_WITHERING_SANDPOOL = 401794,
PERIODIC_ENERGY_GAIN = 299956,
};
enum chronikarevents
{
EVENT_CHONOSHEAR = 1,
EVENT_EON_SHATTER,
EVENT_SAND_STOMP,
EVENT_SHEARED_LIFESPAN,
EVENT_WITHERING_SANDPOOL,
};
//198995 chronikar
class boss_chronikar : public BossAI
{
public:
boss_chronikar(Creature* creature) : BossAI(creature, DATA_CHRONIKAR) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
Talk(0);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_CHONOSHEAR, 24s);
events.ScheduleEvent(EVENT_EON_SHATTER, 8s);
events.ScheduleEvent(EVENT_SAND_STOMP, 12s);
events.ScheduleEvent(EVENT_SHEARED_LIFESPAN, 14s);
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_WITHERING_SANDPOOL, 2s);
}
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CHONOSHEAR:
DoCastVictim(SPELL_CHRONOSHEAR);
events.ScheduleEvent(EVENT_CHONOSHEAR, 20s);
break;
case EVENT_EON_SHATTER:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
{
me->CastSpell(target, SPELL_EON_SHATTER_JUMP);
me->CastSpell(target, SPELL_EON_SHATTER);
me->CastSpell(target, SPELL_EON_SHATTER_DAMAGE);
}
DoCastSelf(SPELL_EON_SHATTER_AURA);
events.ScheduleEvent(EVENT_EON_SHATTER, 25s);
break;
case EVENT_SAND_STOMP:
DoCast(SPELL_SAND_STOMP_AURA);
DoCast(SPELL_SAND_STOMP);
events.ScheduleEvent(EVENT_SAND_STOMP, 12s);
break;
case EVENT_SHEARED_LIFESPAN:
DoCastVictim(SPELL_SHEARED_LIFESPAN_AURA);
events.ScheduleEvent(EVENT_SHEARED_LIFESPAN, 30s);
break;
case EVENT_WITHERING_SANDPOOL:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
me->CastSpell(target, SPELL_WITHERING_SANDPOOL);
events.ScheduleEvent(EVENT_WITHERING_SANDPOOL, 62s);
break;
default:
break;
}
}
}
};
void AddSC_boss_chronikar()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_chronikar);
};
@@ -0,0 +1,166 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum chronolorddeiosSpells
{
SPELL_INFINITE_CORRUPTION = 416264,
SPELL_INFINITE_CORRUPTION_DAMAGE = 416265,
SPELL_INFINITY_NOVA = 410908,
SPELL_INFINITY_ORB = 410904,
SPELL_INFINITY_ORB_AT = 410905,
SPELL_SUMMON_INFINITE_KEEPER = 416152,
SPELL_TEMPORAL_BREATH = 416139,
SPELL_TEMPORAL_SCAR = 417413,
SPELL_TEMPORAL_SHIFT = 419596,
PERIODIC_ENERGY_GAIN = 299956,
};
enum chronolorddeiosevents
{
EVENT_INFINITE_CORRUPTION = 1,
EVENT_INFINITY_NOVA,
EVENT_INFINITY_ORB,
EVENT_SUMMON_INFINITE_KEEPER,
EVENT_TEMPORAL_BREATH,
EVENT_TEMPORAL_SCAR,
EVENT_TEMPORAL_SHIFT,
};
//199000 Chrono lord deios
class boss_chrono_lord_deios : public BossAI
{
public:
boss_chrono_lord_deios(Creature* creature) : BossAI(creature, DATA_CHRONO_LORD_DEIOS) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_INFINITE_CORRUPTION, 24s);
events.ScheduleEvent(EVENT_INFINITY_NOVA, 8s);
events.ScheduleEvent(EVENT_INFINITY_ORB, 12s);
events.ScheduleEvent(EVENT_SUMMON_INFINITE_KEEPER, 14s);
events.ScheduleEvent(EVENT_TEMPORAL_BREATH, 22s);
events.ScheduleEvent(EVENT_TEMPORAL_SCAR, 17s);
events.ScheduleEvent(EVENT_TEMPORAL_SHIFT, 28s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_INFINITE_CORRUPTION, 2s);
}
events.Update(diff);
std::vector<Player*> targetList;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_INFINITE_CORRUPTION:
DoCast(SPELL_INFINITE_CORRUPTION);
DoCast(SPELL_INFINITE_CORRUPTION_DAMAGE);
events.ScheduleEvent(EVENT_INFINITE_CORRUPTION, 20s);
break;
case EVENT_INFINITY_NOVA:
DoCast(SPELL_INFINITY_NOVA);
events.ScheduleEvent(EVENT_INFINITY_NOVA, 15s);
break;
case EVENT_INFINITY_ORB:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
{
me->CastSpell(target, SPELL_INFINITY_ORB);
me->CastSpell(target, SPELL_INFINITY_ORB_AT);
}
me->GetPlayerListInGrid(targetList, 100.0f);
for (Player* targets : targetList)
if (targets->HasAura(SPELL_TEMPORAL_SCAR))
targets->RemoveAurasDueToSpell(SPELL_TEMPORAL_SCAR);
events.ScheduleEvent(EVENT_INFINITY_ORB, 12s);
break;
case EVENT_SUMMON_INFINITE_KEEPER:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
me->CastSpell(target, SPELL_SUMMON_INFINITE_KEEPER);
events.ScheduleEvent(EVENT_SUMMON_INFINITE_KEEPER, 91s);
break;
case EVENT_TEMPORAL_BREATH:
DoCast(SPELL_TEMPORAL_BREATH);
events.ScheduleEvent(EVENT_TEMPORAL_BREATH, 37s);
break;
case EVENT_TEMPORAL_SCAR:
DoCastVictim(SPELL_TEMPORAL_SCAR);
events.ScheduleEvent(EVENT_TEMPORAL_SCAR, 44s);
break;
case EVENT_TEMPORAL_SHIFT:
DoCastSelf(SPELL_TEMPORAL_SHIFT);
events.ScheduleEvent(EVENT_TEMPORAL_SHIFT, 53s);
break;
default:
break;
}
}
}
};
void AddSC_boss_chrono_lord_deios()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_chrono_lord_deios);
};
@@ -0,0 +1,177 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum IridikronthestonescaledSpells
{
SPELL_CATACLYSM_OBLITERATION_TRIGGER = 414177,
SPELL_CATACLYSM_OBLITERATION = 414184,
SPELL_CRUSHING_ONSLAUGHT = 409558,
SPELL_EARTHSURGE = 409456,
SPELL_EARTHSURGE_AURA = 414452,
SPELL_EXTINCTION_BLAST_TRIGGER = 409261,
SPELL_EXTINCTION_BLAST = 409266,
SPELL_EXTICTION_BLAST_AURA = 414300,
SPELL_PULVERIZING_CREATIONS = 409879,
SPELL_PULVERIZING_CREATIONS_DAMAGE = 409884,
SPELL_PULVERIZING_EXHALATION = 409635,
SPELL_PULVERIZING_EXHALATION_DAMAGE = 409642,
SPELL_PUNCTURED_GROUND = 414376,
SPELL_STONECRACK = 414552,
SPELL_STONECRACKER_BARRAGE = 414535,
PERIODIC_ENERGY_GAIN = 299956,
};
enum Iridikronthestonescaledevents
{
EVENT_CATACLYSM_OBLITERATION = 1,
EVENT_CRUSHING_ONSLAUGHT,
EVENT_EARTHSURGE,
EVENT_EXTINCTION_BLAST,
EVENT_PULVERIZING_CREATIONS,
EVENT_PULVERIZING_EXHALATION,
EVENT_PUNCTURED_GROUND,
EVENT_STONECRACKER,
EVENT_STONECRACKER_BARRAGE,
};
//194907 Iridikronthestonescaled
class boss_iridikron_the_stonescaled : public BossAI
{
public:
boss_iridikron_the_stonescaled(Creature* creature) : BossAI(creature, DATA_IRIDIKRON_THE_STONESCALED) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_CATACLYSM_OBLITERATION, 24s);
events.ScheduleEvent(EVENT_CRUSHING_ONSLAUGHT, 8s);
events.ScheduleEvent(EVENT_EARTHSURGE, 12s);
events.ScheduleEvent(EVENT_EXTINCTION_BLAST, 14s);
events.ScheduleEvent(EVENT_PULVERIZING_CREATIONS, 22s);
events.ScheduleEvent(EVENT_PULVERIZING_EXHALATION, 17s);
events.ScheduleEvent(EVENT_STONECRACKER, 17s);
events.ScheduleEvent(EVENT_STONECRACKER_BARRAGE, 17s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING) && !me->HasAura(SPELL_EARTHSURGE))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_EARTHSURGE, 2s);
}
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CATACLYSM_OBLITERATION:
DoCast(SPELL_CATACLYSM_OBLITERATION_TRIGGER);
DoCast(SPELL_CATACLYSM_OBLITERATION);
me->RemoveAurasDueToSpell(SPELL_EARTHSURGE);
events.ScheduleEvent(EVENT_CATACLYSM_OBLITERATION, 20s);
break;
case EVENT_CRUSHING_ONSLAUGHT:
DoCastVictim(SPELL_CRUSHING_ONSLAUGHT);
events.ScheduleEvent(EVENT_CRUSHING_ONSLAUGHT, 15s);
break;
case EVENT_EARTHSURGE:
DoCast(SPELL_EARTHSURGE);
DoCastVictim(SPELL_EARTHSURGE_AURA);
events.ScheduleEvent(EVENT_EARTHSURGE, 27s);
break;
case EVENT_EXTINCTION_BLAST:
DoCastVictim(SPELL_EXTINCTION_BLAST_TRIGGER);
DoCastVictim(SPELL_EXTINCTION_BLAST);
DoCastVictim(SPELL_EXTICTION_BLAST_AURA);
events.ScheduleEvent(EVENT_EXTINCTION_BLAST, 91s);
break;
case EVENT_PULVERIZING_CREATIONS:
DoCastVictim(SPELL_PULVERIZING_CREATIONS);
DoCastVictim(SPELL_PULVERIZING_CREATIONS_DAMAGE);
events.ScheduleEvent(EVENT_PULVERIZING_CREATIONS, 37s);
break;
case EVENT_PULVERIZING_EXHALATION:
DoCast(SPELL_PULVERIZING_EXHALATION);
DoCast(SPELL_PULVERIZING_EXHALATION_DAMAGE);
events.ScheduleEvent(EVENT_PULVERIZING_EXHALATION, 44s);
break;
case EVENT_PUNCTURED_GROUND:
DoCast(SPELL_PUNCTURED_GROUND);
events.ScheduleEvent(EVENT_PUNCTURED_GROUND, 48s);
break;
case EVENT_STONECRACKER:
DoCastVictim(SPELL_STONECRACK);
events.ScheduleEvent(EVENT_STONECRACKER, 54s);
break;
case EVENT_STONECRACKER_BARRAGE:
DoCastVictim(SPELL_STONECRACKER_BARRAGE);
events.ScheduleEvent(EVENT_STONECRACKER_BARRAGE, 32s);
break;
default:
break;
}
}
}
};
void AddSC_boss_iridikron_the_stonescaled()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_iridikron_the_stonescaled);
};
@@ -0,0 +1,178 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum manifested_timewaysSpells
{
SPELL_ACCELERATING_TIME = 403912,
SPELL_CHRONO_FADED_AURA = 404141,
SPELL_CHRONO_FADED = 405696,
SPELL_CHRONO_FADED_DAMAGE = 405478,
SPELL_CHRONOFADE = 405448,
SPELL_DECAYING_TIME = 403910,
SPELL_FRAGMENTS_OF_TIME_AURA = 404650,
SPELL_FRAGMENTS_OF_TIME = 405431,
SPELL_RADIANT = 414307,
SPELL_SAND_ZONE_AURA = 413329,
SPELL_SAND_ZONE = 413332,
SPELL_UNWIND = 414303,
SPELL_UNWIND_DAMAGE = 414304,
PERIODIC_ENERGY_GAIN = 299956,
};
enum manifested_timewaysevents
{
EVENT_ACCELERATING_TIME = 1,
EVENT_CHRONO_FADED,
EVENT_DECAYING_TIME,
EVENT_FRAGMENTS_OF_TIME,
EVENT_RADIANT,
EVENT_SAND_ZONE,
EVENT_UNWIND,
};
//206238 manifested_timeways
class boss_manifested_timeways : public BossAI
{
public:
boss_manifested_timeways(Creature* creature) : BossAI(creature, DATA_MANIFESTED_TIMEWAYS) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_ACCELERATING_TIME, 24s);
events.ScheduleEvent(EVENT_CHRONO_FADED, 8s);
events.ScheduleEvent(EVENT_DECAYING_TIME, 12s);
events.ScheduleEvent(EVENT_FRAGMENTS_OF_TIME, 14s);
events.ScheduleEvent(EVENT_RADIANT, 5s);
events.ScheduleEvent(EVENT_SAND_ZONE, 30s);
events.ScheduleEvent(EVENT_UNWIND, 34s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
me->RemoveAurasDueToSpell(SPELL_SAND_ZONE_AURA);
me->RemoveAurasDueToSpell(SPELL_SAND_ZONE);
events.ScheduleEvent(EVENT_ACCELERATING_TIME, 2s);
}
events.Update(diff);
std::list<Player*> targetList;
std::list<Player*> targetList1;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_ACCELERATING_TIME:
DoCastSelf(SPELL_ACCELERATING_TIME);
events.ScheduleEvent(EVENT_ACCELERATING_TIME, 61s);
break;
case EVENT_CHRONO_FADED:
DoCastVictim(SPELL_CHRONO_FADED_AURA);
DoCastVictim(SPELL_CHRONO_FADED);
DoCastVictim(SPELL_CHRONOFADE);
DoCastVictim(SPELL_CHRONO_FADED_DAMAGE);
me->GetPlayerListInGrid(targetList, 100.0f);
for (Player* targets : targetList)
if (targets->HasAura(SPELL_DECAYING_TIME))
targets->RemoveAurasDueToSpell(SPELL_DECAYING_TIME);
events.ScheduleEvent(EVENT_CHRONO_FADED, 15s);
break;
case EVENT_DECAYING_TIME:
DoCast(SPELL_DECAYING_TIME);
me->GetPlayerListInGrid(targetList1, 100.0f);
for (Player* targets : targetList1)
if (targets->HasAura(SPELL_CHRONO_FADED_AURA))
targets->RemoveAurasDueToSpell(SPELL_CHRONO_FADED_AURA);
me->RemoveAurasDueToSpell(SPELL_SAND_ZONE_AURA);
me->RemoveAurasDueToSpell(SPELL_SAND_ZONE);
events.ScheduleEvent(EVENT_DECAYING_TIME, 25s);
break;
case EVENT_FRAGMENTS_OF_TIME:
DoCastVictim(SPELL_FRAGMENTS_OF_TIME_AURA);
DoCastVictim(SPELL_FRAGMENTS_OF_TIME);
events.ScheduleEvent(EVENT_FRAGMENTS_OF_TIME, 33s);
break;
case EVENT_RADIANT:
DoCast(SPELL_RADIANT);
events.ScheduleEvent(EVENT_RADIANT, 37s);
break;
case EVENT_SAND_ZONE:
/*DoCastSelf(SPELL_SAND_ZONE_AURA); need fix to remove aura,it isnt working
DoCastSelf(SPELL_SAND_ZONE);*/
events.ScheduleEvent(EVENT_SAND_ZONE, 46s);
break;
case EVENT_UNWIND:
DoCastVictim(SPELL_UNWIND);
DoCastVictim(SPELL_UNWIND_DAMAGE);
events.ScheduleEvent(EVENT_UNWIND, 58s);
break;
default:
break;
}
}
}
};
void AddSC_boss_manifested_timeways()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_manifested_timeways);
};
@@ -0,0 +1,140 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum morchieSpells
{
SPELL_FAMILIAR_FACES_VISUAL = 405279,
SPELL_FAMILIAR_FACES = 407504,
SPELL_MORE_PROBLEMS = 404153,
SPELL_SAND_BLAST = 404916,
SPELL_SAND_BLAST_VISUAL = 404935,
SPELL_SAND_BLAST_DAMAGE = 244663,
SPELL_TIME_TRAPS = 406481,
SPELL_TIME_TRAPS_AT = 401666,// 28391 areatrigger
SPELL_TIME_TRAPS_DAMAGE = 405923,
PERIODIC_ENERGY_GAIN = 299956,
};
enum morchieevents
{
EVENT_FAMILIAR_FACES = 1,
EVENT_MORE_PROBLEMS,
EVENT_SAND_BLAST,
EVENT_TIME_TRAPS,
};
//202789 Morchie
class boss_morchie : public BossAI
{
public:
boss_morchie(Creature* creature) : BossAI(creature, DATA_MORCHIE) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_FAMILIAR_FACES, 24s);
events.ScheduleEvent(EVENT_MORE_PROBLEMS, 8s);
events.ScheduleEvent(EVENT_SAND_BLAST, 12s);
events.ScheduleEvent(EVENT_TIME_TRAPS, 14s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_MORE_PROBLEMS, 2s);
}
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_FAMILIAR_FACES:
DoCast(SPELL_FAMILIAR_FACES_VISUAL);
DoCastSelf(SPELL_FAMILIAR_FACES);
events.ScheduleEvent(EVENT_FAMILIAR_FACES, 14s);
break;
case EVENT_MORE_PROBLEMS:
DoCastVictim(SPELL_MORE_PROBLEMS);
events.ScheduleEvent(EVENT_MORE_PROBLEMS, 57s);
break;
case EVENT_SAND_BLAST:
DoCast(SPELL_SAND_BLAST);
DoCast(SPELL_SAND_BLAST_VISUAL);
DoCast(SPELL_SAND_BLAST_DAMAGE);
events.ScheduleEvent(EVENT_SAND_BLAST, 18s);
break;
case EVENT_TIME_TRAPS:
DoCast(SPELL_TIME_TRAPS);
DoCast(SPELL_TIME_TRAPS_AT);
DoCastVictim(SPELL_TIME_TRAPS_DAMAGE);
events.ScheduleEvent(EVENT_TIME_TRAPS, 37s);
break;
default:
break;
}
}
}
};
void AddSC_boss_morchie()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_morchie);
};
@@ -0,0 +1,211 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum timelostbattlefieldSpells
{
SPELL_BLADESTORM_JUMP = 410234,
SPELL_BLADESTORM_AURA = 410235,
SPELL_BLADESTORM_PERIODIC = 410236,
SPELL_DECAPITATE = 410254,
SPELL_DECAPITATE_CHARGE = 410255,
SPELL_DECAPITATE_DAMAGE = 410258,
SPELL_FOR_THE_HORDE = 418046,
SPELL_MORTAL_WOUNDS = 410497,
SPELL_SHOCKWAVE = 108046,
SPELL_SHOCKWAVE_DAMAGE = 408228,
SPELL_THIRST_FOR_BATTLE_PROC = 419602,
SPELL_THIRST_FOR_BATTLE_AURA = 419603,
SPELL_BATTLE_SENSES = 419609,
SPELL_BALTTLE_SENSES_AURA = 419611,
SPELL_FOR_THE_ALLIANCE = 418047,
SPELL_MORTAL_STRIKES = 418059,
SPELL_MORTAL_STRIKES_CHARGE = 418060,
SPELL_MORTAL_STRIKES_DAMAGE = 418061,
PERIODIC_ENERGY_GAIN = 299956,
SPELL_ADD_BLIZZARD = 417026,
SPELL_ADD_RAIN_OF_FIRE = 407123,
SPELL_ADD_CONSECRATION = 417002,
};
enum timelostbattlefieldevents
{
EVENT_BLADESTORM = 1,
EVENT_DECAPITATE,
EVENT_FOR_THE_HORDE,
EVENT_MORTAL_WOUNDS,
EVENT_SHOCKWAVE,
EVENT_THIRST_FOR_BATTLE,
EVENT_BATTLE_SENSES,
EVENT_FOR_THE_ALLIANCE,
EVENT_MORTAL_STRIKES,
};
//209207,// GROMMASH // 209208 ANDUIN
class boss_time_lost_battlefield : public BossAI
{
public:
boss_time_lost_battlefield(Creature* creature) : BossAI(creature, DATA_TIME_LOST_BATTLEFIELD) {}
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_BLADESTORM, 24s);
events.ScheduleEvent(EVENT_MORTAL_WOUNDS, 14s);
events.ScheduleEvent(EVENT_SHOCKWAVE, 22s);
if (who->ToPlayer()->GetTeamId() == TEAM_ALLIANCE)
{
events.ScheduleEvent(EVENT_DECAPITATE, 8s);
events.ScheduleEvent(EVENT_FOR_THE_HORDE, 12s);
events.ScheduleEvent(EVENT_THIRST_FOR_BATTLE, 17s);
}
else
{
events.ScheduleEvent(EVENT_BATTLE_SENSES, 8s);
events.ScheduleEvent(EVENT_FOR_THE_ALLIANCE, 12s);
events.ScheduleEvent(EVENT_MORTAL_STRIKES, 17s);
}
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_BLADESTORM, 2s);
}
events.Update(diff);
std::list<Player*> targetList;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
// both
case EVENT_BLADESTORM:
DoCast(SPELL_BLADESTORM_JUMP);
DoCast(SPELL_BLADESTORM_AURA);
DoCast(SPELL_BLADESTORM_PERIODIC);
me->GetPlayerListInGrid(targetList, 500.0f);
for (Player* targets : targetList)
{
targets->RemoveAurasDueToSpell(SPELL_ADD_BLIZZARD);
targets->RemoveAurasDueToSpell(SPELL_ADD_RAIN_OF_FIRE);
targets->RemoveAurasDueToSpell(SPELL_ADD_CONSECRATION);
}
events.ScheduleEvent(EVENT_BLADESTORM, 51s);
break;
case EVENT_MORTAL_WOUNDS:
DoCastVictim(SPELL_MORTAL_WOUNDS);
events.ScheduleEvent(EVENT_MORTAL_WOUNDS, 91s);
break;
case EVENT_SHOCKWAVE:
DoCast(SPELL_SHOCKWAVE_DAMAGE);
DoCast(SPELL_SHOCKWAVE);
events.ScheduleEvent(EVENT_SHOCKWAVE, 31s);
break;
//grommash
case EVENT_DECAPITATE:
DoCastVictim(SPELL_DECAPITATE);
DoCastVictim(SPELL_DECAPITATE_CHARGE);
DoCastVictim(SPELL_DECAPITATE_DAMAGE);
events.ScheduleEvent(EVENT_DECAPITATE, 14s);
break;
case EVENT_FOR_THE_HORDE:
DoCast(SPELL_FOR_THE_HORDE);
events.ScheduleEvent(EVENT_FOR_THE_HORDE, 62s);
break;
case EVENT_THIRST_FOR_BATTLE:
DoCastSelf(SPELL_THIRST_FOR_BATTLE_PROC);
DoCastSelf(SPELL_THIRST_FOR_BATTLE_AURA);
events.ScheduleEvent(EVENT_THIRST_FOR_BATTLE, 44s);
break;
//anduin
case EVENT_BATTLE_SENSES:
DoCastSelf(SPELL_BATTLE_SENSES);
DoCastSelf(SPELL_BALTTLE_SENSES_AURA);
events.ScheduleEvent(EVENT_BATTLE_SENSES, 14s);
break;
case EVENT_FOR_THE_ALLIANCE:
DoCast(SPELL_FOR_THE_ALLIANCE);
events.ScheduleEvent(EVENT_FOR_THE_ALLIANCE, 62s);
break;
case EVENT_MORTAL_STRIKES:
DoCastVictim(SPELL_MORTAL_STRIKES);
DoCastVictim(SPELL_MORTAL_STRIKES_CHARGE);
DoCastVictim(SPELL_MORTAL_STRIKES_DAMAGE);
events.ScheduleEvent(EVENT_MORTAL_STRIKES, 44s);
break;
default:
break;
}
}
}
};
void AddSC_boss_time_lost_battlefield()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_time_lost_battlefield);
};
@@ -0,0 +1,180 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "Dawnoftheinfinite.h"
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
enum TyrtheinfinitekeeperSpells
{
SPELL_CONSECRATED_GROUND = 403724,
SPELL_DIVIDING_STRIKE = 400641,
SPELL_INFINITE_ANNIHILATION_DAMAGE = 400597,
SPELL_INFINITE_ANNIHILATION = 401482,
SPELL_PONDERING_THE_OATHSTONE = 413595,
SPELL_RADIANT_BARRIER = 410249,
SPELL_SIPHON_OATHSTONE = 400642,
SPELL_SPARK_OF_TYR = 400649,
SPELL_SPARK_OF_TYR_AURA = 400681,
SPELL_SPARK_OF_TYR_DAMAGE = 400683,
SPELL_TITANIC_BLOW = 417339,
SPELL_TITANIC_EMPOWERMENT = 408183,
PERIODIC_ENERGY_GAIN = 299956,
};
enum Tyrtheinfinitekeeperevents
{
EVENT_CONSECRATED_GROUND = 1,
EVENT_DIVIDING_STRIKE,
EVENT_INFINITE_ANNHILATION,
EVENT_PONDERING_THE_OATHSTONE,
EVENT_RADIANT_BARRIER,
EVENT_SIPHON_OATHSTONE,
EVENT_SPARK_OF_TYR,
EVENT_TITANIC_BLOW,
EVENT_TITANIC_EMPOWERMENT,
};
//198998 Tyr the infinite keeper
struct boss_tyr_the_infinite_keeper : public BossAI
{
boss_tyr_the_infinite_keeper(Creature* creature) : BossAI(creature, DATA_TYR_THE_INFINITE_KEEPER) { }
void Reset() override
{
BossAI::Reset();
me->RemoveAura(PERIODIC_ENERGY_GAIN);
me->SetPowerType(POWER_ENERGY);
me->SetPower(POWER_ENERGY, 0);
me->RemoveAllAreaTriggers();
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
DoCast(PERIODIC_ENERGY_GAIN);
events.ScheduleEvent(EVENT_CONSECRATED_GROUND, 24s);
events.ScheduleEvent(EVENT_DIVIDING_STRIKE, 8s);
events.ScheduleEvent(EVENT_INFINITE_ANNHILATION, 12s);
events.ScheduleEvent(EVENT_PONDERING_THE_OATHSTONE, 14s);
events.ScheduleEvent(EVENT_RADIANT_BARRIER, 22s);
events.ScheduleEvent(EVENT_SIPHON_OATHSTONE, 17s);
events.ScheduleEvent(EVENT_SPARK_OF_TYR, 27s);
events.ScheduleEvent(EVENT_TITANIC_BLOW, 35s);
events.ScheduleEvent(EVENT_TITANIC_EMPOWERMENT, 43s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
me->RemoveAllAreaTriggers();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
me->RemoveAllAreaTriggers();
if (Creature* futureself = me->FindNearestCreature(NPC_FUTURE_SELF, 300.0f))
futureself->DespawnOrUnsummon(3s);
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->GetPowerPct(POWER_ENERGY) == 100)
{
me->ModifyPower(POWER_ENERGY, -100);
events.ScheduleEvent(EVENT_RADIANT_BARRIER, 2s);
}
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CONSECRATED_GROUND:
DoCastVictim(SPELL_CONSECRATED_GROUND);
events.ScheduleEvent(EVENT_CONSECRATED_GROUND, 20s);
me->RemoveAura(SPELL_RADIANT_BARRIER);
break;
case EVENT_DIVIDING_STRIKE:
DoCastVictim(SPELL_DIVIDING_STRIKE);
events.ScheduleEvent(EVENT_DIVIDING_STRIKE, 15s);
break;
case EVENT_INFINITE_ANNHILATION:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
{
me->CastSpell(target, SPELL_INFINITE_ANNIHILATION);
me->CastSpell(target, SPELL_INFINITE_ANNIHILATION_DAMAGE);
events.ScheduleEvent(EVENT_INFINITE_ANNHILATION, 12s);
}
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_CONSECRATED_GROUND);
break;
case EVENT_PONDERING_THE_OATHSTONE:
DoCastVictim(SPELL_PONDERING_THE_OATHSTONE);
events.ScheduleEvent(EVENT_PONDERING_THE_OATHSTONE, 91s);
break;
case EVENT_RADIANT_BARRIER:
DoCastSelf(SPELL_RADIANT_BARRIER);
events.ScheduleEvent(EVENT_RADIANT_BARRIER, 67s);
break;
case EVENT_SIPHON_OATHSTONE:
DoCast(SPELL_SIPHON_OATHSTONE);
events.ScheduleEvent(EVENT_SIPHON_OATHSTONE, 44s);
break;
case EVENT_SPARK_OF_TYR:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
{
me->CastSpell(target, SPELL_SPARK_OF_TYR);
me->CastSpell(target, SPELL_SPARK_OF_TYR_AURA);
me->CastSpell(target, SPELL_SPARK_OF_TYR_DAMAGE);
events.ScheduleEvent(EVENT_SPARK_OF_TYR, 54s);
}
break;
case EVENT_TITANIC_BLOW:
DoCastVictim(SPELL_TITANIC_BLOW);
events.ScheduleEvent(EVENT_TITANIC_BLOW, 62s);
break;
case EVENT_TITANIC_EMPOWERMENT:
DoCastSelf(SPELL_TITANIC_EMPOWERMENT);
events.ScheduleEvent(EVENT_TITANIC_EMPOWERMENT, 71s);
break;
default:
break;
}
}
}
};
void AddSC_boss_tyr_the_infinite_keeper()
{
RegisterdawnoftheinfinitedfCreatureAI(boss_tyr_the_infinite_keeper);
};
@@ -0,0 +1,105 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "InstanceScript.h"
#include "ScriptMgr.h"
#include "Dawnoftheinfinite.h"
#include "Group.h"
ObjectData const creatureData[] =
{
{ BOSS_CHRONIKAR, DATA_CHRONIKAR },
{ BOSS_MANIFESTED_TIMEWAYS, DATA_MANIFESTED_TIMEWAYS },
{ BOSS_BLIGHT_OF_GALAKROND, DATA_BLIGHT_OF_GALAKROND },
{ BOSS_IRIDIKRON_THE_STONESCALED, DATA_IRIDIKRON_THE_STONESCALED },
{ BOSS_TYR_THE_INFINITE_KEEPER, DATA_TYR_THE_INFINITE_KEEPER },
{ BOSS_MORCHIE, DATA_MORCHIE },
{ BOSS_TIME_LOST_BATTLEFIELD, DATA_TIME_LOST_BATTLEFIELD },
{ BOSS_CHRONO_LORD_DEIOS, DATA_CHRONO_LORD_DEIOS },
{ 0, 0 } // END
};
DungeonEncounterData const encounters[] =
{
{ DATA_CHRONIKAR, {{ 2666 }} },
{ DATA_MANIFESTED_TIMEWAYS, {{ 2667 }} },
{ DATA_BLIGHT_OF_GALAKROND, {{ 2668 }} },
{ DATA_IRIDIKRON_THE_STONESCALED, {{ 2669 }} },
{ DATA_TYR_THE_INFINITE_KEEPER, {{ 2670 }} },
{ DATA_MORCHIE, {{ 2671 }} },
{ DATA_TIME_LOST_BATTLEFIELD, {{ 2672 }} },
{ DATA_CHRONO_LORD_DEIOS, {{ 2673 }} },
};
ObjectGuid grommash_guid;
ObjectGuid anduin_guid;
Team faction_group = HORDE;
class instance_dawnoftheinfinite_df : public InstanceMapScript
{
public:
instance_dawnoftheinfinite_df() : InstanceMapScript(DawnoftheinfiniteScriptNameScriptName, 2579) { }
struct instance_dawnoftheinfinite_df_InstanceMapScript: public InstanceScript
{
instance_dawnoftheinfinite_df_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadDungeonEncounterData(encounters);
}
void OnPlayerEnter(Player* player) override
{
if (!player->GetGroup() || !player->GetGroup()->GetLeaderGUID())
return;
ObjectGuid leaderguid = player->GetGroup()->GetLeaderGUID();
if (!leaderguid)
return;
if (Player* leader = ObjectAccessor::GetPlayer(*player, leaderguid))
{
if (leader->GetTeam() == HORDE)
faction_group = HORDE;
else if (leader->GetTeam() == ALLIANCE)
faction_group = ALLIANCE;
else
faction_group = HORDE;
}
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case BOSS_TIME_LOST_BATTLEFIELD: // Horde
if (faction_group == HORDE)
grommash_guid = creature->GetGUID();
break;
case BOSS_TIME_LOST_BATTLEFIELD_A: // Alliance
if (faction_group == ALLIANCE)
anduin_guid = creature->GetGUID();
break;
default:
break;
}
}
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_dawnoftheinfinite_df_InstanceMapScript(map);
}
};
void AddSC_instance_dawnoftheinfinite_df()
{
new instance_dawnoftheinfinite_df();
}
@@ -218,7 +218,7 @@ struct boss_Dathea_Stormlash : public BossAI
break;
case EVENT_CROSS_WINDS:
DoCastVictim(SPELL_CROSS_WINDS);
DoCastVictim(SPELL_CROSS_WINDS_DMG, 20.0f);
DoCastVictim(SPELL_CROSS_WINDS_DMG);
events.ScheduleEvent(EVENT_CROSS_WINDS, 40s);
break;
case EVENT_CYCLONE:
@@ -69,6 +69,19 @@ void AddSC_Boss_Gutshoot();
//AmirdrassilTheDreamsHope
// TODO
// Dawn Of The Infinite
void AddSC_instance_dawnoftheinfinite_df();
void AddSC_Dawnoftheinfinite();
void AddSC_boss_chronikar();
void AddSC_boss_manifested_timeways();
void AddSC_boss_blight_of_galakrond();
void AddSC_boss_iridikron_the_stonescaled();
void AddSC_boss_tyr_the_infinite_keeper();
void AddSC_boss_morchie();
void AddSC_boss_time_lost_battlefield();
void AddSC_boss_chrono_lord_deios();
// The name of this function should match:
// void Add${NameOfDirectory}Scripts()
void AddDragonIslesScripts()
@@ -125,4 +138,16 @@ void AddDragonIslesScripts()
//AmirdrassilTheDreamsHope
// TODO
// Dawn Of The Infinite
AddSC_instance_dawnoftheinfinite_df();
AddSC_Dawnoftheinfinite();
AddSC_boss_chronikar();
AddSC_boss_manifested_timeways();
AddSC_boss_blight_of_galakrond();
AddSC_boss_iridikron_the_stonescaled();
AddSC_boss_tyr_the_infinite_keeper();
AddSC_boss_morchie();
AddSC_boss_time_lost_battlefield();
AddSC_boss_chrono_lord_deios();
}