merge
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user