Fix normal10/normal25 raid detection in scripts.

Replace HEROIC(n,h) macro by DUNGEON_MODE(n,h), RAID_MODE(n10,n25) and RAID_MODE(n10,n25,h10,h25) functions
Cleanup all HeroicMode like flags in ScriptedAI sub-class
Fix some missing virtual destructors

--HG--
branch : trunk
This commit is contained in:
Trazom62
2010-01-12 20:51:59 +01:00
parent aeb008d4ef
commit 6cf82048a5
103 changed files with 454 additions and 536 deletions
+2 -1
View File
@@ -87,7 +87,8 @@ ScriptedAI::ScriptedAI(Creature* pCreature) : CreatureAI(pCreature),
m_bCombatMovement(true), m_bCombatMovement(true),
m_uiEvadeCheckCooldown(2500) m_uiEvadeCheckCooldown(2500)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic(); m_heroicMode = m_creature->GetMap()->IsHeroic();
m_difficulty = Difficulty(m_creature->GetMap()->GetSpawnMode());
} }
void ScriptedAI::AttackStartNoMove(Unit* pWho) void ScriptedAI::AttackStartNoMove(Unit* pWho)
+62 -3
View File
@@ -43,7 +43,7 @@ class SummonList : public std::list<uint64>
struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI
{ {
explicit ScriptedAI(Creature* pCreature); explicit ScriptedAI(Creature* pCreature);
~ScriptedAI() {} virtual ~ScriptedAI() {}
//************* //*************
//CreatureAI Functions //CreatureAI Functions
@@ -91,8 +91,6 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI
//For fleeing //For fleeing
bool IsFleeing; bool IsFleeing;
bool HeroicMode;
//************* //*************
//Pure virtual functions //Pure virtual functions
//************* //*************
@@ -171,14 +169,74 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI
bool EnterEvadeIfOutOfCombatArea(const uint32 uiDiff); bool EnterEvadeIfOutOfCombatArea(const uint32 uiDiff);
// return true for heroic mode. i.e.
// - for dungeon in mode 10-heroic,
// - for raid in mode 10-Heroic
// - for raid in mode 25-heroic
// DO NOT USE to check raid in mode 25-normal.
bool IsHeroic() { return m_heroicMode; }
// return the dungeon or raid difficulty
Difficulty getDifficulty() { return m_difficulty; }
template<class T> inline
const T& DUNGEON_MODE(const T& normal5, const T& heroic10)
{
switch(m_difficulty)
{
case DUNGEON_DIFFICULTY_NORMAL:
return normal5;
case DUNGEON_DIFFICULTY_HEROIC:
return heroic10;
}
return heroic10;
}
template<class T> inline
const T& RAID_MODE(const T& normal10, const T& normal25)
{
switch(m_difficulty)
{
case RAID_DIFFICULTY_10MAN_NORMAL:
return normal10;
case RAID_DIFFICULTY_25MAN_NORMAL:
return normal25;
}
return normal25;
}
template<class T> inline
const T& RAID_MODE(const T& normal10, const T& normal25, const T& heroic10, const T& heroic25)
{
switch(m_difficulty)
{
case RAID_DIFFICULTY_10MAN_NORMAL:
return normal10;
case RAID_DIFFICULTY_25MAN_NORMAL:
return normal25;
case RAID_DIFFICULTY_10MAN_HEROIC:
return heroic10;
case RAID_DIFFICULTY_25MAN_HEROIC:
return heroic25;
}
return heroic25;
}
private: private:
bool m_bCombatMovement; bool m_bCombatMovement;
uint32 m_uiEvadeCheckCooldown; uint32 m_uiEvadeCheckCooldown;
bool m_heroicMode;
Difficulty m_difficulty;
}; };
struct TRINITY_DLL_DECL Scripted_NoMovementAI : public ScriptedAI struct TRINITY_DLL_DECL Scripted_NoMovementAI : public ScriptedAI
{ {
Scripted_NoMovementAI(Creature* creature) : ScriptedAI(creature) {} Scripted_NoMovementAI(Creature* creature) : ScriptedAI(creature) {}
virtual ~Scripted_NoMovementAI() {}
//Called at each attack of m_creature by any victim //Called at each attack of m_creature by any victim
void AttackStart(Unit* who); void AttackStart(Unit* who);
@@ -187,6 +245,7 @@ struct TRINITY_DLL_DECL Scripted_NoMovementAI : public ScriptedAI
struct TRINITY_DLL_DECL BossAI : public ScriptedAI struct TRINITY_DLL_DECL BossAI : public ScriptedAI
{ {
BossAI(Creature *c, uint32 id); BossAI(Creature *c, uint32 id);
virtual ~BossAI() {}
const uint32 bossId; const uint32 bossId;
EventMap events; EventMap events;
@@ -80,7 +80,6 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
boss_felblood_kaelthasAI(Creature* c) : ScriptedAI(c) boss_felblood_kaelthasAI(Creature* c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
Heroic = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
@@ -102,7 +101,6 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
// 4 = Applied an aura that allows them to fly, channeling visual, relased Arcane Orbs. // 4 = Applied an aura that allows them to fly, channeling visual, relased Arcane Orbs.
bool FirstGravityLapse; bool FirstGravityLapse;
bool Heroic;
bool HasTaunted; bool HasTaunted;
uint8 Phase; uint8 Phase;
@@ -271,7 +269,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
case 0: case 0:
{ {
// *Heroic mode only: // *Heroic mode only:
if (Heroic) if (IsHeroic())
{ {
if (PyroblastTimer <= diff) if (PyroblastTimer <= diff)
{ {
@@ -285,7 +283,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
if (FireballTimer <= diff) if (FireballTimer <= diff)
{ {
DoCast(m_creature->getVictim(), Heroic ? SPELL_FIREBALL_HEROIC : SPELL_FIREBALL_NORMAL); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_FIREBALL_NORMAL, SPELL_FIREBALL_HEROIC));
FireballTimer = urand(2000,6000); FireballTimer = urand(2000,6000);
} else FireballTimer -= diff; } else FireballTimer -= diff;
@@ -421,11 +419,9 @@ struct TRINITY_DLL_DECL mob_felkael_flamestrikeAI : public ScriptedAI
{ {
mob_felkael_flamestrikeAI(Creature *c) : ScriptedAI(c) mob_felkael_flamestrikeAI(Creature *c) : ScriptedAI(c)
{ {
Heroic = c->GetMap()->IsHeroic();
} }
uint32 FlameStrikeTimer; uint32 FlameStrikeTimer;
bool Heroic;
void Reset() void Reset()
{ {
@@ -443,7 +439,7 @@ struct TRINITY_DLL_DECL mob_felkael_flamestrikeAI : public ScriptedAI
{ {
if (FlameStrikeTimer <= diff) if (FlameStrikeTimer <= diff)
{ {
DoCast(m_creature, Heroic ? SPELL_FLAMESTRIKE1_HEROIC : SPELL_FLAMESTRIKE1_NORMAL, true); DoCast(m_creature, DUNGEON_MODE(SPELL_FLAMESTRIKE1_NORMAL, SPELL_FLAMESTRIKE1_HEROIC), true);
m_creature->Kill(m_creature); m_creature->Kill(m_creature);
} else FlameStrikeTimer -= diff; } else FlameStrikeTimer -= diff;
} }
@@ -90,13 +90,11 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
boss_priestess_delrissaAI(Creature* c) : ScriptedAI(c) boss_priestess_delrissaAI(Creature* c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
Heroic = c->GetMap()->IsHeroic();
memset(&m_auiLackeyGUID, 0, sizeof(m_auiLackeyGUID)); memset(&m_auiLackeyGUID, 0, sizeof(m_auiLackeyGUID));
LackeyEntryList.clear(); LackeyEntryList.clear();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool Heroic;
std::vector<uint32> LackeyEntryList; std::vector<uint32> LackeyEntryList;
uint64 m_auiLackeyGUID[MAX_ACTIVE_LACKEY]; uint64 m_auiLackeyGUID[MAX_ACTIVE_LACKEY];
@@ -269,7 +267,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
if (pAdd->isAlive()) if (pAdd->isAlive())
pTarget = pAdd; pTarget = pAdd;
DoCast(pTarget, Heroic ? SPELL_RENEW_HEROIC : SPELL_RENEW_NORMAL); DoCast(pTarget, DUNGEON_MODE(SPELL_RENEW_NORMAL, SPELL_RENEW_HEROIC));
RenewTimer = 5000; RenewTimer = 5000;
} else RenewTimer -= diff; } else RenewTimer -= diff;
@@ -314,7 +312,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
if (SWPainTimer <= diff) if (SWPainTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, Heroic ? SPELL_SW_PAIN_HEROIC : SPELL_SW_PAIN_NORMAL); DoCast(pTarget, DUNGEON_MODE(SPELL_SW_PAIN_NORMAL, SPELL_SW_PAIN_HEROIC));
SWPainTimer = 10000; SWPainTimer = 10000;
} else SWPainTimer -= diff; } else SWPainTimer -= diff;
@@ -67,11 +67,9 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
Crystals.push_back(guid); Crystals.push_back(guid);
} }
} }
Heroic = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool Heroic;
std::list<uint64> Crystals; std::list<uint64> Crystals;
@@ -246,7 +244,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
} else DrainLifeTimer -= diff; } else DrainLifeTimer -= diff;
// Heroic only // Heroic only
if (Heroic) if (IsHeroic())
{ {
if (DrainManaTimer <= diff) if (DrainManaTimer <= diff)
{ {
@@ -272,8 +270,10 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
if (DrainCrystalTimer <= diff) if (DrainCrystalTimer <= diff)
{ {
SelectNearestCrystal(); SelectNearestCrystal();
if (Heroic) DrainCrystalTimer = 10000 + rand()%5000; if (IsHeroic())
else DrainCrystalTimer = 20000 + rand()%5000; DrainCrystalTimer = 10000 + rand()%5000;
else
DrainCrystalTimer = 20000 + rand()%5000;
} else DrainCrystalTimer -= diff; } else DrainCrystalTimer -= diff;
} }
@@ -62,11 +62,9 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
boss_vexallusAI(Creature *c) : ScriptedAI(c) boss_vexallusAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
Heroic = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool Heroic;
uint32 ChainLightningTimer; uint32 ChainLightningTimer;
uint32 ArcaneShockTimer; uint32 ArcaneShockTimer;
@@ -136,7 +134,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
DoScriptText(SAY_ENERGY, m_creature); DoScriptText(SAY_ENERGY, m_creature);
DoScriptText(EMOTE_DISCHARGE_ENERGY, m_creature); DoScriptText(EMOTE_DISCHARGE_ENERGY, m_creature);
if (Heroic) if (IsHeroic())
{ {
DoCast(m_creature, H_SPELL_SUMMON_PURE_ENERGY1, false); DoCast(m_creature, H_SPELL_SUMMON_PURE_ENERGY1, false);
DoCast(m_creature, H_SPELL_SUMMON_PURE_ENERGY2, false); DoCast(m_creature, H_SPELL_SUMMON_PURE_ENERGY2, false);
@@ -147,14 +145,14 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
//below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in Mangos //below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in Mangos
m_creature->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0); m_creature->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (Heroic) if (IsHeroic())
m_creature->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0); m_creature->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
} }
if (ChainLightningTimer <= diff) if (ChainLightningTimer <= diff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, Heroic ? SPELL_H_CHAIN_LIGHTNING : SPELL_CHAIN_LIGHTNING); DoCast(pTarget, DUNGEON_MODE(SPELL_CHAIN_LIGHTNING, SPELL_H_CHAIN_LIGHTNING));
ChainLightningTimer = 8000; ChainLightningTimer = 8000;
} else ChainLightningTimer -= diff; } else ChainLightningTimer -= diff;
@@ -163,7 +161,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
if (pTarget) if (pTarget)
DoCast(pTarget, Heroic ? SPELL_H_ARCANE_SHOCK : SPELL_ARCANE_SHOCK); DoCast(pTarget, DUNGEON_MODE(SPELL_ARCANE_SHOCK, SPELL_H_ARCANE_SHOCK));
ArcaneShockTimer = 8000; ArcaneShockTimer = 8000;
} else ArcaneShockTimer -= diff; } else ArcaneShockTimer -= diff;
@@ -116,7 +116,7 @@ struct TRINITY_DLL_DECL boss_epochAI : public ScriptedAI
if (uiWoundingStrikeTimer < diff) if (uiWoundingStrikeTimer < diff)
{ {
DoCastVictim(HEROIC(SPELL_WOUNDING_STRIKE, H_SPELL_WOUNDING_STRIKE)); DoCastVictim(DUNGEON_MODE(SPELL_WOUNDING_STRIKE, H_SPELL_WOUNDING_STRIKE));
uiWoundingStrikeTimer = 5300; uiWoundingStrikeTimer = 5300;
} else uiWoundingStrikeTimer -= diff; } else uiWoundingStrikeTimer -= diff;
@@ -156,14 +156,14 @@ struct TRINITY_DLL_DECL boss_mal_ganisAI : public ScriptedAI
if (uiCarrionSwarmTimer < diff) if (uiCarrionSwarmTimer < diff)
{ {
DoCastVictim(HEROIC(SPELL_CARRION_SWARM,H_SPELL_CARRION_SWARM)); DoCastVictim(DUNGEON_MODE(SPELL_CARRION_SWARM,H_SPELL_CARRION_SWARM));
uiCarrionSwarmTimer = 7000; uiCarrionSwarmTimer = 7000;
} else uiCarrionSwarmTimer -= diff; } else uiCarrionSwarmTimer -= diff;
if (uiMindBlastTimer < diff) if (uiMindBlastTimer < diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_MIND_BLAST, H_SPELL_MIND_BLAST)); DoCast(pTarget, DUNGEON_MODE(SPELL_MIND_BLAST, H_SPELL_MIND_BLAST));
} else uiMindBlastTimer -= diff; } else uiMindBlastTimer -= diff;
if (uiVampiricTouchTimer < diff) if (uiVampiricTouchTimer < diff)
@@ -175,7 +175,7 @@ struct TRINITY_DLL_DECL boss_mal_ganisAI : public ScriptedAI
if (uiSleepTimer < diff) if (uiSleepTimer < diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_SLEEP, H_SPELL_SLEEP)); DoCast(pTarget, DUNGEON_MODE(SPELL_SLEEP, H_SPELL_SLEEP));
uiSleepTimer = urand(15000,20000); uiSleepTimer = urand(15000,20000);
} else uiSleepTimer -= diff; } else uiSleepTimer -= diff;
@@ -87,7 +87,7 @@ struct TRINITY_DLL_DECL boss_meathookAI : public ScriptedAI
if (uiDiseaseTimer <= diff) if (uiDiseaseTimer <= diff)
{ {
DoCastAOE(HEROIC(SPELL_DISEASE_EXPULSION,H_SPELL_DISEASE_EXPULSION)); DoCastAOE(DUNGEON_MODE(SPELL_DISEASE_EXPULSION,H_SPELL_DISEASE_EXPULSION));
uiDiseaseTimer = urand(1500,4000); uiDiseaseTimer = urand(1500,4000);
} else uiDiseaseTimer -= diff; } else uiDiseaseTimer -= diff;
@@ -100,7 +100,7 @@ struct TRINITY_DLL_DECL boss_meathookAI : public ScriptedAI
if (uiChainTimer <= diff) if (uiChainTimer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_CONSTRICTING_CHAINS, H_SPELL_CONSTRICTING_CHAINS)); //anyone but the tank DoCast(pTarget, DUNGEON_MODE(SPELL_CONSTRICTING_CHAINS, H_SPELL_CONSTRICTING_CHAINS)); //anyone but the tank
uiChainTimer = urand(2000,4000); uiChainTimer = urand(2000,4000);
} else uiChainTimer -= diff; } else uiChainTimer -= diff;
@@ -113,7 +113,7 @@ struct TRINITY_DLL_DECL boss_salrammAI : public ScriptedAI
if (Shadow_bolt_Timer <= diff) if (Shadow_bolt_Timer <= diff)
{ {
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT)); DoCast(pTarget, DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
Shadow_bolt_Timer = urand(8000,12000); Shadow_bolt_Timer = urand(8000,12000);
} else Shadow_bolt_Timer -= diff; } else Shadow_bolt_Timer -= diff;
@@ -46,11 +46,9 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
boss_aeonusAI(Creature *c) : ScriptedAI(c) boss_aeonusAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 SandBreath_Timer; uint32 SandBreath_Timer;
uint32 TimeStop_Timer; uint32 TimeStop_Timer;
@@ -108,7 +106,7 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
//Sand Breath //Sand Breath
if (SandBreath_Timer <= diff) if (SandBreath_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SAND_BREATH, H_SPELL_SAND_BREATH)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SAND_BREATH, H_SPELL_SAND_BREATH));
SandBreath_Timer = 15000+rand()%10000; SandBreath_Timer = 15000+rand()%10000;
} else SandBreath_Timer -= diff; } else SandBreath_Timer -= diff;
@@ -46,11 +46,9 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c) boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 ArcaneBlast_Timer; uint32 ArcaneBlast_Timer;
uint32 TimeLapse_Timer; uint32 TimeLapse_Timer;
@@ -107,7 +105,7 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
//Arcane Blast //Arcane Blast
if (ArcaneBlast_Timer <= diff) if (ArcaneBlast_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_ARCANE_BLAST, H_SPELL_ARCANE_BLAST)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_ARCANE_BLAST, H_SPELL_ARCANE_BLAST));
ArcaneBlast_Timer = 15000+rand()%10000; ArcaneBlast_Timer = 15000+rand()%10000;
} else ArcaneBlast_Timer -= diff; } else ArcaneBlast_Timer -= diff;
@@ -115,7 +113,7 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
if (ArcaneDischarge_Timer <= diff) if (ArcaneDischarge_Timer <= diff)
{ {
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
DoCast(pTarget, HEROIC(SPELL_ARCANE_DISCHARGE, H_SPELL_ARCANE_DISCHARGE)); DoCast(pTarget, DUNGEON_MODE(SPELL_ARCANE_DISCHARGE, H_SPELL_ARCANE_DISCHARGE));
ArcaneDischarge_Timer = 20000+rand()%10000; ArcaneDischarge_Timer = 20000+rand()%10000;
} else ArcaneDischarge_Timer -= diff; } else ArcaneDischarge_Timer -= diff;
@@ -127,7 +125,7 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
TimeLapse_Timer = 15000+rand()%10000; TimeLapse_Timer = 15000+rand()%10000;
} else TimeLapse_Timer -= diff; } else TimeLapse_Timer -= diff;
if (HeroicMode) if (IsHeroic())
{ {
if (Attraction_Timer <= diff) if (Attraction_Timer <= diff)
{ {
@@ -45,11 +45,9 @@ struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI
boss_temporusAI(Creature *c) : ScriptedAI(c) boss_temporusAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 Haste_Timer; uint32 Haste_Timer;
uint32 SpellReflection_Timer; uint32 SpellReflection_Timer;
@@ -121,11 +119,11 @@ struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI
//Wing ruffet //Wing ruffet
if (WingBuffet_Timer <= diff) if (WingBuffet_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_WING_BUFFET, H_SPELL_WING_BUFFET)); DoCast(m_creature, DUNGEON_MODE(SPELL_WING_BUFFET, H_SPELL_WING_BUFFET));
WingBuffet_Timer = 20000+rand()%10000; WingBuffet_Timer = 20000+rand()%10000;
} else WingBuffet_Timer -= diff; } else WingBuffet_Timer -= diff;
if (HeroicMode) if (IsHeroic())
{ {
if (SpellReflection_Timer <= diff) if (SpellReflection_Timer <= diff)
{ {
@@ -58,10 +58,8 @@ struct TRINITY_DLL_DECL boss_elder_nadoxAI : public ScriptedAI
boss_elder_nadoxAI(Creature *c) : ScriptedAI(c) boss_elder_nadoxAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 plague_Timer; uint32 plague_Timer;
uint32 rage_Timer; uint32 rage_Timer;
@@ -106,7 +104,7 @@ struct TRINITY_DLL_DECL boss_elder_nadoxAI : public ScriptedAI
{ {
DoScriptText(SAY_SLAY_3,m_creature); //SAY_SLAY_3 on death? DoScriptText(SAY_SLAY_3,m_creature); //SAY_SLAY_3 on death?
if (HeroicMode && !DeadAhnkaharGuardian) if (IsHeroic() && !DeadAhnkaharGuardian)
{ {
AchievementEntry const *AchievRespectYourElders = GetAchievementStore()->LookupEntry(ACHIEVEMENT_RESPECT_YOUR_ELDERS); AchievementEntry const *AchievRespectYourElders = GetAchievementStore()->LookupEntry(ACHIEVEMENT_RESPECT_YOUR_ELDERS);
if (AchievRespectYourElders) if (AchievRespectYourElders)
@@ -132,11 +130,11 @@ struct TRINITY_DLL_DECL boss_elder_nadoxAI : public ScriptedAI
if (plague_Timer <= diff) if (plague_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_BROOD_PLAGUE, H_SPELL_BROOD_PLAGUE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_BROOD_PLAGUE, H_SPELL_BROOD_PLAGUE));
plague_Timer = 15000; plague_Timer = 15000;
} else plague_Timer -= diff; } else plague_Timer -= diff;
if (HeroicMode) if (IsHeroic())
if (rage_Timer <= diff) if (rage_Timer <= diff)
{ {
Unit* Swarmer = m_creature->FindNearestCreature(MOB_AHNKAHAR_SWARMER, 35); Unit* Swarmer = m_creature->FindNearestCreature(MOB_AHNKAHAR_SWARMER, 35);
@@ -97,20 +97,20 @@ struct TRINITY_DLL_DECL boss_volazjAI : public ScriptedAI
if (uiMindFlayTimer <= diff) if (uiMindFlayTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY));
uiMindFlayTimer = 20000; uiMindFlayTimer = 20000;
} else uiMindFlayTimer -= diff; } else uiMindFlayTimer -= diff;
if (uiShadowBoltVolleyTimer <= diff) if (uiShadowBoltVolleyTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_BOLT_VOLLEY, H_SPELL_SHADOW_BOLT_VOLLEY)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_VOLLEY, H_SPELL_SHADOW_BOLT_VOLLEY));
uiShadowBoltVolleyTimer = 5000; uiShadowBoltVolleyTimer = 5000;
} else uiShadowBoltVolleyTimer -= diff; } else uiShadowBoltVolleyTimer -= diff;
if (uiShiverTimer <= diff) if (uiShiverTimer <= diff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_SHIVER, H_SPELL_SHIVER)); DoCast(pTarget, DUNGEON_MODE(SPELL_SHIVER, H_SPELL_SHIVER));
uiShiverTimer = 15000; uiShiverTimer = 15000;
} else uiShiverTimer -= diff; } else uiShiverTimer -= diff;
@@ -128,7 +128,7 @@ struct TRINITY_DLL_DECL boss_volazjAI : public ScriptedAI
AchievementEntry const *AchievQuickDemise = GetAchievementStore()->LookupEntry(ACHIEVEMENT_QUICK_DEMISE); AchievementEntry const *AchievQuickDemise = GetAchievementStore()->LookupEntry(ACHIEVEMENT_QUICK_DEMISE);
Map* pMap = m_creature->GetMap(); Map* pMap = m_creature->GetMap();
if (HeroicMode && uiEncounterTimer < 120000 && pMap && pMap->IsDungeon() && AchievQuickDemise) if (IsHeroic() && uiEncounterTimer < 120000 && pMap && pMap->IsDungeon() && AchievQuickDemise)
{ {
Map::PlayerList const &players = pMap->GetPlayers(); Map::PlayerList const &players = pMap->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
@@ -303,14 +303,14 @@ struct TRINITY_DLL_DECL boss_jedoga_shadowseekerAI : public ScriptedAI
if (uiCycloneTimer <= diff) if (uiCycloneTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false); DoCast(m_creature, DUNGEON_MODE(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false);
uiCycloneTimer = urand(15000,30000); uiCycloneTimer = urand(15000,30000);
} else uiCycloneTimer -= diff; } else uiCycloneTimer -= diff;
if (uiBoltTimer <= diff) if (uiBoltTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, HEROIC(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false);
uiBoltTimer = urand(15000,30000); uiBoltTimer = urand(15000,30000);
} else uiBoltTimer -= diff; } else uiBoltTimer -= diff;
@@ -318,7 +318,7 @@ struct TRINITY_DLL_DECL boss_jedoga_shadowseekerAI : public ScriptedAI
if (uiThunderTimer <= diff) if (uiThunderTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, HEROIC(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false);
uiThunderTimer = urand(15000,30000); uiThunderTimer = urand(15000,30000);
} else uiThunderTimer -= diff; } else uiThunderTimer -= diff;
@@ -148,7 +148,7 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
y = pSpheres[0]->GetPositionY() + DATA_SPHERE_DISTANCE * sin(angle); y = pSpheres[0]->GetPositionY() + DATA_SPHERE_DISTANCE * sin(angle);
pSpheres[0]->GetMotionMaster()->MovePoint(0, x, y, pSpheres[0]->GetPositionZ()); pSpheres[0]->GetMotionMaster()->MovePoint(0, x, y, pSpheres[0]->GetPositionZ());
} }
if (HeroicMode) if (IsHeroic())
{ {
//DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_1); //DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_1);
pSpheres[1] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_1, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); pSpheres[1] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_1, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
@@ -183,7 +183,7 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
break; break;
case VANISHED: case VANISHED:
if(pEmbraceTarget) if(pEmbraceTarget)
DoCast(pEmbraceTarget, HEROIC(SPELL_EMBRACE_OF_THE_VAMPYR, H_SPELL_EMBRACE_OF_THE_VAMPYR)); DoCast(pEmbraceTarget, DUNGEON_MODE(SPELL_EMBRACE_OF_THE_VAMPYR, H_SPELL_EMBRACE_OF_THE_VAMPYR));
m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->Clear();
m_creature->SetSpeed(MOVE_WALK, 1.0f, true); m_creature->SetSpeed(MOVE_WALK, 1.0f, true);
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
@@ -247,7 +247,7 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
if (Phase == FEEDING && pEmbraceTarget && pEmbraceTarget->isAlive()) if (Phase == FEEDING && pEmbraceTarget && pEmbraceTarget->isAlive())
{ {
uiEmbraceTakenDamage += damage; uiEmbraceTakenDamage += damage;
if (uiEmbraceTakenDamage > (HeroicMode ? H_DATA_EMBRACE_DMG : DATA_EMBRACE_DMG)) if (uiEmbraceTakenDamage > DUNGEON_MODE(DATA_EMBRACE_DMG, H_DATA_EMBRACE_DMG))
{ {
Phase = NORMAL; Phase = NORMAL;
uiPhaseTimer = 0; uiPhaseTimer = 0;
@@ -268,7 +268,7 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
//The Party's Over achievement: //The Party's Over achievement:
AchievementEntry const *AchievThePartyIsOver = GetAchievementStore()->LookupEntry(ACHIEVEMENT_THE_PARTY_IS_OVER); AchievementEntry const *AchievThePartyIsOver = GetAchievementStore()->LookupEntry(ACHIEVEMENT_THE_PARTY_IS_OVER);
Map* pMap = m_creature->GetMap(); Map* pMap = m_creature->GetMap();
if (pMap && pMap->IsDungeon() && HeroicMode && AchievThePartyIsOver) if (pMap && pMap->IsDungeon() && IsHeroic() && AchievThePartyIsOver)
{ {
Map::PlayerList const &players = pMap->GetPlayers(); Map::PlayerList const &players = pMap->GetPlayers();
if (players.getSize() < 5) if (players.getSize() < 5)
@@ -343,7 +343,7 @@ struct TRINITY_DLL_DECL mob_taldaram_flamesphereAI : public ScriptedAI
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.0f); m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.0f);
DoCast(m_creature, SPELL_FLAME_SPHERE_VISUAL); DoCast(m_creature, SPELL_FLAME_SPHERE_VISUAL);
DoCast(m_creature, SPELL_FLAME_SPHERE_SPAWN_EFFECT); DoCast(m_creature, SPELL_FLAME_SPHERE_SPAWN_EFFECT);
DoCast(m_creature, HEROIC(SPELL_FLAME_SPHERE_PERIODIC, H_SPELL_FLAME_SPHERE_PERIODIC)); DoCast(m_creature, DUNGEON_MODE(SPELL_FLAME_SPHERE_PERIODIC, H_SPELL_FLAME_SPHERE_PERIODIC));
uiDespawnTimer = 10000; uiDespawnTimer = 10000;
} }
@@ -145,7 +145,7 @@ struct TRINITY_DLL_DECL boss_anub_arakAI : public ScriptedAI
if (SPELL_IMPALE_Timer <= diff) if (SPELL_IMPALE_Timer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, HEROIC(SPELL_IMPALE,H_SPELL_IMPALE), true); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_IMPALE,H_SPELL_IMPALE), true);
SPELL_IMPALE_Timer = 9000; SPELL_IMPALE_Timer = 9000;
} else SPELL_IMPALE_Timer -= diff; } else SPELL_IMPALE_Timer -= diff;
@@ -226,7 +226,7 @@ struct TRINITY_DLL_DECL boss_anub_arakAI : public ScriptedAI
if (SPELL_POUND_Timer <= diff) if (SPELL_POUND_Timer <= diff)
{ {
DoCastVictim(HEROIC(SPELL_POUND, H_SPELL_POUND)); DoCastVictim(DUNGEON_MODE(SPELL_POUND, H_SPELL_POUND));
SPELL_POUND_Timer = 16500; SPELL_POUND_Timer = 16500;
} else SPELL_POUND_Timer -= diff; } else SPELL_POUND_Timer -= diff;
} }
@@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_hadronoxAI : public ScriptedAI
void KilledUnit(Unit* Victim) void KilledUnit(Unit* Victim)
{ {
// not sure if this aura check is correct, I think it is though // not sure if this aura check is correct, I think it is though
if (!Victim || !Victim->HasAura(HEROIC(SPELL_LEECH_POISON, SPELL_LEECH_POISON_H)) || !m_creature->isAlive()) if (!Victim || !Victim->HasAura(DUNGEON_MODE(SPELL_LEECH_POISON, SPELL_LEECH_POISON_H)) || !m_creature->isAlive())
return; return;
uint32 health = (m_creature->GetMaxHealth()/100)*10; uint32 health = (m_creature->GetMaxHealth()/100)*10;
@@ -165,7 +165,7 @@ struct TRINITY_DLL_DECL boss_hadronoxAI : public ScriptedAI
if (acidtimer <= diff) if (acidtimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_ACID_CLOUD, SPELL_ACID_CLOUD_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_ACID_CLOUD, SPELL_ACID_CLOUD_H));
acidtimer = urand(20000,30000); acidtimer = urand(20000,30000);
} else acidtimer -= diff; } else acidtimer -= diff;
@@ -173,7 +173,7 @@ struct TRINITY_DLL_DECL boss_hadronoxAI : public ScriptedAI
if (leechtimer <= diff) if (leechtimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_LEECH_POISON, SPELL_LEECH_POISON_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_LEECH_POISON, SPELL_LEECH_POISON_H));
leechtimer = urand(11000,14000); leechtimer = urand(11000,14000);
} else leechtimer -= diff; } else leechtimer -= diff;
@@ -181,7 +181,7 @@ struct TRINITY_DLL_DECL boss_hadronoxAI : public ScriptedAI
if (grabtimer <= diff) if (grabtimer <= diff)
{ {
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) // Draws all players (and attacking Mobs) to itself. if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) // Draws all players (and attacking Mobs) to itself.
DoCast(pTarget, HEROIC(SPELL_WEB_GRAB, SPELL_WEB_GRAB_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_WEB_GRAB, SPELL_WEB_GRAB_H));
grabtimer = urand(15000,30000); grabtimer = urand(15000,30000);
} else grabtimer -= diff; } else grabtimer -= diff;
@@ -100,11 +100,9 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
boss_krik_thirAI(Creature *c) : ScriptedAI(c) boss_krik_thirAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 MindFlayTimer; uint32 MindFlayTimer;
uint32 CurseFatigueTimer; uint32 CurseFatigueTimer;
@@ -162,7 +160,7 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
if (MindFlayTimer <= diff) if (MindFlayTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY));
MindFlayTimer = 15000; MindFlayTimer = 15000;
} else MindFlayTimer -= diff; } else MindFlayTimer -= diff;
@@ -172,8 +170,8 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
Unit *pTarget_1 = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); Unit *pTarget_1 = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
DoCast(pTarget, HEROIC(SPELL_CURSE_OF_FATIGUE, H_SPELL_CURSE_OF_FATIGUE)); DoCast(pTarget, DUNGEON_MODE(SPELL_CURSE_OF_FATIGUE, H_SPELL_CURSE_OF_FATIGUE));
DoCast(pTarget_1, HEROIC(SPELL_CURSE_OF_FATIGUE, H_SPELL_CURSE_OF_FATIGUE)); DoCast(pTarget_1, DUNGEON_MODE(SPELL_CURSE_OF_FATIGUE, H_SPELL_CURSE_OF_FATIGUE));
CurseFatigueTimer = 10000; CurseFatigueTimer = 10000;
} else CurseFatigueTimer -= diff; } else CurseFatigueTimer -= diff;
@@ -197,7 +195,7 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
if ((pAdd1 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_GASHRA))) && pAdd1->isAlive() && if ((pAdd1 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_GASHRA))) && pAdd1->isAlive() &&
(pAdd2 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_SILTHIK))) && pAdd2->isAlive() && (pAdd2 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_SILTHIK))) && pAdd2->isAlive() &&
(pAdd3 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_NARJIL))) && pAdd3->isAlive() && (pAdd3 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_NARJIL))) && pAdd3->isAlive() &&
HeroicMode && pMap && pMap->IsDungeon() && AchievWatchHimDie) IsHeroic() && pMap && pMap->IsDungeon() && AchievWatchHimDie)
{ {
Map::PlayerList const &players = pMap->GetPlayers(); Map::PlayerList const &players = pMap->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
@@ -227,7 +225,7 @@ struct TRINITY_DLL_DECL npc_skittering_infectorAI : public ScriptedAI
void JustDied(Unit* killer) void JustDied(Unit* killer)
{ {
//The spell is not working propperly //The spell is not working propperly
DoCast(m_creature->getVictim(),HEROIC(SPELL_ACID_SPLASH, H_SPELL_ACID_SPLASH), true); DoCast(m_creature->getVictim(),DUNGEON_MODE(SPELL_ACID_SPLASH, H_SPELL_ACID_SPLASH), true);
} }
}; };
@@ -294,13 +292,13 @@ struct TRINITY_DLL_DECL npc_anub_ar_shadowcasterAI : public ScriptedAI
if (ShadowBoltTimer <= diff) if (ShadowBoltTimer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT), true); DoCast(pTarget, DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT), true);
ShadowBoltTimer = 15000; ShadowBoltTimer = 15000;
} else ShadowBoltTimer -= diff; } else ShadowBoltTimer -= diff;
if (ShadowNovaTimer <= diff) if (ShadowNovaTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_NOVA, H_SPELL_SHADOW_NOVA), true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_NOVA, H_SPELL_SHADOW_NOVA), true);
ShadowNovaTimer = 17000; ShadowNovaTimer = 17000;
} else ShadowNovaTimer -= diff; } else ShadowNovaTimer -= diff;
@@ -376,7 +374,7 @@ struct TRINITY_DLL_DECL npc_watcher_gashraAI : public ScriptedAI
if (InfectedBiteTimer <= diff) if (InfectedBiteTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true);
InfectedBiteTimer = 15000; InfectedBiteTimer = 15000;
} else InfectedBiteTimer -= diff; } else InfectedBiteTimer -= diff;
@@ -413,13 +411,13 @@ struct TRINITY_DLL_DECL npc_watcher_narjilAI : public ScriptedAI
if (InfectedBiteTimer <= diff) if (InfectedBiteTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true);
InfectedBiteTimer = 11000; InfectedBiteTimer = 11000;
} else InfectedBiteTimer -= diff; } else InfectedBiteTimer -= diff;
if (BlindingWebsTimer <= diff) if (BlindingWebsTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_BLINDING_WEBS, H_SPELL_BLINDING_WEBS), true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_BLINDING_WEBS, H_SPELL_BLINDING_WEBS), true);
BlindingWebsTimer = 17000; BlindingWebsTimer = 17000;
} else BlindingWebsTimer -= diff; } else BlindingWebsTimer -= diff;
@@ -457,13 +455,13 @@ struct TRINITY_DLL_DECL npc_watcher_silthikAI : public ScriptedAI
if (InfectedBiteTimer <= diff) if (InfectedBiteTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true);
InfectedBiteTimer = 15000; InfectedBiteTimer = 15000;
} else InfectedBiteTimer -= diff; } else InfectedBiteTimer -= diff;
if (PosionSprayTimer <= diff) if (PosionSprayTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_POSION_SPRAY, H_SPELL_POSION_SPRAY), true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_POSION_SPRAY, H_SPELL_POSION_SPRAY), true);
PosionSprayTimer = 17000; PosionSprayTimer = 17000;
} else PosionSprayTimer -= diff; } else PosionSprayTimer -= diff;
@@ -164,7 +164,7 @@ struct TRINITY_DLL_DECL boss_paletressAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true))
{ {
if (pTarget && pTarget->isAlive()) if (pTarget && pTarget->isAlive())
DoCast(pTarget,HEROIC(SPELL_HOLY_FIRE,SPELL_HOLY_FIRE_H)); DoCast(pTarget,DUNGEON_MODE(SPELL_HOLY_FIRE,SPELL_HOLY_FIRE_H));
} }
if (m_creature->HasAura(SPELL_SHIELD)) if (m_creature->HasAura(SPELL_SHIELD))
uiHolyFireTimer = 13000; uiHolyFireTimer = 13000;
@@ -177,7 +177,7 @@ struct TRINITY_DLL_DECL boss_paletressAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true))
{ {
if (pTarget && pTarget->isAlive()) if (pTarget && pTarget->isAlive())
DoCast(pTarget,HEROIC(SPELL_SMITE,SPELL_SMITE_H)); DoCast(pTarget,DUNGEON_MODE(SPELL_SMITE,SPELL_SMITE_H));
} }
if (m_creature->HasAura(SPELL_SHIELD)) if (m_creature->HasAura(SPELL_SHIELD))
uiHolySmiteTimer = 9000; uiHolySmiteTimer = 9000;
@@ -193,11 +193,11 @@ struct TRINITY_DLL_DECL boss_paletressAI : public ScriptedAI
switch(uiTarget) switch(uiTarget)
{ {
case 0: case 0:
DoCast(m_creature,HEROIC(SPELL_RENEW,SPELL_RENEW_H)); DoCast(m_creature,DUNGEON_MODE(SPELL_RENEW,SPELL_RENEW_H));
break; break;
case 1: case 1:
if (pMemory && pMemory->isAlive()) if (pMemory && pMemory->isAlive())
DoCast(pMemory,HEROIC(SPELL_RENEW,SPELL_RENEW_H)); DoCast(pMemory,DUNGEON_MODE(SPELL_RENEW,SPELL_RENEW_H));
break; break;
} }
uiRenewTimer = urand(15000,17000); uiRenewTimer = urand(15000,17000);
@@ -255,14 +255,14 @@ struct TRINITY_DLL_DECL npc_memoryAI : public ScriptedAI
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
{ {
if (pTarget && pTarget->isAlive()) if (pTarget && pTarget->isAlive())
DoCast(pTarget, HEROIC(SPELL_OLD_WOUNDS,SPELL_OLD_WOUNDS_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_OLD_WOUNDS,SPELL_OLD_WOUNDS_H));
} }
uiOldWoundsTimer = 12000; uiOldWoundsTimer = 12000;
}else uiOldWoundsTimer -= uiDiff; }else uiOldWoundsTimer -= uiDiff;
if (uiWakingNightmare <= uiDiff) if (uiWakingNightmare <= uiDiff)
{ {
DoCast(m_creature, HEROIC(SPELL_WAKING_NIGHTMARE,SPELL_WAKING_NIGHTMARE_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_WAKING_NIGHTMARE,SPELL_WAKING_NIGHTMARE_H));
uiWakingNightmare = 7000; uiWakingNightmare = 7000;
}else uiWakingNightmare -= uiDiff; }else uiWakingNightmare -= uiDiff;
@@ -271,7 +271,7 @@ struct TRINITY_DLL_DECL npc_memoryAI : public ScriptedAI
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1))
{ {
if (pTarget && pTarget->isAlive()) if (pTarget && pTarget->isAlive())
DoCast(pTarget,HEROIC(SPELL_SHADOWS_PAST,SPELL_SHADOWS_PAST_H)); DoCast(pTarget,DUNGEON_MODE(SPELL_SHADOWS_PAST,SPELL_SHADOWS_PAST_H));
} }
uiShadowPastTimer = 5000; uiShadowPastTimer = 5000;
}else uiShadowPastTimer -= uiDiff; }else uiShadowPastTimer -= uiDiff;
@@ -169,17 +169,17 @@ struct TRINITY_DLL_DECL boss_black_knightAI : public ScriptedAI
{ {
if (uiIcyTouchTimer <= uiDiff) if (uiIcyTouchTimer <= uiDiff)
{ {
DoCastVictim(HEROIC(SPELL_ICY_TOUCH,SPELL_ICY_TOUCH_H)); DoCastVictim(DUNGEON_MODE(SPELL_ICY_TOUCH,SPELL_ICY_TOUCH_H));
uiIcyTouchTimer = urand(5000,7000); uiIcyTouchTimer = urand(5000,7000);
} else uiIcyTouchTimer -= uiDiff; } else uiIcyTouchTimer -= uiDiff;
if (uiPlagueStrikeTimer <= uiDiff) if (uiPlagueStrikeTimer <= uiDiff)
{ {
DoCastVictim(HEROIC(SPELL_ICY_TOUCH,SPELL_ICY_TOUCH_H)); DoCastVictim(DUNGEON_MODE(SPELL_ICY_TOUCH,SPELL_ICY_TOUCH_H));
uiPlagueStrikeTimer = urand(12000,15000); uiPlagueStrikeTimer = urand(12000,15000);
} else uiPlagueStrikeTimer -= uiDiff; } else uiPlagueStrikeTimer -= uiDiff;
if (uiObliterateTimer <= uiDiff) if (uiObliterateTimer <= uiDiff)
{ {
DoCastVictim(HEROIC(SPELL_OBLITERATE,SPELL_OBLITERATE_H)); DoCastVictim(DUNGEON_MODE(SPELL_OBLITERATE,SPELL_OBLITERATE_H));
uiObliterateTimer = urand(17000,19000); uiObliterateTimer = urand(17000,19000);
} else uiObliterateTimer -= uiDiff; } else uiObliterateTimer -= uiDiff;
switch(uiPhase) switch(uiPhase)
@@ -236,7 +236,7 @@ struct TRINITY_DLL_DECL boss_black_knightAI : public ScriptedAI
{ {
if (uiDeathBiteTimer <= uiDiff) if (uiDeathBiteTimer <= uiDiff)
{ {
DoCastAOE(HEROIC(SPELL_DEATH_BITE_H,SPELL_DEATH_BITE)); DoCastAOE(DUNGEON_MODE(SPELL_DEATH_BITE,SPELL_DEATH_BITE_H));
uiDeathBiteTimer = urand (2000, 4000); uiDeathBiteTimer = urand (2000, 4000);
} else uiDeathBiteTimer -= uiDiff; } else uiDeathBiteTimer -= uiDiff;
if (uiMarkedDeathTimer <= uiDiff) if (uiMarkedDeathTimer <= uiDiff)
@@ -304,7 +304,7 @@ struct TRINITY_DLL_DECL npc_risen_ghoulAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
{ {
if (pTarget && pTarget->isAlive()) if (pTarget && pTarget->isAlive())
DoCast(pTarget, (HEROIC(SPELL_LEAP_H,SPELL_LEAP))); DoCast(pTarget, (DUNGEON_MODE(SPELL_LEAP,SPELL_LEAP_H)));
} }
uiAttackTimer = 3500; uiAttackTimer = 3500;
} else uiAttackTimer -= uiDiff; } else uiAttackTimer -= uiDiff;
@@ -71,7 +71,6 @@ struct TRINITY_DLL_DECL mob_toc5_warriorAI : public ScriptedAI
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsRegularMode;
uint32 Mortal_Strike_Timer; uint32 Mortal_Strike_Timer;
uint32 Bladestorm_Timer; uint32 Bladestorm_Timer;
@@ -122,7 +121,7 @@ struct TRINITY_DLL_DECL mob_toc5_warriorAI : public ScriptedAI
if (Mortal_Strike_Timer < diff) if (Mortal_Strike_Timer < diff)
{ {
DoCast(m_creature->getVictim(), m_bIsRegularMode ? SPELL_MORTAL_STRIKE : SPELL_MORTAL_STRIKE_H); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MORTAL_STRIKE, SPELL_MORTAL_STRIKE_H));
Mortal_Strike_Timer = 6000; Mortal_Strike_Timer = 6000;
}else Mortal_Strike_Timer -= diff; }else Mortal_Strike_Timer -= diff;
@@ -172,7 +171,6 @@ struct TRINITY_DLL_DECL mob_toc5_mageAI : public ScriptedAI
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsRegularMode;
uint32 Fireball_Timer; uint32 Fireball_Timer;
uint32 Blast_Wave_Timer; uint32 Blast_Wave_Timer;
@@ -221,13 +219,13 @@ struct TRINITY_DLL_DECL mob_toc5_mageAI : public ScriptedAI
if (Fireball_Timer < diff) if (Fireball_Timer < diff)
{ {
DoCast(m_creature->getVictim(), m_bIsRegularMode ? SPELL_FIREBALL : SPELL_FIREBALL_H); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_FIREBALL, SPELL_FIREBALL_H));
Fireball_Timer = 3000; Fireball_Timer = 3000;
}else Fireball_Timer -= diff; }else Fireball_Timer -= diff;
if (Blast_Wave_Timer < diff) if (Blast_Wave_Timer < diff)
{ {
DoCast(m_creature, m_bIsRegularMode ? SPELL_BLAST_WAVE : SPELL_BLAST_WAVE_H); DoCast(m_creature, DUNGEON_MODE(SPELL_BLAST_WAVE, SPELL_BLAST_WAVE_H));
Blast_Wave_Timer = 20000; Blast_Wave_Timer = 20000;
}else Blast_Wave_Timer -= diff; }else Blast_Wave_Timer -= diff;
@@ -240,7 +238,7 @@ struct TRINITY_DLL_DECL mob_toc5_mageAI : public ScriptedAI
if (Polymorph_Timer < diff) if (Polymorph_Timer < diff)
{ {
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
DoCast(target, m_bIsRegularMode ? SPELL_POLYMORPH : SPELL_POLYMORPH_H); DoCast(target, DUNGEON_MODE(SPELL_POLYMORPH, SPELL_POLYMORPH_H));
Polymorph_Timer = 15000; Polymorph_Timer = 15000;
}else Polymorph_Timer -= diff; }else Polymorph_Timer -= diff;
@@ -263,7 +261,6 @@ struct TRINITY_DLL_DECL mob_toc5_shamanAI : public ScriptedAI
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsRegularMode;
uint32 Chain_Lightning_Timer; uint32 Chain_Lightning_Timer;
uint32 Earth_Shield_Timer; uint32 Earth_Shield_Timer;
@@ -316,7 +313,7 @@ struct TRINITY_DLL_DECL mob_toc5_shamanAI : public ScriptedAI
if (Chain_Lightning_Timer < diff) if (Chain_Lightning_Timer < diff)
{ {
DoCast(m_creature->getVictim(), m_bIsRegularMode ? SPELL_CHAIN_LIGHTNING : SPELL_CHAIN_LIGHTNING_H); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_CHAIN_LIGHTNING, SPELL_CHAIN_LIGHTNING_H));
Chain_Lightning_Timer = 10000; Chain_Lightning_Timer = 10000;
}else Chain_Lightning_Timer -= diff; }else Chain_Lightning_Timer -= diff;
@@ -331,7 +328,7 @@ struct TRINITY_DLL_DECL mob_toc5_shamanAI : public ScriptedAI
if(Unit* target = m_creature->SelectNearestTarget(40)) if(Unit* target = m_creature->SelectNearestTarget(40))
if(target->GetHealth() == target->GetHealth() * 100 / target->GetMaxHealth() && target->IsFriendlyTo(m_creature)) if(target->GetHealth() == target->GetHealth() * 100 / target->GetMaxHealth() && target->IsFriendlyTo(m_creature))
{ {
DoCast(target, HEROIC(SPELL_HEALING_WAVE, SPELL_HEALING_WAVE_H)); DoCast(target, DUNGEON_MODE(SPELL_HEALING_WAVE, SPELL_HEALING_WAVE_H));
Healing_Wave_Timer = 8000; Healing_Wave_Timer = 8000;
} }
}else Healing_Wave_Timer -= diff; }else Healing_Wave_Timer -= diff;
@@ -365,9 +362,8 @@ struct TRINITY_DLL_DECL mob_toc5_hunterAI : public ScriptedAI
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsRegularMode;
uint32 Shoot_Timer; uint32 Shoot_Timer;
uint32 Lightning_Arrows_Timer; uint32 Lightning_Arrows_Timer;
uint32 Multi_Shot_Timer; uint32 Multi_Shot_Timer;
uint32 Disengage_Cooldown; uint32 Disengage_Cooldown;
@@ -481,7 +477,6 @@ struct TRINITY_DLL_DECL mob_toc5_rogueAI : public ScriptedAI
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsRegularMode;
uint32 Eviscerate_Timer; uint32 Eviscerate_Timer;
uint32 FoK_Timer; uint32 FoK_Timer;
@@ -528,7 +523,7 @@ struct TRINITY_DLL_DECL mob_toc5_rogueAI : public ScriptedAI
if (Eviscerate_Timer < diff) if (Eviscerate_Timer < diff)
{ {
DoCast(m_creature->getVictim(), m_bIsRegularMode ? SPELL_EVISCERATE : SPELL_EVISCERATE_H); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_EVISCERATE, SPELL_EVISCERATE_H));
Eviscerate_Timer = 10000; Eviscerate_Timer = 10000;
}else Eviscerate_Timer -= diff; }else Eviscerate_Timer -= diff;
@@ -115,7 +115,7 @@ struct TRINITY_DLL_DECL boss_dredAI : public ScriptedAI
if (FearsomeRoarTimer < diff) if (FearsomeRoarTimer < diff)
{ {
DoCastAOE(HEROIC(SPELL_FEARSOME_ROAR, H_SPELL_FEARSOME_ROAR),false); DoCastAOE(DUNGEON_MODE(SPELL_FEARSOME_ROAR, H_SPELL_FEARSOME_ROAR),false);
FearsomeRoarTimer = urand(16,18)*1000; FearsomeRoarTimer = urand(16,18)*1000;
} else FearsomeRoarTimer -=diff; } else FearsomeRoarTimer -=diff;
@@ -146,7 +146,7 @@ struct TRINITY_DLL_DECL boss_dredAI : public ScriptedAI
{ {
pInstance->SetData(DATA_DRED_EVENT,DONE); pInstance->SetData(DATA_DRED_EVENT,DONE);
if (HeroicMode && pInstance->GetData(DATA_KING_DRED_ACHIEV) == 6) if (IsHeroic() && pInstance->GetData(DATA_KING_DRED_ACHIEV) == 6)
pInstance->DoCompleteAchievement(ACHIEV_BETTER_OFF_DRED); pInstance->DoCompleteAchievement(ACHIEV_BETTER_OFF_DRED);
} }
} }
@@ -192,7 +192,7 @@ struct TRINITY_DLL_DECL npc_drakkari_gutripperAI : public ScriptedAI
{ {
if (pInstance) if (pInstance)
{ {
if (m_creature->GetMap()->IsHeroic() && pInstance->GetData(DATA_DRED_EVENT) == IN_PROGRESS && pInstance->GetData(DATA_KING_DRED_ACHIEV) < 6) if (IsHeroic() && pInstance->GetData(DATA_DRED_EVENT) == IN_PROGRESS && pInstance->GetData(DATA_KING_DRED_ACHIEV) < 6)
{ {
pInstance->SetData(DATA_KING_DRED_ACHIEV, pInstance->GetData(DATA_KING_DRED_ACHIEV) + 1); pInstance->SetData(DATA_KING_DRED_ACHIEV, pInstance->GetData(DATA_KING_DRED_ACHIEV) + 1);
} }
@@ -240,7 +240,7 @@ struct TRINITY_DLL_DECL npc_drakkari_scytheclawAI : public ScriptedAI
{ {
if (pInstance) if (pInstance)
{ {
if (m_creature->GetMap()->IsHeroic() && pInstance->GetData(DATA_DRED_EVENT) == IN_PROGRESS && pInstance->GetData(DATA_KING_DRED_ACHIEV) < 6) if (IsHeroic() && pInstance->GetData(DATA_DRED_EVENT) == IN_PROGRESS && pInstance->GetData(DATA_KING_DRED_ACHIEV) < 6)
{ {
pInstance->SetData(DATA_KING_DRED_ACHIEV, pInstance->GetData(DATA_KING_DRED_ACHIEV) + 1); pInstance->SetData(DATA_KING_DRED_ACHIEV, pInstance->GetData(DATA_KING_DRED_ACHIEV) + 1);
} }
@@ -169,8 +169,8 @@ struct TRINITY_DLL_DECL boss_novosAI : public Scripted_NoMovementAI
if (uiTimer <= diff) if (uiTimer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(RAND(SPELL_ARCANE_BLAST,SPELL_BLIZZARD,SPELL_FROSTBOLT,SPELL_WRATH_OF_MISERY), DoCast(pTarget, DUNGEON_MODE(RAND(SPELL_ARCANE_BLAST,SPELL_BLIZZARD,SPELL_FROSTBOLT,SPELL_WRATH_OF_MISERY),
RAND(H_SPELL_ARCANE_BLAST,H_SPELL_BLIZZARD,H_SPELL_FROSTBOLT,H_SPELL_WRATH_OF_MISERY))); RAND(H_SPELL_ARCANE_BLAST,H_SPELL_BLIZZARD,H_SPELL_FROSTBOLT,H_SPELL_WRATH_OF_MISERY)));
uiTimer = urand(1000,3000); uiTimer = urand(1000,3000);
} else uiTimer -= diff; } else uiTimer -= diff;
break; break;
@@ -182,7 +182,7 @@ struct TRINITY_DLL_DECL boss_novosAI : public Scripted_NoMovementAI
{ {
pInstance->SetData(DATA_NOVOS_EVENT, DONE); pInstance->SetData(DATA_NOVOS_EVENT, DONE);
if (HeroicMode && bAchiev) if (IsHeroic() && bAchiev)
pInstance->DoCompleteAchievement(ACHIEV_OH_NOVOS); pInstance->DoCompleteAchievement(ACHIEV_OH_NOVOS);
} }
lSummons.DespawnAll(); lSummons.DespawnAll();
@@ -136,19 +136,19 @@ struct TRINITY_DLL_DECL boss_tharon_jaAI : public ScriptedAI
if (uiCurseOfLifeTimer < diff) if (uiCurseOfLifeTimer < diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_CURSE_OF_LIFE, H_SPELL_CURSE_OF_LIFE)); DoCast(pTarget, DUNGEON_MODE(SPELL_CURSE_OF_LIFE, H_SPELL_CURSE_OF_LIFE));
uiCurseOfLifeTimer = urand(10000,15000); uiCurseOfLifeTimer = urand(10000,15000);
} else uiCurseOfLifeTimer -= diff; } else uiCurseOfLifeTimer -= diff;
if (uiShadowVolleyTimer < diff) if (uiShadowVolleyTimer < diff)
{ {
DoCastVictim(HEROIC(SPELL_SHADOW_VOLLEY,H_SPELL_SHADOW_VOLLEY)); DoCastVictim(DUNGEON_MODE(SPELL_SHADOW_VOLLEY,H_SPELL_SHADOW_VOLLEY));
uiShadowVolleyTimer = urand(8000,10000); uiShadowVolleyTimer = urand(8000,10000);
} else uiShadowVolleyTimer -= diff; } else uiShadowVolleyTimer -= diff;
if (uiRainOfFireTimer < diff) if (uiRainOfFireTimer < diff)
{ {
DoCastAOE(HEROIC(SPELL_RAIN_OF_FIRE,H_SPELL_RAIN_OF_FIRE)); DoCastAOE(DUNGEON_MODE(SPELL_RAIN_OF_FIRE,H_SPELL_RAIN_OF_FIRE));
uiRainOfFireTimer = urand(14000,18000); uiRainOfFireTimer = urand(14000,18000);
} else uiRainOfFireTimer -= diff; } else uiRainOfFireTimer -= diff;
@@ -187,20 +187,20 @@ struct TRINITY_DLL_DECL boss_tharon_jaAI : public ScriptedAI
if (uiLightningBreathTimer < diff) if (uiLightningBreathTimer < diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_LIGHTNING_BREATH, H_SPELL_LIGHTNING_BREATH)); DoCast(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BREATH, H_SPELL_LIGHTNING_BREATH));
uiLightningBreathTimer = urand(6000,7000); uiLightningBreathTimer = urand(6000,7000);
} else uiLightningBreathTimer -= diff; } else uiLightningBreathTimer -= diff;
if (uiEyeBeamTimer < diff) if (uiEyeBeamTimer < diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_EYE_BEAM, H_SPELL_EYE_BEAM)); DoCast(pTarget, DUNGEON_MODE(SPELL_EYE_BEAM, H_SPELL_EYE_BEAM));
uiEyeBeamTimer = urand(4000,6000); uiEyeBeamTimer = urand(4000,6000);
} else uiEyeBeamTimer -= diff; } else uiEyeBeamTimer -= diff;
if (uiPoisonCloudTimer < diff) if (uiPoisonCloudTimer < diff)
{ {
DoCastAOE(HEROIC(SPELL_POISON_CLOUD,H_SPELL_POISON_CLOUD)); DoCastAOE(DUNGEON_MODE(SPELL_POISON_CLOUD, H_SPELL_POISON_CLOUD));
uiPoisonCloudTimer = urand(10000,12000); uiPoisonCloudTimer = urand(10000,12000);
} else uiPoisonCloudTimer -= diff; } else uiPoisonCloudTimer -= diff;
@@ -90,12 +90,12 @@ struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
uiExplodeCorpseTimer = 3000; uiExplodeCorpseTimer = 3000;
uiSpawnTimer = urand(30000,40000); uiSpawnTimer = urand(30000,40000);
bAchiev = HeroicMode; bAchiev = IsHeroic();
lSummons.DespawnAll(); lSummons.DespawnAll();
if (m_creature->HasAura(HEROIC(SPELL_CONSUME,H_SPELL_CONSUME))) if (m_creature->HasAura(DUNGEON_MODE(SPELL_CONSUME,H_SPELL_CONSUME)))
m_creature->RemoveAura(HEROIC(SPELL_CONSUME,H_SPELL_CONSUME)); m_creature->RemoveAura(DUNGEON_MODE(SPELL_CONSUME,H_SPELL_CONSUME));
if (pInstance) if (pInstance)
pInstance->SetData(DATA_TROLLGORE_EVENT, NOT_STARTED); pInstance->SetData(DATA_TROLLGORE_EVENT, NOT_STARTED);
@@ -117,7 +117,8 @@ struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
if (uiSpawnTimer <= diff) if (uiSpawnTimer <= diff)
{ {
for (uint8 i = 0; i < urand(2,HEROIC(3,5)); ++i) uint32 spawnNumber = urand(2,DUNGEON_MODE(3,5));
for (uint8 i = 0; i < spawnNumber; ++i)
DoSpawnCreature(RAND(NPC_DRAKKARI_INVADER_1,NPC_DRAKKARI_INVADER_2), AddSpawnPoint.GetPositionX(), AddSpawnPoint.GetPositionY(), AddSpawnPoint.GetPositionZ(), AddSpawnPoint.GetOrientation(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 90000); DoSpawnCreature(RAND(NPC_DRAKKARI_INVADER_1,NPC_DRAKKARI_INVADER_2), AddSpawnPoint.GetPositionX(), AddSpawnPoint.GetPositionY(), AddSpawnPoint.GetPositionZ(), AddSpawnPoint.GetOrientation(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 90000);
uiSpawnTimer = urand(30000,40000); uiSpawnTimer = urand(30000,40000);
} else uiSpawnTimer -= diff; } else uiSpawnTimer -= diff;
@@ -125,7 +126,7 @@ struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
if (uiConsumeTimer <= diff) if (uiConsumeTimer <= diff)
{ {
DoScriptText(SAY_CONSUME, m_creature); DoScriptText(SAY_CONSUME, m_creature);
DoCast(HEROIC(SPELL_CONSUME, H_SPELL_CONSUME)); DoCast(DUNGEON_MODE(SPELL_CONSUME, H_SPELL_CONSUME));
uiConsumeTimer = 15000; uiConsumeTimer = 15000;
} else uiConsumeTimer -= diff; } else uiConsumeTimer -= diff;
@@ -133,7 +134,7 @@ struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
{ {
if (uiAuraCountTimer <= diff) if (uiAuraCountTimer <= diff)
{ {
if (Aura *pConsumeAura = m_creature->GetAura(HEROIC(SPELL_CONSUME,H_SPELL_CONSUME))) if (Aura *pConsumeAura = m_creature->GetAura(DUNGEON_MODE(SPELL_CONSUME,H_SPELL_CONSUME)))
{ {
if (pConsumeAura && pConsumeAura->GetStackAmount() > 9) if (pConsumeAura && pConsumeAura->GetStackAmount() > 9)
bAchiev = false; bAchiev = false;
@@ -156,7 +157,7 @@ struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
if (uiExplodeCorpseTimer <= diff) if (uiExplodeCorpseTimer <= diff)
{ {
DoCast(HEROIC(SPELL_CORPSE_EXPLODE, H_SPELL_CORPSE_EXPLODE)); DoCast(DUNGEON_MODE(SPELL_CORPSE_EXPLODE, H_SPELL_CORPSE_EXPLODE));
DoScriptText(SAY_EXPLODE, m_creature); DoScriptText(SAY_EXPLODE, m_creature);
uiExplodeCorpseTimer = urand(15000,19000); uiExplodeCorpseTimer = urand(15000,19000);
} else uiExplodeCorpseTimer -= diff; } else uiExplodeCorpseTimer -= diff;
@@ -222,7 +222,6 @@ struct TRINITY_DLL_DECL npc_living_mojoAI : public ScriptedAI
{ {
npc_living_mojoAI(Creature* pCreature) : ScriptedAI(pCreature) npc_living_mojoAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
HeroicMode = pCreature->GetMap()->IsHeroic();
pInstance = pCreature->GetInstanceData(); pInstance = pCreature->GetInstanceData();
} }
@@ -230,8 +229,6 @@ struct TRINITY_DLL_DECL npc_living_mojoAI : public ScriptedAI
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 uiMojoWaveTimer; uint32 uiMojoWaveTimer;
uint32 uiMojoPuddleTimer; uint32 uiMojoPuddleTimer;
@@ -277,13 +274,13 @@ struct TRINITY_DLL_DECL npc_living_mojoAI : public ScriptedAI
if (uiMojoWaveTimer <= diff) if (uiMojoWaveTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_MOJO_WAVE, H_SPELL_MOJO_WAVE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MOJO_WAVE, H_SPELL_MOJO_WAVE));
uiMojoWaveTimer = 15000; uiMojoWaveTimer = 15000;
} else uiMojoWaveTimer -= diff; } else uiMojoWaveTimer -= diff;
if (uiMojoPuddleTimer <= diff) if (uiMojoPuddleTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_MOJO_PUDDLE, H_SPELL_MOJO_PUDDLE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MOJO_PUDDLE, H_SPELL_MOJO_PUDDLE));
uiMojoPuddleTimer = 18000; uiMojoPuddleTimer = 18000;
} else uiMojoPuddleTimer -= diff; } else uiMojoPuddleTimer -= diff;
@@ -119,7 +119,7 @@ struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
if (uiWhirlingSlashTimer <= diff) if (uiWhirlingSlashTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_WHIRLING_SLASH, H_SPELL_WHIRLING_SLASH)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_WHIRLING_SLASH, H_SPELL_WHIRLING_SLASH));
uiWhirlingSlashTimer = 20000; uiWhirlingSlashTimer = 20000;
++uiPhaseCounter; ++uiPhaseCounter;
} else uiWhirlingSlashTimer -= diff; } else uiWhirlingSlashTimer -= diff;
@@ -137,26 +137,26 @@ struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
{ {
if (uiPunctureTimer <= diff) if (uiPunctureTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_PUNCTURE, H_SPELL_PUNCTURE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_PUNCTURE, H_SPELL_PUNCTURE));
uiPunctureTimer = 8000; uiPunctureTimer = 8000;
} else uiPunctureTimer -= diff; } else uiPunctureTimer -= diff;
if (uiEnrageTimer <= diff) if (uiEnrageTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_ENRAGE, H_SPELL_ENRAGE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_ENRAGE, H_SPELL_ENRAGE));
uiEnrageTimer = 20000; uiEnrageTimer = 20000;
} else uiEnrageTimer -= diff; } else uiEnrageTimer -= diff;
if (uiStompTimer <= diff) if (uiStompTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_STOMP, H_SPELL_STOMP)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_STOMP, H_SPELL_STOMP));
uiStompTimer = 20000; uiStompTimer = 20000;
} else uiStompTimer -= diff; } else uiStompTimer -= diff;
if (uiImpalingChargeTimer <= diff) if (uiImpalingChargeTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_IMPALING_CHARGE, H_SPELL_IMPALING_CHARGE)); DoCast(pTarget, DUNGEON_MODE(SPELL_IMPALING_CHARGE, H_SPELL_IMPALING_CHARGE));
uiImpalingChargeTimer = 30000; uiImpalingChargeTimer = 30000;
++uiPhaseCounter; ++uiPhaseCounter;
} else uiImpalingChargeTimer -= diff; } else uiImpalingChargeTimer -= diff;
@@ -112,7 +112,7 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
if (uiDeterminedStabTimer <= uiDiff) if (uiDeterminedStabTimer <= uiDiff)
{ {
if (bPhase) if (bPhase)
DoCast(m_creature->getVictim(), HEROIC(SPELL_DETERMINED_GORE, SPELL_DETERMINED_GORE_1)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_DETERMINED_GORE, SPELL_DETERMINED_GORE_1));
else else
DoCast(m_creature->getVictim(), SPELL_DETERMINED_STAB, true); DoCast(m_creature->getVictim(), SPELL_DETERMINED_STAB, true);
uiDeterminedStabTimer = 8000; uiDeterminedStabTimer = 8000;
@@ -133,7 +133,7 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
if (HeroicMode && !bPhase) if (IsHeroic() && !bPhase)
{ {
AchievementEntry const *AchievLessRabi = GetAchievementStore()->LookupEntry(ACHIEVEMENT_LESS_RABI); AchievementEntry const *AchievLessRabi = GetAchievementStore()->LookupEntry(ACHIEVEMENT_LESS_RABI);
if (AchievLessRabi) if (AchievLessRabi)
@@ -109,19 +109,19 @@ struct TRINITY_DLL_DECL boss_slad_ranAI : public ScriptedAI
if (uiPoisonNovaTimer <= diff) if (uiPoisonNovaTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_POISON_NOVA, H_SPELL_POISON_NOVA)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_POISON_NOVA, H_SPELL_POISON_NOVA));
uiPoisonNovaTimer = 15000; uiPoisonNovaTimer = 15000;
} else uiPoisonNovaTimer -= diff; } else uiPoisonNovaTimer -= diff;
if (uiPowerfullBiteTimer <= diff) if (uiPowerfullBiteTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_POWERFULL_BITE, H_SPELL_POWERFULL_BITE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_POWERFULL_BITE, H_SPELL_POWERFULL_BITE));
uiPowerfullBiteTimer = 10000; uiPowerfullBiteTimer = 10000;
} else uiPowerfullBiteTimer -= diff; } else uiPowerfullBiteTimer -= diff;
if (uiVenomBoltTimer <= diff) if (uiVenomBoltTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_VENOM_BOLT, H_SPELL_VENOM_BOLT)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_VENOM_BOLT, H_SPELL_VENOM_BOLT));
uiVenomBoltTimer = 10000; uiVenomBoltTimer = 10000;
} else uiVenomBoltTimer -= diff; } else uiVenomBoltTimer -= diff;
@@ -130,10 +130,10 @@ struct TRINITY_DLL_DECL boss_slad_ranAI : public ScriptedAI
if (uiSpawnTimer <= diff) if (uiSpawnTimer <= diff)
{ {
if (uiPhase == 1) if (uiPhase == 1)
for (uint8 i = 0; i < (HeroicMode ? 5 : 3); ++i) for (uint8 i = 0; i < DUNGEON_MODE(3, 5); ++i)
m_creature->SummonCreature(CREATURE_SNAKE, SpawnLoc[i].x, SpawnLoc[i].y, SpawnLoc[i].z, SpawnLoc[i].orientation, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000); m_creature->SummonCreature(CREATURE_SNAKE, SpawnLoc[i].x, SpawnLoc[i].y, SpawnLoc[i].z, SpawnLoc[i].orientation, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000);
if (uiPhase == 2) if (uiPhase == 2)
for (uint8 i = 0; i < (HeroicMode ? 5 : 3); ++i) for (uint8 i = 0; i < DUNGEON_MODE(3, 5); ++i)
m_creature->SummonCreature(CREATURE_CONSTRICTORS, SpawnLoc[i].x, SpawnLoc[i].y, SpawnLoc[i].z, SpawnLoc[i].orientation, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000); m_creature->SummonCreature(CREATURE_CONSTRICTORS, SpawnLoc[i].x, SpawnLoc[i].y, SpawnLoc[i].z, SpawnLoc[i].orientation, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000);
uiSpawnTimer = 5000; uiSpawnTimer = 5000;
} else uiSpawnTimer -= diff; } else uiSpawnTimer -= diff;
@@ -218,7 +218,7 @@ struct TRINITY_DLL_DECL mob_slad_ran_viperAI : public ScriptedAI
if (uiVenomousBiteTimer <= diff) if (uiVenomousBiteTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_VENOMOUS_BITE, H_SPELL_VENOMOUS_BITE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_VENOMOUS_BITE, H_SPELL_VENOMOUS_BITE));
uiVenomousBiteTimer = 10000; uiVenomousBiteTimer = 10000;
} else uiVenomousBiteTimer -= diff; } else uiVenomousBiteTimer -= diff;
} }
@@ -21,8 +21,8 @@
#define SAY_AGGRO RAND(-1533001,-1533002,-1533003) #define SAY_AGGRO RAND(-1533001,-1533002,-1533003)
#define SAY_SLAY -1533008 #define SAY_SLAY -1533008
#define SPELL_IMPALE HEROIC(28783,56090) #define SPELL_IMPALE RAID_MODE(28783,56090)
#define SPELL_LOCUSTSWARM HEROIC(28785,54021) #define SPELL_LOCUSTSWARM RAID_MODE(28785,54021)
#define SPELL_SELF_SPAWN_5 29105 //This spawns 5 corpse scarabs ontop of us (most likely the player casts this on death) #define SPELL_SELF_SPAWN_5 29105 //This spawns 5 corpse scarabs ontop of us (most likely the player casts this on death)
@@ -41,7 +41,7 @@ struct TRINITY_DLL_DECL boss_anubrekhanAI : public BossAI
{ {
HasTaunted = false; HasTaunted = false;
if (HeroicMode) if (IsHeroic())
{ {
DoSpawnCreature(MOB_CRYPT_GUARD, 0, -10, 0, me->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); DoSpawnCreature(MOB_CRYPT_GUARD, 0, -10, 0, me->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
DoSpawnCreature(MOB_CRYPT_GUARD, 0, 10, 0, me->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); DoSpawnCreature(MOB_CRYPT_GUARD, 0, 10, 0, me->GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
@@ -115,16 +115,16 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
{ {
case EVENT_POISON: case EVENT_POISON:
if (!me->HasAura(SPELL_WIDOWS_EMBRACE)) if (!me->HasAura(SPELL_WIDOWS_EMBRACE))
DoCastAOE(HEROIC(SPELL_POISON_BOLT_VOLLEY,H_SPELL_POISON_BOLT_VOLLEY)); DoCastAOE(RAID_MODE(SPELL_POISON_BOLT_VOLLEY,H_SPELL_POISON_BOLT_VOLLEY));
events.ScheduleEvent(EVENT_POISON, urand(12000,15000)); events.ScheduleEvent(EVENT_POISON, urand(12000,15000));
return; return;
case EVENT_FIRE: case EVENT_FIRE:
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_RAIN_OF_FIRE, H_SPELL_RAIN_OF_FIRE)); DoCast(pTarget, RAID_MODE(SPELL_RAIN_OF_FIRE, H_SPELL_RAIN_OF_FIRE));
events.ScheduleEvent(EVENT_FIRE, urand(6000,18000)); events.ScheduleEvent(EVENT_FIRE, urand(6000,18000));
return; return;
case EVENT_FRENZY: case EVENT_FRENZY:
DoCast(me, HEROIC(SPELL_FRENZY, H_SPELL_FRENZY)); DoCast(me, RAID_MODE(SPELL_FRENZY, H_SPELL_FRENZY));
delayFrenzy = false; delayFrenzy = false;
return; return;
case EVENT_AFTERENRAGE: case EVENT_AFTERENRAGE:
@@ -139,7 +139,7 @@ struct TRINITY_DLL_DECL boss_faerlinaAI : public BossAI
{ {
if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE) if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE)
{ {
if (m_creature->HasAura(HEROIC(SPELL_FRENZY,H_SPELL_FRENZY))) if (m_creature->HasAura(RAID_MODE(SPELL_FRENZY,H_SPELL_FRENZY)))
{ {
if (!delayFrenzy) if (!delayFrenzy)
{ {
@@ -169,7 +169,7 @@ struct TRINITY_DLL_DECL mob_faerlina_addAI : public ScriptedAI
void Reset() void Reset()
{ {
if (!HeroicMode) if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, SPELL_EFFECT_BIND, true); m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, SPELL_EFFECT_BIND, true);
} }
@@ -178,7 +178,7 @@ struct TRINITY_DLL_DECL mob_faerlina_addAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
if (Creature *pFaerlina = pInstance->instance->GetCreature(pInstance->GetData64(DATA_FAERLINA))) if (Creature *pFaerlina = pInstance->instance->GetCreature(pInstance->GetData64(DATA_FAERLINA)))
DoCast(pFaerlina, HEROIC(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE)); DoCast(pFaerlina, RAID_MODE(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE));
} }
} }
@@ -55,10 +55,10 @@ const Position WaypointPositions[12] =
const uint32 MOB_HORSEMEN[] = {16064, 16065, 30549, 16063}; const uint32 MOB_HORSEMEN[] = {16064, 16065, 30549, 16063};
const uint32 SPELL_MARK[] = {28832, 28833, 28834, 28835}; const uint32 SPELL_MARK[] = {28832, 28833, 28834, 28835};
#define SPELL_PRIMARY(i) HEROIC(SPELL_PRIMARY_N[i],SPELL_PRIMARY_H[i]) #define SPELL_PRIMARY(i) RAID_MODE(SPELL_PRIMARY_N[i],SPELL_PRIMARY_H[i])
const uint32 SPELL_PRIMARY_N[] = {28884, 28863, 28882, 28883}; const uint32 SPELL_PRIMARY_N[] = {28884, 28863, 28882, 28883};
const uint32 SPELL_PRIMARY_H[] = {57467, 57463, 57369, 57466}; const uint32 SPELL_PRIMARY_H[] = {57467, 57463, 57369, 57466};
#define SPELL_SECONDARY(i) HEROIC(SPELL_SECONDARY_N[i],SPELL_SECONDARY_H[i]) #define SPELL_SECONDARY(i) RAID_MODE(SPELL_SECONDARY_N[i],SPELL_SECONDARY_H[i])
const uint32 SPELL_SECONDARY_N[]= {0, 57374, 0, 57376}; const uint32 SPELL_SECONDARY_N[]= {0, 57374, 0, 57376};
const uint32 SPELL_SECONDARY_H[]= {0, 57464, 0, 57465}; const uint32 SPELL_SECONDARY_H[]= {0, 57464, 0, 57465};
const uint32 SPELL_PUNISH[] = {0, 57381, 0, 57377}; const uint32 SPELL_PUNISH[] = {0, 57381, 0, 57377};
@@ -18,8 +18,8 @@
#include "naxxramas.h" #include "naxxramas.h"
#define SPELL_MORTAL_WOUND 25646 #define SPELL_MORTAL_WOUND 25646
#define SPELL_ENRAGE HEROIC(28371,54427) #define SPELL_ENRAGE RAID_MODE(28371,54427)
#define SPELL_DECIMATE HEROIC(28374,54426) #define SPELL_DECIMATE RAID_MODE(28374,54426)
#define SPELL_BERSERK 26662 #define SPELL_BERSERK 26662
#define SPELL_INFECTED_WOUND 29306 #define SPELL_INFECTED_WOUND 29306
@@ -131,7 +131,7 @@ struct TRINITY_DLL_DECL boss_gluthAI : public BossAI
events.ScheduleEvent(EVENT_BERSERK, 5*60000); events.ScheduleEvent(EVENT_BERSERK, 5*60000);
break; break;
case EVENT_SUMMON: case EVENT_SUMMON:
for (uint32 i = 0; i < HEROIC(1,2); ++i) for (uint32 i = 0; i < RAID_MODE(1,2); ++i)
DoSummon(MOB_ZOMBIE, triggers[rand()%3]); DoSummon(MOB_ZOMBIE, triggers[rand()%3]);
events.ScheduleEvent(EVENT_SUMMON, 10000); events.ScheduleEvent(EVENT_SUMMON, 10000);
break; break;
@@ -290,7 +290,7 @@ struct TRINITY_DLL_DECL boss_gothikAI : public BossAI
} }
break; break;
case EVENT_BOLT: case EVENT_BOLT:
DoCast(me->getVictim(), HEROIC(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT)); DoCast(me->getVictim(), RAID_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
events.ScheduleEvent(EVENT_BOLT, 1000); events.ScheduleEvent(EVENT_BOLT, 1000);
return; return;
case EVENT_HARVEST: case EVENT_HARVEST:
@@ -21,7 +21,7 @@
#define SPELL_POISON_CLOUD 28240 #define SPELL_POISON_CLOUD 28240
#define SPELL_MUTATING_INJECTION 28169 #define SPELL_MUTATING_INJECTION 28169
#define SPELL_SLIME_SPRAY HEROIC(28157,54364) #define SPELL_SLIME_SPRAY RAID_MODE(28157,54364)
#define SPELL_BERSERK 26662 #define SPELL_BERSERK 26662
#define SPELL_POISON_CLOUD_ADD 59116 #define SPELL_POISON_CLOUD_ADD 59116
@@ -23,7 +23,7 @@
#define SAY_DEATH -1533118 #define SAY_DEATH -1533118
#define SPELL_SPELL_DISRUPTION 29310 #define SPELL_SPELL_DISRUPTION 29310
#define SPELL_DECREPIT_FEVER HEROIC(29998,55011) #define SPELL_DECREPIT_FEVER RAID_MODE(29998,55011)
#define SPELL_PLAGUE_CLOUD 29350 #define SPELL_PLAGUE_CLOUD 29350
enum Events enum Events
@@ -188,7 +188,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI
events.ScheduleEvent(EVENT_DETONATE, 20000); events.ScheduleEvent(EVENT_DETONATE, 20000);
events.ScheduleEvent(EVENT_FISSURE, 25000); events.ScheduleEvent(EVENT_FISSURE, 25000);
events.ScheduleEvent(EVENT_BLAST, urand(30000,60000)); events.ScheduleEvent(EVENT_BLAST, urand(30000,60000));
if (HeroicMode) if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
events.ScheduleEvent(EVENT_CHAIN, urand(30000,60000)); events.ScheduleEvent(EVENT_CHAIN, urand(30000,60000));
Phase = 2; Phase = 2;
return; return;
@@ -212,7 +212,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI
DoScriptText(SAY_ANSWER_REQUEST, m_creature); DoScriptText(SAY_ANSWER_REQUEST, m_creature);
} }
} }
else if (GuardiansOfIcecrown_Count < HEROIC(2,5)) else if (GuardiansOfIcecrown_Count < RAID_MODE(2,5))
{ {
if (GuardiansOfIcecrown_Timer <= diff) if (GuardiansOfIcecrown_Timer <= diff)
{ {
@@ -231,11 +231,11 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public BossAI
switch(eventId) switch(eventId)
{ {
case EVENT_BOLT: case EVENT_BOLT:
DoCastVictim(HEROIC(SPELL_FROST_BOLT,H_SPELL_FROST_BOLT)); DoCastVictim(RAID_MODE(SPELL_FROST_BOLT,H_SPELL_FROST_BOLT));
events.RepeatEvent(urand(1000,10000)); events.RepeatEvent(urand(1000,10000));
return; return;
case EVENT_NOVA: case EVENT_NOVA:
DoCastAOE(HEROIC(SPELL_FROST_BOLT_AOE,H_SPELL_FROST_BOLT_AOE)); DoCastAOE(RAID_MODE(SPELL_FROST_BOLT_AOE,H_SPELL_FROST_BOLT_AOE));
events.RepeatEvent(urand(10000,20000)); events.RepeatEvent(urand(10000,20000));
return; return;
case EVENT_CHAIN: case EVENT_CHAIN:
@@ -66,11 +66,11 @@ struct TRINITY_DLL_DECL boss_loathebAI : public BossAI
return; return;
case EVENT_BLOOM: case EVENT_BLOOM:
DoCastAOE(SPELL_SUMMON_SPORE, true); DoCastAOE(SPELL_SUMMON_SPORE, true);
DoCastAOE(HEROIC(SPELL_DEATHBLOOM,H_SPELL_DEATHBLOOM)); DoCastAOE(RAID_MODE(SPELL_DEATHBLOOM,H_SPELL_DEATHBLOOM));
events.ScheduleEvent(EVENT_BLOOM, 30000); events.ScheduleEvent(EVENT_BLOOM, 30000);
return; return;
case EVENT_DOOM: case EVENT_DOOM:
DoCastAOE(HEROIC(SPELL_INEVITABLE_DOOM,H_SPELL_INEVITABLE_DOOM)); DoCastAOE(RAID_MODE(SPELL_INEVITABLE_DOOM,H_SPELL_INEVITABLE_DOOM));
events.ScheduleEvent(EVENT_DOOM, events.GetTimer() < 5*60000 ? 30000 : 15000); events.ScheduleEvent(EVENT_DOOM, events.GetTimer() < 5*60000 ? 30000 : 15000);
return; return;
} }
@@ -20,10 +20,10 @@
#include "naxxramas.h" #include "naxxramas.h"
#define SPELL_WEB_WRAP 28622 #define SPELL_WEB_WRAP 28622
#define SPELL_WEB_SPRAY HEROIC(29484,54125) #define SPELL_WEB_SPRAY RAID_MODE(29484,54125)
#define SPELL_POISON_SHOCK HEROIC(28741,54122) #define SPELL_POISON_SHOCK RAID_MODE(28741,54122)
#define SPELL_NECROTIC_POISON HEROIC(54121,28776) #define SPELL_NECROTIC_POISON RAID_MODE(54121,28776)
#define SPELL_FRENZY HEROIC(54123,54124) #define SPELL_FRENZY RAID_MODE(54123,54124)
#define MOB_WEB_WRAP 16486 #define MOB_WEB_WRAP 16486
#define MOB_SPIDERLING 17055 #define MOB_SPIDERLING 17055
@@ -75,7 +75,7 @@ struct TRINITY_DLL_DECL boss_maexxnaAI : public BossAI
switch(eventId) switch(eventId)
{ {
case EVENT_WRAP: case EVENT_WRAP:
for (uint8 i = 0; i < HEROIC(1,2); ++i) for (uint8 i = 0; i < RAID_MODE(1,2); ++i)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP))
{ {
@@ -24,9 +24,9 @@
#define SOUND_DEATH 8848 #define SOUND_DEATH 8848
#define SPELL_CURSE_PLAGUEBRINGER HEROIC(29213,54835) #define SPELL_CURSE_PLAGUEBRINGER RAID_MODE(29213,54835)
#define SPELL_BLINK RAND(29208,29209,29210,29211) #define SPELL_BLINK RAND(29208,29209,29210,29211)
#define SPELL_CRIPPLE HEROIC(29212,54814) #define SPELL_CRIPPLE RAID_MODE(29212,54814)
#define SPELL_TELEPORT 29216 #define SPELL_TELEPORT 29216
#define MOB_WARRIOR 16984 #define MOB_WARRIOR 16984
@@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_nothAI : public BossAI
events.ScheduleEvent(EVENT_BALCONY, 110000); events.ScheduleEvent(EVENT_BALCONY, 110000);
events.ScheduleEvent(EVENT_CURSE, 20000+rand()%10000); events.ScheduleEvent(EVENT_CURSE, 20000+rand()%10000);
events.ScheduleEvent(EVENT_WARRIOR, 30000); events.ScheduleEvent(EVENT_WARRIOR, 30000);
if (HeroicMode) if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
events.ScheduleEvent(EVENT_BLINK, 20000+rand()%10000); events.ScheduleEvent(EVENT_BLINK, 20000+rand()%10000);
} }
} }
@@ -146,7 +146,7 @@ struct TRINITY_DLL_DECL boss_nothAI : public BossAI
return; return;
case EVENT_WARRIOR: case EVENT_WARRIOR:
DoScriptText(SAY_SUMMON, me); DoScriptText(SAY_SUMMON, me);
SummonUndead(MOB_WARRIOR, HEROIC(2,3)); SummonUndead(MOB_WARRIOR, RAID_MODE(2,3));
events.ScheduleEvent(EVENT_WARRIOR, 30000); events.ScheduleEvent(EVENT_WARRIOR, 30000);
return; return;
case EVENT_BLINK: case EVENT_BLINK:
@@ -169,12 +169,12 @@ struct TRINITY_DLL_DECL boss_nothAI : public BossAI
DoScriptText(SAY_SUMMON, me); DoScriptText(SAY_SUMMON, me);
switch(balconyCount) switch(balconyCount)
{ {
case 0: SummonUndead(MOB_CHAMPION, HEROIC(2,4)); break; case 0: SummonUndead(MOB_CHAMPION, RAID_MODE(2,4)); break;
case 1: SummonUndead(MOB_CHAMPION, HEROIC(1,2)); case 1: SummonUndead(MOB_CHAMPION, RAID_MODE(1,2));
SummonUndead(MOB_GUARDIAN, HEROIC(1,2)); break; SummonUndead(MOB_GUARDIAN, RAID_MODE(1,2)); break;
case 2: SummonUndead(MOB_GUARDIAN, HEROIC(2,4)); break; case 2: SummonUndead(MOB_GUARDIAN, RAID_MODE(2,4)); break;
default:SummonUndead(MOB_CHAMPION, HEROIC(5,10)); default:SummonUndead(MOB_CHAMPION, RAID_MODE(5,10));
SummonUndead(MOB_GUARDIAN, HEROIC(5,10));break; SummonUndead(MOB_GUARDIAN, RAID_MODE(5,10));break;
} }
++waveCount; ++waveCount;
events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, 34000); events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, 34000);
@@ -24,7 +24,7 @@
#define EMOTE_BERSERK -1533021 #define EMOTE_BERSERK -1533021
#define EMOTE_ENRAGE -1533022 #define EMOTE_ENRAGE -1533022
#define SPELL_HATEFULSTRIKE HEROIC(41926,59192) #define SPELL_HATEFULSTRIKE RAID_MODE(41926,59192)
#define SPELL_FRENZY 28131 #define SPELL_FRENZY 28131
#define SPELL_BERSERK 26662 #define SPELL_BERSERK 26662
#define SPELL_SLIMEBOLT 32309 #define SPELL_SLIMEBOLT 32309
@@ -33,7 +33,7 @@
#define EVENT_HATEFUL 2 #define EVENT_HATEFUL 2
#define EVENT_SLIME 3 #define EVENT_SLIME 3
#define ACHIEVEMENT_MAKE_QUICK_WERK_OF_HIM HEROIC(1856, 1857) #define ACHIEVEMENT_MAKE_QUICK_WERK_OF_HIM RAID_MODE(1856, 1857)
#define MAX_ENCOUNTER_TIME 3 * 60 * 1000 #define MAX_ENCOUNTER_TIME 3 * 60 * 1000
struct TRINITY_DLL_DECL boss_patchwerkAI : public BossAI struct TRINITY_DLL_DECL boss_patchwerkAI : public BossAI
@@ -40,7 +40,7 @@
#define SOUND_AGGROMIX 8847 #define SOUND_AGGROMIX 8847
#define SPELL_UNBALANCING_STRIKE 26613 #define SPELL_UNBALANCING_STRIKE 26613
#define SPELL_DISRUPTING_SHOUT HEROIC(29107,55543) #define SPELL_DISRUPTING_SHOUT RAID_MODE(29107,55543)
#define SPELL_JAGGED_KNIFE 55550 #define SPELL_JAGGED_KNIFE 55550
#define SPELL_HOPELESS 29125 #define SPELL_HOPELESS 29125
@@ -22,11 +22,11 @@
#define EMOTE_BREATH -1533082 #define EMOTE_BREATH -1533082
#define EMOTE_ENRAGE -1533083 #define EMOTE_ENRAGE -1533083
#define SPELL_FROST_AURA HEROIC(28531,55799) #define SPELL_FROST_AURA RAID_MODE(28531,55799)
#define SPELL_CLEAVE 19983 #define SPELL_CLEAVE 19983
#define SPELL_TAIL_SWEEP HEROIC(55697,55696) #define SPELL_TAIL_SWEEP RAID_MODE(55697,55696)
#define SPELL_SUMMON_BLIZZARD 28560 #define SPELL_SUMMON_BLIZZARD 28560
#define SPELL_LIFE_DRAIN HEROIC(28542,55665) #define SPELL_LIFE_DRAIN RAID_MODE(28542,55665)
#define SPELL_ICEBOLT 28522 #define SPELL_ICEBOLT 28522
#define SPELL_FROST_BREATH 29318 #define SPELL_FROST_BREATH 29318
#define SPELL_FROST_EXPLOSION 28524 #define SPELL_FROST_EXPLOSION 28524
@@ -34,12 +34,12 @@
#define SPELL_BERSERK 26662 #define SPELL_BERSERK 26662
#define SPELL_DIES 29357 #define SPELL_DIES 29357
#define SPELL_CHILL HEROIC(28547,55699) #define SPELL_CHILL RAID_MODE(28547,55699)
#define MOB_BLIZZARD 16474 #define MOB_BLIZZARD 16474
#define GO_ICEBLOCK 181247 #define GO_ICEBLOCK 181247
#define ACHIEVEMENT_THE_HUNDRED_CLUB HEROIC(2146, 2147) #define ACHIEVEMENT_THE_HUNDRED_CLUB RAID_MODE(2146, 2147)
#define MAX_FROST_RESISTANCE 100 #define MAX_FROST_RESISTANCE 100
enum Phases enum Phases
@@ -258,7 +258,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public BossAI
//DoCastAOE(SPELL_SUMMON_BLIZZARD); //DoCastAOE(SPELL_SUMMON_BLIZZARD);
if (Creature *pSummon = DoSummon(MOB_BLIZZARD, me, 0.0f, urand(25000,30000), TEMPSUMMON_TIMED_DESPAWN)) if (Creature *pSummon = DoSummon(MOB_BLIZZARD, me, 0.0f, urand(25000,30000), TEMPSUMMON_TIMED_DESPAWN))
pSummon->GetMotionMaster()->MoveRandom(40); pSummon->GetMotionMaster()->MoveRandom(40);
events.ScheduleEvent(EVENT_BLIZZARD, HEROIC(20000,7000), 0, PHASE_GROUND); events.ScheduleEvent(EVENT_BLIZZARD, RAID_MODE(20000,7000), 0, PHASE_GROUND);
break; break;
} }
case EVENT_FLIGHT: case EVENT_FLIGHT:
@@ -286,7 +286,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public BossAI
me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
me->SendMovementFlagUpdate(); me->SendMovementFlagUpdate();
events.ScheduleEvent(EVENT_ICEBOLT, 1500); events.ScheduleEvent(EVENT_ICEBOLT, 1500);
iceboltCount = HEROIC(2,3); iceboltCount = RAID_MODE(2,3);
return; return;
case EVENT_ICEBOLT: case EVENT_ICEBOLT:
{ {
@@ -139,7 +139,7 @@ struct TRINITY_DLL_DECL boss_thaddiusAI : public BossAI
events.ScheduleEvent(EVENT_SHIFT, 30000); events.ScheduleEvent(EVENT_SHIFT, 30000);
return; return;
case EVENT_CHAIN: case EVENT_CHAIN:
DoCast(me->getVictim(), HEROIC(SPELL_CHAIN_LIGHTNING, H_SPELL_CHAIN_LIGHTNING)); DoCast(me->getVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING, H_SPELL_CHAIN_LIGHTNING));
events.ScheduleEvent(EVENT_CHAIN, urand(10000,20000)); events.ScheduleEvent(EVENT_CHAIN, urand(10000,20000));
return; return;
case EVENT_BERSERK: case EVENT_BERSERK:
@@ -180,7 +180,7 @@ struct TRINITY_DLL_DECL mob_stalaggAI : public ScriptedAI
{ {
if (PowerSurgeTimer <= uiDiff) if (PowerSurgeTimer <= uiDiff)
{ {
DoCast(m_creature, HEROIC(SPELL_POWERSURGE, H_SPELL_POWERSURGE)); DoCast(m_creature, RAID_MODE(SPELL_POWERSURGE, H_SPELL_POWERSURGE));
PowerSurgeTimer = urand(15000,20000); PowerSurgeTimer = urand(15000,20000);
} else PowerSurgeTimer -= uiDiff; } else PowerSurgeTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -213,7 +213,7 @@ struct TRINITY_DLL_DECL mob_feugenAI : public ScriptedAI
{ {
if (StaticFieldTimer <= uiDiff) if (StaticFieldTimer <= uiDiff)
{ {
DoCast(m_creature, HEROIC(SPELL_STATICFIELD, H_SPELL_STATICFIELD)); DoCast(m_creature, RAID_MODE(SPELL_STATICFIELD, H_SPELL_STATICFIELD));
StaticFieldTimer = 5000; StaticFieldTimer = 5000;
} else StaticFieldTimer -= uiDiff; } else StaticFieldTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -66,11 +66,9 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
boss_anomalusAI(Creature *c) : ScriptedAI(c) boss_anomalusAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint8 Phase; uint8 Phase;
uint32 SPELL_SPARK_Timer; uint32 SPELL_SPARK_Timer;
@@ -102,7 +100,7 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
if (HeroicMode && !DeadChaoticRift) if (IsHeroic() && !DeadChaoticRift)
{ {
AchievementEntry const *AchievChaosTheory = GetAchievementStore()->LookupEntry(ACHIEVEMENT_CHAOS_THEORY); AchievementEntry const *AchievChaosTheory = GetAchievementStore()->LookupEntry(ACHIEVEMENT_CHAOS_THEORY);
if (AchievChaosTheory) if (AchievChaosTheory)
@@ -205,7 +203,7 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
if (SPELL_SPARK_Timer <= diff) if (SPELL_SPARK_Timer <= diff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_SPARK_N, SPELL_SPARK_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_SPARK_N, SPELL_SPARK_H));
SPELL_SPARK_Timer = 5000; SPELL_SPARK_Timer = 5000;
} else SPELL_SPARK_Timer -=diff; } else SPELL_SPARK_Timer -=diff;
@@ -54,11 +54,9 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
boss_keristraszaAI(Creature *c) : ScriptedAI(c) boss_keristraszaAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 CRYSTALFIRE_BREATH_Timer; uint32 CRYSTALFIRE_BREATH_Timer;
uint32 CRYSTAL_CHAINS_CRYSTALIZE_Timer; uint32 CRYSTAL_CHAINS_CRYSTALIZE_Timer;
@@ -73,7 +71,7 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
void Reset() void Reset()
{ {
CRYSTALFIRE_BREATH_Timer = 14000; CRYSTALFIRE_BREATH_Timer = 14000;
CRYSTAL_CHAINS_CRYSTALIZE_Timer = HEROIC(30000,11000); CRYSTAL_CHAINS_CRYSTALIZE_Timer = DUNGEON_MODE(30000,11000);
TAIL_SWEEP_Timer = 5000; TAIL_SWEEP_Timer = 5000;
Enrage = false; Enrage = false;
@@ -101,7 +99,7 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
if (HeroicMode && !MoreThanTwoIntenseCold) if (IsHeroic() && !MoreThanTwoIntenseCold)
{ {
AchievementEntry const *AchievIntenseCold = GetAchievementStore()->LookupEntry(ACHIEVEMENT_INTENSE_COLD); AchievementEntry const *AchievIntenseCold = GetAchievementStore()->LookupEntry(ACHIEVEMENT_INTENSE_COLD);
if (AchievIntenseCold) if (AchievIntenseCold)
@@ -199,7 +197,7 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
if (CRYSTALFIRE_BREATH_Timer <= diff) if (CRYSTALFIRE_BREATH_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_CRYSTALFIRE_BREATH_N, SPELL_CRYSTALFIRE_BREATH_H)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_CRYSTALFIRE_BREATH_N, SPELL_CRYSTALFIRE_BREATH_H));
CRYSTALFIRE_BREATH_Timer = 14000; CRYSTALFIRE_BREATH_Timer = 14000;
} else CRYSTALFIRE_BREATH_Timer -=diff; } else CRYSTALFIRE_BREATH_Timer -=diff;
@@ -212,11 +210,11 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
if (CRYSTAL_CHAINS_CRYSTALIZE_Timer <= diff) if (CRYSTAL_CHAINS_CRYSTALIZE_Timer <= diff)
{ {
DoScriptText(SAY_CRYSTAL_NOVA, m_creature); DoScriptText(SAY_CRYSTAL_NOVA, m_creature);
if (HeroicMode) if (IsHeroic())
DoCast(m_creature, SPELL_CRYSTALIZE); DoCast(m_creature, SPELL_CRYSTALIZE);
else if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) else if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, SPELL_CRYSTAL_CHAINS); DoCast(pTarget, SPELL_CRYSTAL_CHAINS);
CRYSTAL_CHAINS_CRYSTALIZE_Timer = HEROIC(30000,11000); CRYSTAL_CHAINS_CRYSTALIZE_Timer = DUNGEON_MODE(30000,11000);
} else CRYSTAL_CHAINS_CRYSTALIZE_Timer -= diff; } else CRYSTAL_CHAINS_CRYSTALIZE_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -66,11 +66,9 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
boss_magus_telestraAI(Creature* c) : ScriptedAI(c) boss_magus_telestraAI(Creature* c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint64 FireMagusGUID; uint64 FireMagusGUID;
uint64 FrostMagusGUID; uint64 FrostMagusGUID;
@@ -131,7 +129,7 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
if (HeroicMode && AchievementProgress == 2) if (IsHeroic() && AchievementProgress == 2)
{ {
AchievementEntry const *AchievSplitPersonality = GetAchievementStore()->LookupEntry(ACHIEV_SPLIT_PERSONALITY); AchievementEntry const *AchievSplitPersonality = GetAchievementStore()->LookupEntry(ACHIEV_SPLIT_PERSONALITY);
if (AchievSplitPersonality) if (AchievSplitPersonality)
@@ -277,7 +275,7 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
return; return;
} }
if (HeroicMode && (Phase == 2) && (m_creature->GetHealth() <= (m_creature->GetMaxHealth() * 0.1))) if (IsHeroic() && (Phase == 2) && (m_creature->GetHealth() <= (m_creature->GetMaxHealth() * 0.1)))
{ {
Phase = 3; Phase = 3;
m_creature->CastStop(); m_creature->CastStop();
@@ -309,7 +307,7 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{ {
DoCast(pTarget, HEROIC(SPELL_ICE_NOVA_N, SPELL_ICE_NOVA_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_ICE_NOVA_N, SPELL_ICE_NOVA_H));
Cooldown = 1500; Cooldown = 1500;
} }
SPELL_ICE_NOVA_Timer = 15000; SPELL_ICE_NOVA_Timer = 15000;
@@ -329,7 +327,7 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{ {
DoCast(pTarget, HEROIC(SPELL_FIREBOMB_N, SPELL_FIREBOMB_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_FIREBOMB_N, SPELL_FIREBOMB_H));
Cooldown = 2000; Cooldown = 2000;
} }
SPELL_FIREBOMB_Timer = 2000; SPELL_FIREBOMB_Timer = 2000;
@@ -58,11 +58,10 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
boss_ormorokAI(Creature *c) : ScriptedAI(c) boss_ormorokAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
bool Frenzy; bool Frenzy;
bool CrystalSpikes; bool CrystalSpikes;
uint8 CrystalSpikes_Count; uint8 CrystalSpikes_Count;
@@ -145,7 +144,7 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
if (SPELL_TRAMPLE_Timer <= diff) if (SPELL_TRAMPLE_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_TRAMPLE_N, SPELL_TRAMPLE_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_TRAMPLE_N, SPELL_TRAMPLE_H));
SPELL_TRAMPLE_Timer = 10000; SPELL_TRAMPLE_Timer = 10000;
} else SPELL_TRAMPLE_Timer -= diff; } else SPELL_TRAMPLE_Timer -= diff;
@@ -169,7 +168,7 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
SPELL_CRYSTAL_SPIKES_Timer = 20000; SPELL_CRYSTAL_SPIKES_Timer = 20000;
} else SPELL_CRYSTAL_SPIKES_Timer -=diff; } else SPELL_CRYSTAL_SPIKES_Timer -=diff;
if (HeroicMode && (SPELL_SUMMON_CRYSTALLINE_TANGLER_Timer <= diff)) if (IsHeroic() && (SPELL_SUMMON_CRYSTALLINE_TANGLER_Timer <= diff))
{ {
Creature* Crystalline_Tangler = m_creature->SummonCreature(MOB_CRYSTALLINE_TANGLER, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000); Creature* Crystalline_Tangler = m_creature->SummonCreature(MOB_CRYSTALLINE_TANGLER, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000);
if (Crystalline_Tangler) if (Crystalline_Tangler)
@@ -217,11 +216,8 @@ struct TRINITY_DLL_DECL mob_crystal_spikeAI : public Scripted_NoMovementAI
{ {
mob_crystal_spikeAI(Creature *c) : Scripted_NoMovementAI(c) mob_crystal_spikeAI(Creature *c) : Scripted_NoMovementAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 SPELL_CRYSTALL_SPIKE_DAMAGE_Timer; uint32 SPELL_CRYSTALL_SPIKE_DAMAGE_Timer;
uint32 SPELL_CRYSTAL_SPIKE_PREVISUAL_Timer; uint32 SPELL_CRYSTAL_SPIKE_PREVISUAL_Timer;
@@ -245,7 +241,7 @@ struct TRINITY_DLL_DECL mob_crystal_spikeAI : public Scripted_NoMovementAI
if (SPELL_CRYSTALL_SPIKE_DAMAGE_Timer <= diff) if (SPELL_CRYSTALL_SPIKE_DAMAGE_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_CRYSTALL_SPIKE_DAMAGE_N, SPELL_CRYSTALL_SPIKE_DAMAGE_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_CRYSTALL_SPIKE_DAMAGE_N, SPELL_CRYSTALL_SPIKE_DAMAGE_H));
SPELL_CRYSTALL_SPIKE_DAMAGE_Timer = 10000; SPELL_CRYSTALL_SPIKE_DAMAGE_Timer = 10000;
} else SPELL_CRYSTALL_SPIKE_DAMAGE_Timer -=diff; } else SPELL_CRYSTALL_SPIKE_DAMAGE_Timer -=diff;
} }
@@ -255,11 +255,11 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
if (achievProgress == 1) if (achievProgress == 1)
pInstance->DoCompleteAchievement(HEROIC(ACHIEV_TWILIGHT_ASSIST,H_ACHIEV_TWILIGHT_ASSIST)); pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST,H_ACHIEV_TWILIGHT_ASSIST));
else if (achievProgress == 2) else if (achievProgress == 2)
pInstance->DoCompleteAchievement(HEROIC(ACHIEV_TWILIGHT_DUO,H_ACHIEV_TWILIGHT_DUO)); pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_DUO,H_ACHIEV_TWILIGHT_DUO));
else if (achievProgress == 3) else if (achievProgress == 3)
pInstance->DoCompleteAchievement(HEROIC(ACHIEV_TWILIGHT_ZONE,H_ACHIEV_TWILIGHT_ZONE)); pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ZONE,H_ACHIEV_TWILIGHT_ZONE));
pInstance->SetData(TYPE_SARTHARION_EVENT, DONE); pInstance->SetData(TYPE_SARTHARION_EVENT, DONE);
} }
@@ -430,7 +430,7 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
if (m_uiFlameBreathTimer <= uiDiff) if (m_uiFlameBreathTimer <= uiDiff)
{ {
DoScriptText(SAY_SARTHARION_BREATH, m_creature); DoScriptText(SAY_SARTHARION_BREATH, m_creature);
DoCast(m_creature->getVictim(), HEROIC(SPELL_FLAME_BREATH, SPELL_FLAME_BREATH_H)); DoCast(m_creature->getVictim(), RAID_MODE(SPELL_FLAME_BREATH, SPELL_FLAME_BREATH_H));
m_uiFlameBreathTimer = urand(25000,35000); m_uiFlameBreathTimer = urand(25000,35000);
} }
else else
@@ -439,7 +439,7 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
// Tail Sweep // Tail Sweep
if (m_uiTailSweepTimer <= uiDiff) if (m_uiTailSweepTimer <= uiDiff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_TAIL_LASH, SPELL_TAIL_LASH_H)); DoCast(m_creature->getVictim(), RAID_MODE(SPELL_TAIL_LASH, SPELL_TAIL_LASH_H));
m_uiTailSweepTimer = urand(15000,20000); m_uiTailSweepTimer = urand(15000,20000);
} }
else else
@@ -760,7 +760,7 @@ struct TRINITY_DLL_DECL mob_tenebronAI : public dummy_dragonAI
if (m_uiShadowFissureTimer <= uiDiff) if (m_uiShadowFissureTimer <= uiDiff)
{ {
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE)); DoCast(pTarget, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE));
m_uiShadowFissureTimer = urand(15000,20000); m_uiShadowFissureTimer = urand(15000,20000);
} }
@@ -771,7 +771,7 @@ struct TRINITY_DLL_DECL mob_tenebronAI : public dummy_dragonAI
if (m_uiShadowBreathTimer <= uiDiff) if (m_uiShadowBreathTimer <= uiDiff)
{ {
DoScriptText(SAY_TENEBRON_BREATH, m_creature); DoScriptText(SAY_TENEBRON_BREATH, m_creature);
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); DoCast(m_creature->getVictim(), RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H));
m_uiShadowBreathTimer = urand(20000,25000); m_uiShadowBreathTimer = urand(20000,25000);
} }
else else
@@ -836,7 +836,7 @@ struct TRINITY_DLL_DECL mob_shadronAI : public dummy_dragonAI
if (m_uiShadowFissureTimer <= uiDiff) if (m_uiShadowFissureTimer <= uiDiff)
{ {
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE_H)); DoCast(pTarget, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE_H));
m_uiShadowFissureTimer = urand(15000,20000); m_uiShadowFissureTimer = urand(15000,20000);
} }
@@ -847,7 +847,7 @@ struct TRINITY_DLL_DECL mob_shadronAI : public dummy_dragonAI
if (m_uiShadowBreathTimer <= uiDiff) if (m_uiShadowBreathTimer <= uiDiff)
{ {
DoScriptText(SAY_SHADRON_BREATH, m_creature); DoScriptText(SAY_SHADRON_BREATH, m_creature);
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); DoCast(m_creature->getVictim(), RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H));
m_uiShadowBreathTimer = urand(20000,25000); m_uiShadowBreathTimer = urand(20000,25000);
} }
else else
@@ -906,7 +906,7 @@ struct TRINITY_DLL_DECL mob_vesperonAI : public dummy_dragonAI
if (m_uiShadowFissureTimer <= uiDiff) if (m_uiShadowFissureTimer <= uiDiff)
{ {
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE_H)); DoCast(pTarget, RAID_MODE(SPELL_SHADOW_FISSURE, SPELL_SHADOW_FISSURE_H));
m_uiShadowFissureTimer = urand(15000,20000); m_uiShadowFissureTimer = urand(15000,20000);
} }
@@ -917,7 +917,7 @@ struct TRINITY_DLL_DECL mob_vesperonAI : public dummy_dragonAI
if (m_uiShadowBreathTimer <= uiDiff) if (m_uiShadowBreathTimer <= uiDiff)
{ {
DoScriptText(SAY_VESPERON_BREATH, m_creature); DoScriptText(SAY_VESPERON_BREATH, m_creature);
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H)); DoCast(m_creature->getVictim(), RAID_MODE(SPELL_SHADOW_BREATH, SPELL_SHADOW_BREATH_H));
m_uiShadowBreathTimer = urand(20000,25000); m_uiShadowBreathTimer = urand(20000,25000);
} }
else else
@@ -84,14 +84,12 @@ struct TRINITY_DLL_DECL boss_bjarngrimAI : public ScriptedAI
boss_bjarngrimAI(Creature *pCreature) : ScriptedAI(pCreature) boss_bjarngrimAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
m_uiStance = STANCE_DEFENSIVE; m_uiStance = STANCE_DEFENSIVE;
memset(&m_auiStormforgedLieutenantGUID, 0, sizeof(m_auiStormforgedLieutenantGUID)); memset(&m_auiStormforgedLieutenantGUID, 0, sizeof(m_auiStormforgedLieutenantGUID));
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsHeroic;
bool m_bIsChangingStance; bool m_bIsChangingStance;
uint8 m_uiChargingStatus; uint8 m_uiChargingStatus;
@@ -350,11 +348,9 @@ struct TRINITY_DLL_DECL mob_stormforged_lieutenantAI : public ScriptedAI
mob_stormforged_lieutenantAI(Creature *pCreature) : ScriptedAI(pCreature) mob_stormforged_lieutenantAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsHeroic;
uint32 m_uiArcWeld_Timer; uint32 m_uiArcWeld_Timer;
uint32 m_uiRenewSteel_Timer; uint32 m_uiRenewSteel_Timer;
@@ -398,7 +394,7 @@ struct TRINITY_DLL_DECL mob_stormforged_lieutenantAI : public ScriptedAI
if (Creature* pBjarngrim = m_pInstance->instance->GetCreature(m_pInstance->GetData64(DATA_BJARNGRIM))) if (Creature* pBjarngrim = m_pInstance->instance->GetCreature(m_pInstance->GetData64(DATA_BJARNGRIM)))
{ {
if (pBjarngrim->isAlive()) if (pBjarngrim->isAlive())
DoCast(pBjarngrim, m_bIsHeroic ? SPELL_RENEW_STEEL_H : SPELL_RENEW_STEEL_N); DoCast(pBjarngrim, DUNGEON_MODE(SPELL_RENEW_STEEL_N, SPELL_RENEW_STEEL_H));
} }
} }
m_uiRenewSteel_Timer = 10000 + rand()%4000; m_uiRenewSteel_Timer = 10000 + rand()%4000;
@@ -195,7 +195,7 @@ struct TRINITY_DLL_DECL boss_ionarAI : public ScriptedAI
{ {
if (pSummoned->GetEntry() == NPC_SPARK_OF_IONAR) if (pSummoned->GetEntry() == NPC_SPARK_OF_IONAR)
{ {
pSummoned->CastSpell(pSummoned, HEROIC(SPELL_SPARK_VISUAL_TRIGGER_N,SPELL_SPARK_VISUAL_TRIGGER_H), true); pSummoned->CastSpell(pSummoned, DUNGEON_MODE(SPELL_SPARK_VISUAL_TRIGGER_N,SPELL_SPARK_VISUAL_TRIGGER_H), true);
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
@@ -259,7 +259,7 @@ struct TRINITY_DLL_DECL boss_ionarAI : public ScriptedAI
if (m_uiStaticOverload_Timer <= uiDiff) if (m_uiStaticOverload_Timer <= uiDiff)
{ {
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, HEROIC(SPELL_STATIC_OVERLOAD_N, SPELL_STATIC_OVERLOAD_H)); DoCast(pTarget, DUNGEON_MODE(SPELL_STATIC_OVERLOAD_N, SPELL_STATIC_OVERLOAD_H));
m_uiStaticOverload_Timer = 5000 + rand()%1000; m_uiStaticOverload_Timer = 5000 + rand()%1000;
} }
@@ -268,7 +268,7 @@ struct TRINITY_DLL_DECL boss_ionarAI : public ScriptedAI
if (m_uiBallLightning_Timer <= uiDiff) if (m_uiBallLightning_Timer <= uiDiff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_BALL_LIGHTNING_N, SPELL_BALL_LIGHTNING_H)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_BALL_LIGHTNING_N, SPELL_BALL_LIGHTNING_H));
m_uiBallLightning_Timer = 10000 + rand()%1000; m_uiBallLightning_Timer = 10000 + rand()%1000;
} }
else else
@@ -63,12 +63,10 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
boss_lokenAI(Creature* pCreature) : ScriptedAI(pCreature) boss_lokenAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool m_bIsHeroic;
bool m_bIsAura; bool m_bIsAura;
uint32 m_uiArcLightning_Timer; uint32 m_uiArcLightning_Timer;
@@ -109,7 +107,7 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
if (m_bIsHeroic && EncounterTime <= MAX_ENCOUNTER_TIME) if (IsHeroic() && EncounterTime <= MAX_ENCOUNTER_TIME)
{ {
AchievementEntry const *AchievTimelyDeath = GetAchievementStore()->LookupEntry(ACHIEVEMENT_TIMELY_DEATH); AchievementEntry const *AchievTimelyDeath = GetAchievementStore()->LookupEntry(ACHIEVEMENT_TIMELY_DEATH);
if (AchievTimelyDeath) if (AchievTimelyDeath)
@@ -160,12 +158,11 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
int32 dmg; int32 dmg;
float m_fDist = m_creature->GetExactDist(i->getSource()->GetPositionX(), i->getSource()->GetPositionY(), i->getSource()->GetPositionZ()); float m_fDist = m_creature->GetExactDist(i->getSource()->GetPositionX(), i->getSource()->GetPositionY(), i->getSource()->GetPositionZ());
if (m_fDist <= 1.0f) // Less than 1 yard dmg = DUNGEON_MODE(100, 150); // need to correct damage
dmg = (m_bIsHeroic ? 150 : 100); // need to correct damage if (m_fDist > 1.0f) // Further from 1 yard
else // Further from 1 yard dmg *= m_fDist;
dmg = ((m_bIsHeroic ? 150 : 100) * m_fDist) + (m_bIsHeroic ? 150 : 100); // need to correct damage
m_creature->CastCustomSpell(i->getSource(), (m_bIsHeroic ? 59837 : 52942), &dmg, 0, 0, false); m_creature->CastCustomSpell(i->getSource(), DUNGEON_MODE(52942, 59837), &dmg, 0, 0, false);
} }
} }
m_uiPulsingShockwave_Timer = 2000; m_uiPulsingShockwave_Timer = 2000;
@@ -178,7 +175,7 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
//breaks at movement, can we assume when it's time, this spell is casted and also must stop movement? //breaks at movement, can we assume when it's time, this spell is casted and also must stop movement?
DoCast(m_creature, SPELL_PULSING_SHOCKWAVE_AURA, true); DoCast(m_creature, SPELL_PULSING_SHOCKWAVE_AURA, true);
DoCast(m_creature, m_bIsHeroic ? SPELL_PULSING_SHOCKWAVE_H : SPELL_PULSING_SHOCKWAVE_N); // need core support DoCast(m_creature, DUNGEON_MODE(SPELL_PULSING_SHOCKWAVE_N, SPELL_PULSING_SHOCKWAVE_H)); // need core support
m_bIsAura = true; m_bIsAura = true;
m_uiResumePulsingShockwave_Timer = 0; m_uiResumePulsingShockwave_Timer = 0;
} }
@@ -200,10 +197,10 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
{ {
DoScriptText(RAND(SAY_NOVA_1,SAY_NOVA_2,SAY_NOVA_3), m_creature); DoScriptText(RAND(SAY_NOVA_1,SAY_NOVA_2,SAY_NOVA_3), m_creature);
DoScriptText(EMOTE_NOVA, m_creature); DoScriptText(EMOTE_NOVA, m_creature);
DoCast(m_creature, m_bIsHeroic ? SPELL_LIGHTNING_NOVA_H : SPELL_LIGHTNING_NOVA_N); DoCast(m_creature, DUNGEON_MODE(SPELL_LIGHTNING_NOVA_N, SPELL_LIGHTNING_NOVA_H));
m_bIsAura = false; m_bIsAura = false;
m_uiResumePulsingShockwave_Timer = (m_bIsHeroic ? 4000 : 5000); // Pause Pulsing Shockwave aura m_uiResumePulsingShockwave_Timer = DUNGEON_MODE(5000, 4000); // Pause Pulsing Shockwave aura
m_uiLightningNova_Timer = 20000 + rand()%1000; m_uiLightningNova_Timer = 20000 + rand()%1000;
} }
else else
@@ -77,14 +77,12 @@ struct TRINITY_DLL_DECL boss_volkhanAI : public ScriptedAI
boss_volkhanAI(Creature *pCreature) : ScriptedAI(pCreature) boss_volkhanAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
std::list<uint64> m_lGolemGUIDList; std::list<uint64> m_lGolemGUIDList;
bool m_bIsHeroic;
bool m_bHasTemper; bool m_bHasTemper;
bool m_bIsStriking; bool m_bIsStriking;
bool m_bCanShatterGolem; bool m_bCanShatterGolem;
@@ -145,7 +143,7 @@ struct TRINITY_DLL_DECL boss_volkhanAI : public ScriptedAI
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_VOLKHAN, DONE); m_pInstance->SetData(TYPE_VOLKHAN, DONE);
if (HeroicMode && GolemsShattered < 5) if (IsHeroic() && GolemsShattered < 5)
{ {
AchievementEntry const *AchievShatterResistant = GetAchievementStore()->LookupEntry(ACHIEVEMENT_SHATTER_RESISTANT); AchievementEntry const *AchievShatterResistant = GetAchievementStore()->LookupEntry(ACHIEVEMENT_SHATTER_RESISTANT);
if (AchievShatterResistant) if (AchievShatterResistant)
@@ -195,7 +193,7 @@ struct TRINITY_DLL_DECL boss_volkhanAI : public ScriptedAI
// only shatter brittle golems // only shatter brittle golems
if (pTemp->isAlive() && pTemp->GetEntry() == NPC_BRITTLE_GOLEM) if (pTemp->isAlive() && pTemp->GetEntry() == NPC_BRITTLE_GOLEM)
{ {
pTemp->CastSpell(pTemp, m_bIsHeroic ? SPELL_SHATTER_H : SPELL_SHATTER_N, false); pTemp->CastSpell(pTemp, DUNGEON_MODE(SPELL_SHATTER_N, SPELL_SHATTER_H), false);
GolemsShattered += 1; GolemsShattered += 1;
} }
} }
@@ -218,7 +216,7 @@ struct TRINITY_DLL_DECL boss_volkhanAI : public ScriptedAI
pSummoned->AI()->AttackStart(pTarget); pSummoned->AI()->AttackStart(pTarget);
//why healing when just summoned? //why healing when just summoned?
pSummoned->CastSpell(pSummoned, m_bIsHeroic ? SPELL_HEAT_H : SPELL_HEAT_N, false, NULL, NULL, m_creature->GetGUID()); pSummoned->CastSpell(pSummoned, DUNGEON_MODE(SPELL_HEAT_N, SPELL_HEAT_H), false, NULL, NULL, m_creature->GetGUID());
} }
} }
@@ -257,7 +255,7 @@ struct TRINITY_DLL_DECL boss_volkhanAI : public ScriptedAI
DoScriptText(RAND(SAY_STOMP_1,SAY_STOMP_2), m_creature); DoScriptText(RAND(SAY_STOMP_1,SAY_STOMP_2), m_creature);
DoCast(m_creature, m_bIsHeroic ? SPELL_SHATTERING_STOMP_H : SPELL_SHATTERING_STOMP_N); DoCast(m_creature, DUNGEON_MODE(SPELL_SHATTERING_STOMP_N, SPELL_SHATTERING_STOMP_H));
DoScriptText(EMOTE_SHATTER, m_creature); DoScriptText(EMOTE_SHATTER, m_creature);
@@ -369,10 +367,8 @@ struct TRINITY_DLL_DECL mob_molten_golemAI : public ScriptedAI
{ {
mob_molten_golemAI(Creature *pCreature) : ScriptedAI(pCreature) mob_molten_golemAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
} }
bool m_bIsHeroic;
bool m_bIsFrozen; bool m_bIsFrozen;
uint32 m_uiBlast_Timer; uint32 m_uiBlast_Timer;
@@ -445,7 +441,7 @@ struct TRINITY_DLL_DECL mob_molten_golemAI : public ScriptedAI
if (m_uiImmolation_Timer <= uiDiff) if (m_uiImmolation_Timer <= uiDiff)
{ {
DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_IMMOLATION_STRIKE_H : SPELL_IMMOLATION_STRIKE_N); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_IMMOLATION_STRIKE_N, SPELL_IMMOLATION_STRIKE_H));
m_uiImmolation_Timer = 5000; m_uiImmolation_Timer = 5000;
} }
else else
@@ -79,7 +79,7 @@ struct TRINITY_DLL_DECL boss_krystallusAI : public ScriptedAI
if (uiBoulderTossTimer <= diff) if (uiBoulderTossTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_BOULDER_TOSS, H_SPELL_BOULDER_TOSS)); DoCast(pTarget, DUNGEON_MODE(SPELL_BOULDER_TOSS, H_SPELL_BOULDER_TOSS));
uiBoulderTossTimer = 9000 + rand()%6000; uiBoulderTossTimer = 9000 + rand()%6000;
} else uiBoulderTossTimer -= diff; } else uiBoulderTossTimer -= diff;
@@ -92,7 +92,7 @@ struct TRINITY_DLL_DECL boss_krystallusAI : public ScriptedAI
if (uiStompTimer <= diff) if (uiStompTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_STOMP, H_SPELL_STOMP)); DoCast(m_creature, DUNGEON_MODE(SPELL_STOMP, H_SPELL_STOMP));
uiStompTimer = 20000 + rand()%9000; uiStompTimer = 20000 + rand()%9000;
} else uiStompTimer -= diff; } else uiStompTimer -= diff;
@@ -108,7 +108,7 @@ struct TRINITY_DLL_DECL boss_krystallusAI : public ScriptedAI
{ {
if (uiShatterTimer <= diff) if (uiShatterTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_SHATTER, H_SPELL_SHATTER)); DoCast(m_creature, DUNGEON_MODE(SPELL_SHATTER, H_SPELL_SHATTER));
bIsSlam = false; bIsSlam = false;
} else uiShatterTimer -= diff; } else uiShatterTimer -= diff;
} }
@@ -44,11 +44,9 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
boss_maiden_of_griefAI(Creature *c) : ScriptedAI(c) boss_maiden_of_griefAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = m_creature->GetInstanceData(); pInstance = m_creature->GetInstanceData();
IsHeroic = m_creature->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool IsHeroic;
uint32 PartingSorrowTimer; uint32 PartingSorrowTimer;
uint32 StormOfGriefTimer; uint32 StormOfGriefTimer;
@@ -92,7 +90,7 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
if (pInstance->GetData(DATA_MAIDEN_OF_GRIEF_EVENT) == IN_PROGRESS) if (pInstance->GetData(DATA_MAIDEN_OF_GRIEF_EVENT) == IN_PROGRESS)
AchievTimer += diff; AchievTimer += diff;
if(IsHeroic) if (IsHeroic())
{ {
if (PartingSorrowTimer <= diff) if (PartingSorrowTimer <= diff)
{ {
@@ -107,7 +105,7 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
if (StormOfGriefTimer <= diff) if (StormOfGriefTimer <= diff)
{ {
DoCast(m_creature->getVictim(), IsHeroic ? SPELL_STORM_OF_GRIEF_H : SPELL_STORM_OF_GRIEF_N, true); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_STORM_OF_GRIEF_N, SPELL_STORM_OF_GRIEF_H), true);
StormOfGriefTimer = 15000 + rand()%5000; StormOfGriefTimer = 15000 + rand()%5000;
} else StormOfGriefTimer -= diff; } else StormOfGriefTimer -= diff;
@@ -115,7 +113,7 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
{ {
DoResetThreat(); DoResetThreat();
DoScriptText(SAY_STUN, m_creature); DoScriptText(SAY_STUN, m_creature);
DoCast(m_creature, IsHeroic ? SPELL_SHOCK_OF_SORROW_H : SPELL_SHOCK_OF_SORROW_N); DoCast(m_creature, DUNGEON_MODE(SPELL_SHOCK_OF_SORROW_N, SPELL_SHOCK_OF_SORROW_H));
ShockOfSorrowTimer = 20000 + rand()%10000; ShockOfSorrowTimer = 20000 + rand()%10000;
} else ShockOfSorrowTimer -= diff; } else ShockOfSorrowTimer -= diff;
@@ -123,10 +121,10 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
{ {
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if(pTarget) if (pTarget)
DoCast(pTarget, IsHeroic ? SPELL_PILLAR_OF_WOE_H : SPELL_PILLAR_OF_WOE_N); DoCast(pTarget, DUNGEON_MODE(SPELL_PILLAR_OF_WOE_N, SPELL_PILLAR_OF_WOE_H));
else else
DoCast(m_creature->getVictim(), IsHeroic ? SPELL_PILLAR_OF_WOE_H : SPELL_PILLAR_OF_WOE_N); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_PILLAR_OF_WOE_N, SPELL_PILLAR_OF_WOE_H));
PillarOfWoeTimer = 5000 + rand()%20000; PillarOfWoeTimer = 5000 + rand()%20000;
} else PillarOfWoeTimer -= diff; } else PillarOfWoeTimer -= diff;
@@ -143,7 +141,7 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
AchievementEntry const *AchievGoodGrief = GetAchievementStore()->LookupEntry(ACHIEVEMENT_GOOD_GRIEF); AchievementEntry const *AchievGoodGrief = GetAchievementStore()->LookupEntry(ACHIEVEMENT_GOOD_GRIEF);
Map* pMap = m_creature->GetMap(); Map* pMap = m_creature->GetMap();
if (HeroicMode && AchievTimer < 60000 && pMap && pMap->IsDungeon() && AchievGoodGrief) if (IsHeroic() && AchievTimer < 60000 && pMap && pMap->IsDungeon() && AchievGoodGrief)
{ {
Map::PlayerList const &players = pMap->GetPlayers(); Map::PlayerList const &players = pMap->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
@@ -130,19 +130,19 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
if (uiChainLightningTimer <= diff) if (uiChainLightningTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_CHAIN_LIGHTING, H_SPELL_CHAIN_LIGHTING)); DoCast(pTarget, DUNGEON_MODE(SPELL_CHAIN_LIGHTING, H_SPELL_CHAIN_LIGHTING));
uiChainLightningTimer = 10000 + rand()%5000; uiChainLightningTimer = 10000 + rand()%5000;
} else uiChainLightningTimer -= diff; } else uiChainLightningTimer -= diff;
if (uiLightningShieldTimer <= diff) if (uiLightningShieldTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_LIGHTING_SHIELD, H_SPELL_LIGHTING_SHIELD)); DoCast(m_creature, DUNGEON_MODE(SPELL_LIGHTING_SHIELD, H_SPELL_LIGHTING_SHIELD));
uiLightningShieldTimer -= diff; uiLightningShieldTimer -= diff;
} }
if (uiStaticChargeTimer <= diff) if (uiStaticChargeTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_STATIC_CHARGE, H_SPELL_STATIC_CHARGE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_STATIC_CHARGE, H_SPELL_STATIC_CHARGE));
uiStaticChargeTimer = 20000 + rand()%5000; uiStaticChargeTimer = 20000 + rand()%5000;
} uiStaticChargeTimer -= diff; } uiStaticChargeTimer -= diff;
@@ -150,7 +150,7 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
{ {
if (m_creature->IsNonMeleeSpellCasted(false)) if (m_creature->IsNonMeleeSpellCasted(false))
m_creature->InterruptNonMeleeSpells(false); m_creature->InterruptNonMeleeSpells(false);
DoCast(m_creature, HEROIC(SPELL_LIGHTING_RING, H_SPELL_LIGHTING_RING)); DoCast(m_creature, DUNGEON_MODE(SPELL_LIGHTING_RING, H_SPELL_LIGHTING_RING));
uiLightningRingTimer = 30000 + rand()%5000; uiLightningRingTimer = 30000 + rand()%5000;
} else uiLightningRingTimer -= diff; } else uiLightningRingTimer -= diff;
@@ -195,7 +195,7 @@ struct TRINITY_DLL_DECL boss_sjonnirAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
pInstance->SetData(DATA_SJONNIR_EVENT, DONE); pInstance->SetData(DATA_SJONNIR_EVENT, DONE);
if (HeroicMode && uiKilledIronSludges > 4) if (IsHeroic() && uiKilledIronSludges > 4)
pInstance->DoCompleteAchievement(ACHIEV_ABUSE_THE_OOZE); pInstance->DoCompleteAchievement(ACHIEV_ABUSE_THE_OOZE);
} }
} }
@@ -184,7 +184,7 @@ struct TRINITY_DLL_DECL mob_tribuna_controllerAI : public ScriptedAI
if (!lKaddrakGUIDList.empty()) if (!lKaddrakGUIDList.empty())
for (std::list<Creature*>::iterator itr = lKaddrakGUIDList.begin(); itr != lKaddrakGUIDList.end(); ++itr) for (std::list<Creature*>::iterator itr = lKaddrakGUIDList.begin(); itr != lKaddrakGUIDList.end(); ++itr)
if ((*itr)->isAlive()) if ((*itr)->isAlive())
(*itr)->CastSpell(pTarget, HEROIC(SPELL_GLARE_OF_THE_TRIBUNAL, H_SPELL_GLARE_OF_THE_TRIBUNAL), true); (*itr)->CastSpell(pTarget, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, H_SPELL_GLARE_OF_THE_TRIBUNAL), true);
uiKaddrakEncounterTimer = 1500; uiKaddrakEncounterTimer = 1500;
} else uiKaddrakEncounterTimer -= diff; } else uiKaddrakEncounterTimer -= diff;
} }
@@ -198,7 +198,7 @@ struct TRINITY_DLL_DECL mob_tribuna_controllerAI : public ScriptedAI
{ {
pSummon->SetDisplayId(11686); pSummon->SetDisplayId(11686);
pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pSummon->CastSpell(pTarget, HEROIC(SPELL_DARK_MATTER, H_SPELL_DARK_MATTER), true); pSummon->CastSpell(pTarget, DUNGEON_MODE(SPELL_DARK_MATTER, H_SPELL_DARK_MATTER), true);
} }
} }
uiMarnakEncounterTimer = 30000 + rand()%1000; uiMarnakEncounterTimer = 30000 + rand()%1000;
@@ -214,7 +214,7 @@ struct TRINITY_DLL_DECL mob_tribuna_controllerAI : public ScriptedAI
{ {
pSummon->SetDisplayId(11686); pSummon->SetDisplayId(11686);
pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pSummon->CastSpell(pTarget, HEROIC(SPELL_SEARING_GAZE, H_SPELL_SEARING_GAZE), true); pSummon->CastSpell(pTarget, DUNGEON_MODE(SPELL_SEARING_GAZE, H_SPELL_SEARING_GAZE), true);
} }
} }
uiAbedneumEncounterTimer = 30000 + rand()%1000; uiAbedneumEncounterTimer = 30000 + rand()%1000;
@@ -310,7 +310,7 @@ struct TRINITY_DLL_DECL npc_brann_hosAI : public npc_escortAI
{ {
case 1: case 1:
{ {
uint32 uiSpawnNumber = (HeroicMode ? 3 : 2); uint32 uiSpawnNumber = DUNGEON_MODE(2,3);
for (uint8 i = 0; i < uiSpawnNumber; ++i) for (uint8 i = 0; i < uiSpawnNumber; ++i)
m_creature->SummonCreature(CREATURE_DARK_RUNE_PROTECTOR, SpawnLocations[0].x, SpawnLocations[0].y, SpawnLocations[0].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000); m_creature->SummonCreature(CREATURE_DARK_RUNE_PROTECTOR, SpawnLocations[0].x, SpawnLocations[0].y, SpawnLocations[0].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
m_creature->SummonCreature(CREATURE_DARK_RUNE_STORMCALLER, SpawnLocations[0].x, SpawnLocations[0].y, SpawnLocations[0].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000); m_creature->SummonCreature(CREATURE_DARK_RUNE_STORMCALLER, SpawnLocations[0].x, SpawnLocations[0].y, SpawnLocations[0].z, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
@@ -132,7 +132,7 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
void EnterCombat(Unit *who) void EnterCombat(Unit *who)
{ {
DoZoneInCombat(); DoZoneInCombat();
DoCast(m_creature, HEROIC(SPELL_HIGH_VOLTAGE, SPELL_HIGH_VOLTAGE_H)); DoCast(m_creature, RAID_MODE(SPELL_HIGH_VOLTAGE, SPELL_HIGH_VOLTAGE_H));
events.ScheduleEvent(EVENT_ENRAGE, 900000); events.ScheduleEvent(EVENT_ENRAGE, 900000);
UpdatePhase(); UpdatePhase();
} }
@@ -200,19 +200,19 @@ struct TRINITY_DLL_DECL boss_steelbreakerAI : public ScriptedAI
DoCast(SPELL_BERSERK); DoCast(SPELL_BERSERK);
break; break;
case EVENT_FUSION_PUNCH: case EVENT_FUSION_PUNCH:
DoCast(me->getVictim(), HEROIC(SPELL_FUSION_PUNCH_H, SPELL_FUSION_PUNCH)); DoCast(me->getVictim(), RAID_MODE(SPELL_FUSION_PUNCH_H, SPELL_FUSION_PUNCH));
events.ScheduleEvent(EVENT_FUSION_PUNCH, 13000 + (rand()%9)*1000); events.ScheduleEvent(EVENT_FUSION_PUNCH, 13000 + (rand()%9)*1000);
break; break;
case EVENT_STATIC_DISRUPTION: case EVENT_STATIC_DISRUPTION:
{ {
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM); Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
DoCast(pTarget, HEROIC(SPELL_STATIC_DISRUPTION_H, SPELL_STATIC_DISRUPTION)); DoCast(pTarget, RAID_MODE(SPELL_STATIC_DISRUPTION_H, SPELL_STATIC_DISRUPTION));
events.ScheduleEvent(EVENT_STATIC_DISRUPTION, 20000 + (rand()%20)*1000); events.ScheduleEvent(EVENT_STATIC_DISRUPTION, 20000 + (rand()%20)*1000);
} }
break; break;
case EVENT_OVERWHELMING_POWER: case EVENT_OVERWHELMING_POWER:
DoCast(me->getVictim(), HEROIC(SPELL_OVERWHELMING_POWER, SPELL_OVERWHELMING_POWER_H)); DoCast(me->getVictim(), RAID_MODE(SPELL_OVERWHELMING_POWER, SPELL_OVERWHELMING_POWER_H));
events.ScheduleEvent(EVENT_OVERWHELMING_POWER, (HeroicMode) ? 35000 : 60000); events.ScheduleEvent(EVENT_OVERWHELMING_POWER, RAID_MODE(60000, 35000));
break; break;
} }
} }
@@ -315,7 +315,7 @@ struct TRINITY_DLL_DECL boss_runemaster_molgeimAI : public ScriptedAI
} }
break; break;
case EVENT_SHIELD_OF_RUNES: case EVENT_SHIELD_OF_RUNES:
DoCast(m_creature, HEROIC(SPELL_SHIELD_OF_RUNES, SPELL_SHIELD_OF_RUNES_H)); DoCast(m_creature, RAID_MODE(SPELL_SHIELD_OF_RUNES, SPELL_SHIELD_OF_RUNES_H));
events.ScheduleEvent(EVENT_SHIELD_OF_RUNES, 27000+ (rand()%7)*1000); events.ScheduleEvent(EVENT_SHIELD_OF_RUNES, 27000+ (rand()%7)*1000);
break; break;
case EVENT_RUNE_OF_DEATH: case EVENT_RUNE_OF_DEATH:
@@ -362,7 +362,7 @@ struct TRINITY_DLL_DECL mob_lightning_elementalAI : public ScriptedAI
if(m_creature->IsWithinMeleeRange(Target)) if(m_creature->IsWithinMeleeRange(Target))
{ {
DoCast(Target, HEROIC(SPELL_LIGHTNING_BLAST, SPELL_LIGHTNING_BLAST_H)); DoCast(Target, RAID_MODE(SPELL_LIGHTNING_BLAST, SPELL_LIGHTNING_BLAST_H));
m_creature->Kill(m_creature); // hack until spell works m_creature->Kill(m_creature); // hack until spell works
} }
@@ -479,20 +479,20 @@ struct TRINITY_DLL_DECL boss_stormcaller_brundirAI : public ScriptedAI
case EVENT_CHAIN_LIGHTNING: case EVENT_CHAIN_LIGHTNING:
{ {
Unit* Target = SelectUnit(SELECT_TARGET_RANDOM,0); Unit* Target = SelectUnit(SELECT_TARGET_RANDOM,0);
DoCast(Target, HEROIC(SPELL_CHAIN_LIGHTNING_N , SPELL_CHAIN_LIGHTNING_H)); DoCast(Target, RAID_MODE(SPELL_CHAIN_LIGHTNING_N , SPELL_CHAIN_LIGHTNING_H));
events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 9000+ (rand()%8)*1000); events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 9000+ (rand()%8)*1000);
} }
break; break;
case EVENT_OVERLOAD: case EVENT_OVERLOAD:
DoCast(HEROIC(SPELL_OVERLOAD , SPELL_OVERLOAD_H)); DoCast(RAID_MODE(SPELL_OVERLOAD , SPELL_OVERLOAD_H));
events.ScheduleEvent(EVENT_OVERLOAD, 60000+ (rand()%65)*1000); events.ScheduleEvent(EVENT_OVERLOAD, 60000+ (rand()%65)*1000);
break; break;
case EVENT_LIGHTNING_WHIRL: case EVENT_LIGHTNING_WHIRL:
DoCast(HEROIC(SPELL_LIGHTNING_WHIRL , SPELL_LIGHTNING_WHIRL_H)); DoCast(RAID_MODE(SPELL_LIGHTNING_WHIRL , SPELL_LIGHTNING_WHIRL_H));
events.ScheduleEvent(EVENT_LIGHTNING_WHIRL, 20000+ (rand()%20)*1000); events.ScheduleEvent(EVENT_LIGHTNING_WHIRL, 20000+ (rand()%20)*1000);
break; break;
case EVENT_LIGHTNING_TENDRILS: case EVENT_LIGHTNING_TENDRILS:
DoCast(HEROIC(SPELL_LIGHTNING_TENDRILS, SPELL_LIGHTNING_TENDRILS_H)); DoCast(RAID_MODE(SPELL_LIGHTNING_TENDRILS, SPELL_LIGHTNING_TENDRILS_H));
events.DelayEvents(15000, 5000); events.DelayEvents(15000, 5000);
DoResetThreat(); DoResetThreat();
break; break;
@@ -20,14 +20,14 @@
#include "ulduar.h" #include "ulduar.h"
#include "Vehicle.h" #include "Vehicle.h"
#define SPELL_ARM_DEAD_DAMAGE HEROIC(63629,63979) #define SPELL_ARM_DEAD_DAMAGE RAID_MODE(63629,63979)
#define SPELL_TWO_ARM_SMASH HEROIC(63356,64003) #define SPELL_TWO_ARM_SMASH RAID_MODE(63356,64003)
#define SPELL_ONE_ARM_SMASH HEROIC(63573,64006) #define SPELL_ONE_ARM_SMASH RAID_MODE(63573,64006)
#define SPELL_STONE_SHOUT HEROIC(63716,64005) #define SPELL_STONE_SHOUT RAID_MODE(63716,64005)
#define SPELL_PETRIFY_BREATH HEROIC(62030,63980) #define SPELL_PETRIFY_BREATH RAID_MODE(62030,63980)
#define SPELL_STONE_GRIP HEROIC(62166,63981) #define SPELL_STONE_GRIP RAID_MODE(62166,63981)
#define SPELL_ARM_SWEEP HEROIC(63766,63983) #define SPELL_ARM_SWEEP RAID_MODE(63766,63983)
enum Events enum Events
{ {
@@ -185,7 +185,7 @@ struct TRINITY_DLL_DECL boss_razorscaleAI : public BossAI
{ {
DoScriptText(EMOTE_BREATH, m_creature); DoScriptText(EMOTE_BREATH, m_creature);
std::list<Unit*> pTargets; std::list<Unit*> pTargets;
SelectTargetList(pTargets, HEROIC(3,9), SELECT_TARGET_RANDOM, 100, true); SelectTargetList(pTargets, RAID_MODE(3,9), SELECT_TARGET_RANDOM, 100, true);
uint8 i = 0; uint8 i = 0;
for (std::list<Unit*>::iterator itr = pTargets.begin(); itr != pTargets.end();) for (std::list<Unit*>::iterator itr = pTargets.begin(); itr != pTargets.end();)
{ {
@@ -194,7 +194,7 @@ struct TRINITY_DLL_DECL boss_razorscaleAI : public BossAI
DoCast(*itr, SPELL_FLAMEBUFFET, true); DoCast(*itr, SPELL_FLAMEBUFFET, true);
++i; ++i;
} }
if (++itr == pTargets.end() || i == HEROIC(3,9)) if (++itr == pTargets.end() || i == RAID_MODE(3,9))
{ {
AttackStart(*--itr); // seems to attack targets randomly during perma-ground phase.. AttackStart(*--itr); // seems to attack targets randomly during perma-ground phase..
break; break;
@@ -73,12 +73,10 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI
boss_ingvar_the_plundererAI(Creature *c) : ScriptedAI(c) boss_ingvar_the_plundererAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
bool undead; bool undead;
bool event_inProgress; bool event_inProgress;
@@ -204,7 +202,7 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI
if (!wait_Timer) if (!wait_Timer)
{ {
if (undead) if (undead)
DoCast(m_creature->getVictim(), HEROIC(SPELL_WOE_STRIKE, H_SPELL_WOE_STRIKE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_WOE_STRIKE, H_SPELL_WOE_STRIKE));
else else
DoCast(m_creature->getVictim(), SPELL_CLEAVE); DoCast(m_creature->getVictim(), SPELL_CLEAVE);
Cleave_Timer = rand()%5000 + 2000; Cleave_Timer = rand()%5000 + 2000;
@@ -220,7 +218,7 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI
if (undead) if (undead)
DoCast(m_creature->getVictim(), SPELL_DARK_SMASH); DoCast(m_creature->getVictim(), SPELL_DARK_SMASH);
else else
DoCast(m_creature->getVictim(), HEROIC(SPELL_SMASH, H_SPELL_SMASH)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SMASH, H_SPELL_SMASH));
Smash_Timer = 10000; Smash_Timer = 10000;
wait_Timer = 5000; wait_Timer = 5000;
@@ -231,7 +229,7 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI
{ {
if (Enrage_Timer <= diff) if (Enrage_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_ENRAGE, H_SPELL_ENRAGE)); DoCast(m_creature, DUNGEON_MODE(SPELL_ENRAGE, H_SPELL_ENRAGE));
Enrage_Timer = 10000; Enrage_Timer = 10000;
} else Enrage_Timer -= diff; } else Enrage_Timer -= diff;
} else // In Undead form used to summon weapon } else // In Undead form used to summon weapon
@@ -258,9 +256,9 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI
if (!wait_Timer) if (!wait_Timer)
{ {
if (undead) if (undead)
DoCast(m_creature, HEROIC(SPELL_DREADFUL_ROAR, H_SPELL_DREADFUL_ROAR)); DoCast(m_creature, DUNGEON_MODE(SPELL_DREADFUL_ROAR, H_SPELL_DREADFUL_ROAR));
else else
DoCast(m_creature, HEROIC(SPELL_STAGGERING_ROAR, H_SPELL_STAGGERING_ROAR)); DoCast(m_creature, DUNGEON_MODE(SPELL_STAGGERING_ROAR, H_SPELL_STAGGERING_ROAR));
Roar_Timer = 10000; Roar_Timer = 10000;
wait_Timer = 5000; wait_Timer = 5000;
@@ -398,10 +396,8 @@ struct TRINITY_DLL_DECL mob_ingvar_throw_dummyAI : public ScriptedAI
{ {
mob_ingvar_throw_dummyAI(Creature *c) : ScriptedAI(c) mob_ingvar_throw_dummyAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 Despawn_Timer; uint32 Despawn_Timer;
void Reset() void Reset()
@@ -409,7 +405,7 @@ struct TRINITY_DLL_DECL mob_ingvar_throw_dummyAI : public ScriptedAI
Unit *pTarget = m_creature->FindNearestCreature(ENTRY_THROW_TARGET,50); Unit *pTarget = m_creature->FindNearestCreature(ENTRY_THROW_TARGET,50);
if (pTarget) if (pTarget)
{ {
DoCast(m_creature, HEROIC(SPELL_SHADOW_AXE_DAMAGE, H_SPELL_SHADOW_AXE_DAMAGE)); DoCast(m_creature, DUNGEON_MODE(SPELL_SHADOW_AXE_DAMAGE, H_SPELL_SHADOW_AXE_DAMAGE));
float x,y,z; float x,y,z;
pTarget->GetPosition(x,y,z); pTarget->GetPosition(x,y,z);
m_creature->GetMotionMaster()->MovePoint(0,x,y,z); m_creature->GetMotionMaster()->MovePoint(0,x,y,z);
@@ -106,7 +106,6 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI
boss_kelesethAI(Creature *c) : ScriptedAI(c) boss_kelesethAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
Heroic = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
@@ -117,7 +116,6 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI
uint32 ShadowboltTimer; uint32 ShadowboltTimer;
uint64 SkeletonGUID[5]; uint64 SkeletonGUID[5];
bool Skeletons; bool Skeletons;
bool Heroic;
bool RespawnSkeletons; bool RespawnSkeletons;
void Reset() void Reset()
@@ -145,7 +143,7 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
if (Heroic && !ShatterFrostTomb) if (IsHeroic() && !ShatterFrostTomb)
{ {
AchievementEntry const *AchievOnTheRocks = GetAchievementStore()->LookupEntry(ACHIEVEMENT_ON_THE_ROCKS); AchievementEntry const *AchievOnTheRocks = GetAchievementStore()->LookupEntry(ACHIEVEMENT_ON_THE_ROCKS);
if (AchievOnTheRocks) if (AchievOnTheRocks)
@@ -188,7 +186,7 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI
{ {
Unit *pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 0); Unit *pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 0);
if (pTarget && pTarget->isAlive() && pTarget->GetTypeId() == TYPEID_PLAYER) if (pTarget && pTarget->isAlive() && pTarget->GetTypeId() == TYPEID_PLAYER)
m_creature->CastSpell(pTarget, HEROIC(SPELL_SHADOWBOLT, SPELL_SHADOWBOLT_HEROIC), true); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_SHADOWBOLT, SPELL_SHADOWBOLT_HEROIC), true);
ShadowboltTimer = 10000; ShadowboltTimer = 10000;
} else ShadowboltTimer -= diff; } else ShadowboltTimer -= diff;
@@ -63,13 +63,11 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI
boss_skarvald_the_constructorAI(Creature *c) : ScriptedAI(c) boss_skarvald_the_constructorAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool ghost; bool ghost;
bool HeroicMode;
uint32 Charge_Timer; uint32 Charge_Timer;
uint32 StoneStrike_Timer; uint32 StoneStrike_Timer;
uint32 Response_Timer; uint32 Response_Timer;
@@ -208,13 +206,11 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
boss_dalronn_the_controllerAI(Creature *c) : ScriptedAI(c) boss_dalronn_the_controllerAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool ghost; bool ghost;
bool HeroicMode;
uint32 ShadowBolt_Timer; uint32 ShadowBolt_Timer;
uint32 Debilitate_Timer; uint32 Debilitate_Timer;
uint32 Summon_Timer; uint32 Summon_Timer;
@@ -344,7 +340,7 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
{ {
if (!m_creature->IsNonMeleeSpellCasted(false)) if (!m_creature->IsNonMeleeSpellCasted(false))
{ {
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0),HEROIC(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT)); DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
ShadowBolt_Timer = 1000; ShadowBolt_Timer = 1000;
} }
} else ShadowBolt_Timer -= diff; } else ShadowBolt_Timer -= diff;
@@ -358,7 +354,7 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI
} }
} else Debilitate_Timer -= diff; } else Debilitate_Timer -= diff;
if (HeroicMode) if (IsHeroic())
if (Summon_Timer <= diff) if (Summon_Timer <= diff)
{ {
DoCast(m_creature, H_SPELL_SUMMON_SKELETONS); DoCast(m_creature, H_SPELL_SUMMON_SKELETONS);
@@ -164,13 +164,13 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
if (uiImpaleTimer <= diff) if (uiImpaleTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_IMPALE, H_SPELL_IMPALE)); DoCast(pTarget, DUNGEON_MODE(SPELL_IMPALE, H_SPELL_IMPALE));
uiImpaleTimer = urand(8000,12000); uiImpaleTimer = urand(8000,12000);
} else uiImpaleTimer -= diff; } else uiImpaleTimer -= diff;
if (uiWhiteringRoarTimer <= diff) if (uiWhiteringRoarTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_WITHERING_ROAR, H_SPELL_WITHERING_ROAR)); DoCast(m_creature, DUNGEON_MODE(SPELL_WITHERING_ROAR, H_SPELL_WITHERING_ROAR));
uiWhiteringRoarTimer = urand(8000,12000); uiWhiteringRoarTimer = urand(8000,12000);
} else uiWhiteringRoarTimer -= diff; } else uiWhiteringRoarTimer -= diff;
@@ -200,7 +200,7 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
m_creature->SummonCreature(MOB_STASIS_CONTROLLER,moveLocs[5].x,moveLocs[5].y,moveLocs[5].z,0,TEMPSUMMON_CORPSE_DESPAWN); m_creature->SummonCreature(MOB_STASIS_CONTROLLER,moveLocs[5].x,moveLocs[5].y,moveLocs[5].z,0,TEMPSUMMON_CORPSE_DESPAWN);
} }
Phase move = PHASE_NONE; Phase move = PHASE_NONE;
if (AddCount >= HEROIC(2,4)) if (AddCount >= DUNGEON_MODE(2,4))
move = PHASE_GORTOK_PALEHOOF; move = PHASE_GORTOK_PALEHOOF;
else else
{ {
@@ -290,7 +290,7 @@ struct TRINITY_DLL_DECL mob_ravenous_furbolgAI : public ScriptedAI
if (uiChainLightingTimer <= diff) if (uiChainLightingTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_CHAIN_LIGHTING, H_SPELL_CHAIN_LIGHTING)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_CHAIN_LIGHTING, H_SPELL_CHAIN_LIGHTING));
uiChainLightingTimer = 5000 + rand()%5000; uiChainLightingTimer = 5000 + rand()%5000;
} else uiChainLightingTimer -= diff; } else uiChainLightingTimer -= diff;
@@ -396,7 +396,7 @@ struct TRINITY_DLL_DECL mob_frenzied_worgenAI : public ScriptedAI
if (uiMortalWoundTimer <= diff) if (uiMortalWoundTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_MORTAL_WOUND, H_SPELL_MORTAL_WOUND)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MORTAL_WOUND, H_SPELL_MORTAL_WOUND));
uiMortalWoundTimer = 3000 + rand()%4000; uiMortalWoundTimer = 3000 + rand()%4000;
} else uiMortalWoundTimer -= diff; } else uiMortalWoundTimer -= diff;
@@ -511,14 +511,14 @@ struct TRINITY_DLL_DECL mob_ferocious_rhinoAI : public ScriptedAI
if (uiGoreTimer <= diff) if (uiGoreTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_GORE, H_SPELL_GORE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_GORE, H_SPELL_GORE));
uiGoreTimer = 13000 + rand()%4000; uiGoreTimer = 13000 + rand()%4000;
} else uiGoreTimer -= diff; } else uiGoreTimer -= diff;
if (uiGrievousWoundTimer <= diff) if (uiGrievousWoundTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_GRIEVOUS_WOUND, H_SPELL_GRIEVOUS_WOUND)); DoCast(pTarget, DUNGEON_MODE(SPELL_GRIEVOUS_WOUND, H_SPELL_GRIEVOUS_WOUND));
uiGrievousWoundTimer = 18000 + rand()%4000; uiGrievousWoundTimer = 18000 + rand()%4000;
} else uiGrievousWoundTimer -= diff; } else uiGrievousWoundTimer -= diff;
@@ -625,14 +625,14 @@ struct TRINITY_DLL_DECL mob_massive_jormungarAI : public ScriptedAI
if (uiAcidSplatterTimer <= diff) if (uiAcidSplatterTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_POISON_BREATH, H_SPELL_POISON_BREATH)); DoCast(m_creature, DUNGEON_MODE(SPELL_POISON_BREATH, H_SPELL_POISON_BREATH));
uiAcidSplatterTimer = 10000 + rand()%4000; uiAcidSplatterTimer = 10000 + rand()%4000;
} else uiAcidSplatterTimer -= diff; } else uiAcidSplatterTimer -= diff;
if (uiPoisonBreathTimer <= diff) if (uiPoisonBreathTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_POISON_BREATH, H_SPELL_POISON_BREATH)); DoCast(pTarget, DUNGEON_MODE(SPELL_POISON_BREATH, H_SPELL_POISON_BREATH));
uiPoisonBreathTimer = 8000 + rand()%4000; uiPoisonBreathTimer = 8000 + rand()%4000;
} else uiPoisonBreathTimer -= diff; } else uiPoisonBreathTimer -= diff;
@@ -149,21 +149,21 @@ struct TRINITY_DLL_DECL boss_skadiAI : public ScriptedAI
if (uiCrushTimer <= diff) if (uiCrushTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_CRUSH, H_SPELL_CRUSH)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_CRUSH, H_SPELL_CRUSH));
uiCrushTimer = 8000; uiCrushTimer = 8000;
} else uiCrushTimer -= diff; } else uiCrushTimer -= diff;
if (uiPoisonedSpearTimer <= diff) if (uiPoisonedSpearTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_POISONED_SPEAR, H_SPELL_POISONED_SPEAR)); DoCast(pTarget, DUNGEON_MODE(SPELL_POISONED_SPEAR, H_SPELL_POISONED_SPEAR));
uiPoisonedSpearTimer = 10000; uiPoisonedSpearTimer = 10000;
} else uiPoisonedSpearTimer -= diff; } else uiPoisonedSpearTimer -= diff;
if (uiWhirlwindTimer <= diff) if (uiWhirlwindTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, HEROIC(SPELL_WHIRLWIND, H_SPELL_WHIRLWIND), false); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_WHIRLWIND, H_SPELL_WHIRLWIND), false);
} else uiWhirlwindTimer = 20000; } else uiWhirlwindTimer = 20000;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -189,7 +189,7 @@ struct TRINITY_DLL_DECL boss_skadiAI : public ScriptedAI
if(type != POINT_MOTION_TYPE) if(type != POINT_MOTION_TYPE)
return; return;
if (HeroicMode ? (uiSpawnCounter >= 4) : (uiSpawnCounter >= 5)) if (uiSpawnCounter >= DUNGEON_MODE(4, 5))
{ {
uiWaypointId = 200; uiWaypointId = 200;
uiMovementTimer = 3000; uiMovementTimer = 3000;
@@ -216,7 +216,7 @@ struct TRINITY_DLL_DECL boss_skadiAI : public ScriptedAI
void SpawnMobs(uint32 spot) void SpawnMobs(uint32 spot)
{ {
uint8 uiMaxSpawn = (HeroicMode ? 6 : 5); uint8 uiMaxSpawn = DUNGEON_MODE(5, 6);
for (uint8 i = 0; i < uiMaxSpawn; ++i) for (uint8 i = 0; i < uiMaxSpawn; ++i)
{ {
Creature* pTemp; Creature* pTemp;
@@ -263,7 +263,7 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI
if (uiSinsterStrikeTimer <= diff) if (uiSinsterStrikeTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SINSTER_STRIKE, H_SPELL_SINSTER_STRIKE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SINSTER_STRIKE, H_SPELL_SINSTER_STRIKE));
uiSinsterStrikeTimer = urand(5000,9000); uiSinsterStrikeTimer = urand(5000,9000);
} else uiSinsterStrikeTimer -= diff; } else uiSinsterStrikeTimer -= diff;
@@ -137,7 +137,7 @@ struct TRINITY_DLL_DECL boss_ymironAI : public ScriptedAI
m_uiFetidRot_Timer = urand(8000,13000); m_uiFetidRot_Timer = urand(8000,13000);
m_uiBane_Timer = urand(18000,23000); m_uiBane_Timer = urand(18000,23000);
m_uiDarkSlash_Timer = urand(28000,33000); m_uiDarkSlash_Timer = urand(28000,33000);
m_uiAncestors_Vengeance_Timer = HEROIC(60000,45000); m_uiAncestors_Vengeance_Timer = DUNGEON_MODE(60000,45000);
m_uiPause_Timer = 0; m_uiPause_Timer = 0;
m_uiAbility_BJORN_Timer = 0; m_uiAbility_BJORN_Timer = 0;
@@ -147,7 +147,7 @@ struct TRINITY_DLL_DECL boss_ymironAI : public ScriptedAI
m_uiActivedNumber = 0; m_uiActivedNumber = 0;
m_uiHealthAmountModifier = 1; m_uiHealthAmountModifier = 1;
m_uiHealthAmountMultipler = HEROIC(20,25); m_uiHealthAmountMultipler = DUNGEON_MODE(20,25);
DespawnBoatGhosts(m_uiActivedCreatureGUID); DespawnBoatGhosts(m_uiActivedCreatureGUID);
DespawnBoatGhosts(m_uiOrbGUID); DespawnBoatGhosts(m_uiOrbGUID);
@@ -218,13 +218,13 @@ struct TRINITY_DLL_DECL boss_ymironAI : public ScriptedAI
// Normal spells ------------------------------------------------------------------------ // Normal spells ------------------------------------------------------------------------
if (m_uiBane_Timer <= diff) if (m_uiBane_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_BANE, H_SPELL_BANE)); DoCast(m_creature, DUNGEON_MODE(SPELL_BANE, H_SPELL_BANE));
m_uiBane_Timer = urand(20000,25000); m_uiBane_Timer = urand(20000,25000);
} else m_uiBane_Timer -= diff; } else m_uiBane_Timer -= diff;
if (m_uiFetidRot_Timer <= diff) if (m_uiFetidRot_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_FETID_ROT, H_SPELL_FETID_ROT)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_FETID_ROT, H_SPELL_FETID_ROT));
m_uiFetidRot_Timer = urand(10000,15000); m_uiFetidRot_Timer = urand(10000,15000);
} else m_uiFetidRot_Timer -= diff; } else m_uiFetidRot_Timer -= diff;
@@ -237,7 +237,7 @@ struct TRINITY_DLL_DECL boss_ymironAI : public ScriptedAI
if (m_uiAncestors_Vengeance_Timer <= diff) if (m_uiAncestors_Vengeance_Timer <= diff)
{ {
DoCast(m_creature, SPELL_ANCESTORS_VENGEANCE); DoCast(m_creature, SPELL_ANCESTORS_VENGEANCE);
m_uiAncestors_Vengeance_Timer = HEROIC(urand(60000,65000),urand(45000,50000)); m_uiAncestors_Vengeance_Timer = DUNGEON_MODE(urand(60000,65000),urand(45000,50000));
} else m_uiAncestors_Vengeance_Timer -= diff; } else m_uiAncestors_Vengeance_Timer -= diff;
// Abilities ------------------------------------------------------------------------------ // Abilities ------------------------------------------------------------------------------
@@ -247,7 +247,7 @@ struct TRINITY_DLL_DECL boss_ymironAI : public ScriptedAI
if (Creature* pTemp = m_creature->SummonCreature(CREATURE_SPIRIT_FOUNT, 385+rand()%10, -330+rand()%10, 104.756, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000)) if (Creature* pTemp = m_creature->SummonCreature(CREATURE_SPIRIT_FOUNT, 385+rand()%10, -330+rand()%10, 104.756, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000))
{ {
pTemp->SetSpeed(MOVE_RUN, 0.4f); pTemp->SetSpeed(MOVE_RUN, 0.4f);
pTemp->CastSpell(pTemp, HEROIC(SPELL_SPIRIT_FOUNT, H_SPELL_SPIRIT_FOUNT), true); pTemp->CastSpell(pTemp, DUNGEON_MODE(SPELL_SPIRIT_FOUNT, H_SPELL_SPIRIT_FOUNT), true);
pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pTemp->SetDisplayId(11686); pTemp->SetDisplayId(11686);
@@ -259,13 +259,13 @@ struct TRINITY_DLL_DECL boss_ymironAI : public ScriptedAI
if (m_bIsActiveWithHALDOR && m_uiAbility_HALDOR_Timer <= diff) if (m_bIsActiveWithHALDOR && m_uiAbility_HALDOR_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SPIRIT_STRIKE, H_SPELL_SPIRIT_STRIKE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SPIRIT_STRIKE, H_SPELL_SPIRIT_STRIKE));
m_uiAbility_HALDOR_Timer = 5000; // overtime m_uiAbility_HALDOR_Timer = 5000; // overtime
} else m_uiAbility_HALDOR_Timer -= diff; } else m_uiAbility_HALDOR_Timer -= diff;
if (m_bIsActiveWithRANULF && m_uiAbility_RANULF_Timer <= diff) if (m_bIsActiveWithRANULF && m_uiAbility_RANULF_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_SPIRIT_BURST, H_SPELL_SPIRIT_BURST)); DoCast(m_creature, DUNGEON_MODE(SPELL_SPIRIT_BURST, H_SPELL_SPIRIT_BURST));
m_uiAbility_RANULF_Timer = 10000; // overtime m_uiAbility_RANULF_Timer = 10000; // overtime
} else m_uiAbility_RANULF_Timer -= diff; } else m_uiAbility_RANULF_Timer -= diff;
@@ -9,14 +9,14 @@ UPDATE `creature_template` SET `ScriptName`='mob_archavon_warder' WHERE `entry`=
//Spells Archavon //Spells Archavon
#define SPELL_ROCK_SHARDS 58678 #define SPELL_ROCK_SHARDS 58678
#define SPELL_CRUSHING_LEAP HEROIC(58960,60894)//Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris. #define SPELL_CRUSHING_LEAP RAID_MODE(58960,60894)//Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris.
#define SPELL_STOMP HEROIC(58663,60880) #define SPELL_STOMP RAID_MODE(58663,60880)
#define SPELL_IMPALE HEROIC(58666,60882) //Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec. #define SPELL_IMPALE RAID_MODE(58666,60882) //Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec.
#define SPELL_BERSERK 47008 #define SPELL_BERSERK 47008
//Spells Archavon Warders //Spells Archavon Warders
#define SPELL_ROCK_SHOWER HEROIC(60919,60923) #define SPELL_ROCK_SHOWER RAID_MODE(60919,60923)
#define SPELL_SHIELD_CRUSH HEROIC(60897,60899) #define SPELL_SHIELD_CRUSH RAID_MODE(60897,60899)
#define SPELL_WHIRL HEROIC(60902,60916) #define SPELL_WHIRL RAID_MODE(60902,60916)
//4 Warders spawned //4 Warders spawned
#define ARCHAVON_WARDER 32353 //npc 32353 #define ARCHAVON_WARDER 32353 //npc 32353
@@ -2,8 +2,8 @@
#include "vault_of_archavon.h" #include "vault_of_archavon.h"
//Emalon spells //Emalon spells
#define SPELL_CHAIN_LIGHTNING HEROIC(64213, 64215) #define SPELL_CHAIN_LIGHTNING RAID_MODE(64213, 64215)
#define SPELL_LIGHTNING_NOVA HEROIC(64216, 65279) #define SPELL_LIGHTNING_NOVA RAID_MODE(64216, 65279)
#define SPELL_OVERCHARGE 64218 //Casted every 45 sec on a random Tempest Minion #define SPELL_OVERCHARGE 64218 //Casted every 45 sec on a random Tempest Minion
#define SPELL_BERSERK 26662 #define SPELL_BERSERK 26662
@@ -97,23 +97,23 @@ struct TRINITY_DLL_DECL boss_cyanigosaAI : public ScriptedAI
if (uiBlizzardTimer <= diff) if (uiBlizzardTimer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, HEROIC(SPELL_BLIZZARD, H_SPELL_BLIZZARD)); DoCast(pTarget, DUNGEON_MODE(SPELL_BLIZZARD, H_SPELL_BLIZZARD));
uiBlizzardTimer = 15000; uiBlizzardTimer = 15000;
} else uiBlizzardTimer -= diff; } else uiBlizzardTimer -= diff;
if (uiTailSweepTimer <= diff) if (uiTailSweepTimer <= diff)
{ {
DoCast(HEROIC(SPELL_TAIL_SWEEP, H_SPELL_TAIL_SWEEP)); DoCast(DUNGEON_MODE(SPELL_TAIL_SWEEP, H_SPELL_TAIL_SWEEP));
uiTailSweepTimer = 20000; uiTailSweepTimer = 20000;
} else uiTailSweepTimer -= diff; } else uiTailSweepTimer -= diff;
if (uiUncontrollableEnergyTimer <= diff) if (uiUncontrollableEnergyTimer <= diff)
{ {
DoCastVictim(HEROIC(SPELL_UNCONTROLLABLE_ENERGY,H_SPELL_UNCONTROLLABLE_ENERGY)); DoCastVictim(DUNGEON_MODE(SPELL_UNCONTROLLABLE_ENERGY,H_SPELL_UNCONTROLLABLE_ENERGY));
uiUncontrollableEnergyTimer = 25000; uiUncontrollableEnergyTimer = 25000;
} else uiUncontrollableEnergyTimer -= diff; } else uiUncontrollableEnergyTimer -= diff;
if (HeroicMode) if (IsHeroic())
if (uiManaDestructionTimer <= diff) if (uiManaDestructionTimer <= diff)
{ {
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
@@ -91,7 +91,7 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
void EnterCombat(Unit* who) void EnterCombat(Unit* who)
{ {
DoScriptText(SAY_AGGRO, m_creature); DoScriptText(SAY_AGGRO, m_creature);
DoCast(m_creature, HEROIC(SPELL_EARTH_SHIELD, H_SPELL_EARTH_SHIELD)); DoCast(m_creature, DUNGEON_MODE(SPELL_EARTH_SHIELD, H_SPELL_EARTH_SHIELD));
if (pInstance) if (pInstance)
{ {
@@ -111,7 +111,7 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
return; return;
//spam stormstrike in hc mode if spawns are dead //spam stormstrike in hc mode if spawns are dead
if (HeroicMode) if (IsHeroic())
{ {
if (pGuard1 && !pGuard1->isAlive() && pGuard2 && !pGuard2->isAlive()) if (pGuard1 && !pGuard1->isAlive() && pGuard2 && !pGuard2->isAlive())
{ {
@@ -121,7 +121,7 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
if (uiEarthShieldTimer <= diff) if (uiEarthShieldTimer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_EARTH_SHIELD, H_SPELL_EARTH_SHIELD)); DoCast(m_creature, DUNGEON_MODE(SPELL_EARTH_SHIELD, H_SPELL_EARTH_SHIELD));
uiEarthShieldTimer = 20000; uiEarthShieldTimer = 20000;
} else uiEarthShieldTimer -= diff; } else uiEarthShieldTimer -= diff;
@@ -129,7 +129,7 @@ struct TRINITY_DLL_DECL boss_erekemAI : public ScriptedAI
{ {
if (Creature *pTarget = GetChainHealTarget()) if (Creature *pTarget = GetChainHealTarget())
{ {
DoCast(pTarget, HEROIC(SPELL_CHAIN_HEAL, H_SPELL_CHAIN_HEAL)); DoCast(pTarget, DUNGEON_MODE(SPELL_CHAIN_HEAL, H_SPELL_CHAIN_HEAL));
//If one of the adds is dead spawn heals faster //If one of the adds is dead spawn heals faster
uiChainHealTimer = ((pGuard1 && !pGuard1->isAlive()) || (pGuard2 && !pGuard2->isAlive()) ? 3000 : 8000) + rand()%3000; uiChainHealTimer = ((pGuard1 && !pGuard1->isAlive()) || (pGuard2 && !pGuard2->isAlive()) ? 3000 : 8000) + rand()%3000;
} }
@@ -78,10 +78,8 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
boss_ichoronAI(Creature* pCreature) : ScriptedAI(pCreature) boss_ichoronAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
pInstance = pCreature->GetInstanceData(); pInstance = pCreature->GetInstanceData();
HeroicMode = pCreature->GetMap()->IsHeroic();
} }
bool HeroicMode;
bool bIsExploded; bool bIsExploded;
bool bIsFrenzy; bool bIsFrenzy;
@@ -186,7 +184,7 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
{ {
if (!m_creature->HasAura(SPELL_PROTECTIVE_BUBBLE, 0)) if (!m_creature->HasAura(SPELL_PROTECTIVE_BUBBLE, 0))
{ {
DoCast(m_creature, HEROIC(SPELL_WATER_BLAST, SPELL_WATER_BLAST_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_WATER_BLAST, SPELL_WATER_BLAST_H));
//DoCast(m_creature, SPELL_DRAINED); //DoCast(m_creature, SPELL_DRAINED);
bIsExploded = true; bIsExploded = true;
uiShowup_Counter = 0; uiShowup_Counter = 0;
@@ -230,14 +228,14 @@ struct TRINITY_DLL_DECL boss_ichoronAI : public ScriptedAI
{ {
if (uiWaterBoltVolley_Timer < uiDiff) if (uiWaterBoltVolley_Timer < uiDiff)
{ {
DoCast(m_creature, HEROIC(SPELL_WATER_BOLT_VOLLEY, SPELL_WATER_BOLT_VOLLEY_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_WATER_BOLT_VOLLEY, SPELL_WATER_BOLT_VOLLEY_H));
uiWaterBoltVolley_Timer = urand(10000, 15000); uiWaterBoltVolley_Timer = urand(10000, 15000);
} }
else uiWaterBoltVolley_Timer -= uiDiff; else uiWaterBoltVolley_Timer -= uiDiff;
if (!bIsFrenzy && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25) if (!bIsFrenzy && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25)
{ {
DoCast(m_creature, HEROIC(SPELL_FRENZY, SPELL_FRENZY_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_FRENZY, SPELL_FRENZY_H));
bIsFrenzy = true; bIsFrenzy = true;
} }
@@ -87,23 +87,23 @@ struct TRINITY_DLL_DECL boss_lavanthorAI : public ScriptedAI
if (uiFireboltTimer <= diff) if (uiFireboltTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_FIREBOLT, H_SPELL_FIREBOLT)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_FIREBOLT, H_SPELL_FIREBOLT));
uiFireboltTimer = urand(5000,13000); uiFireboltTimer = urand(5000,13000);
} else uiFireboltTimer -= diff; } else uiFireboltTimer -= diff;
if (uiFlameBreathTimer <= diff) if (uiFlameBreathTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_FLAME_BREATH, H_SPELL_FLAME_BREATH)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_FLAME_BREATH, H_SPELL_FLAME_BREATH));
uiFlameBreathTimer = urand(10000,15000); uiFlameBreathTimer = urand(10000,15000);
} else uiFlameBreathTimer -= diff; } else uiFlameBreathTimer -= diff;
if (uiLavaBurnTimer <= diff) if (uiLavaBurnTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_LAVA_BURN, H_SPELL_LAVA_BURN)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_LAVA_BURN, H_SPELL_LAVA_BURN));
uiLavaBurnTimer = urand(15000,23000); uiLavaBurnTimer = urand(15000,23000);
} }
if (HeroicMode) if (IsHeroic())
{ {
if (uiCauterizingFlamesTimer <= diff) if (uiCauterizingFlamesTimer <= diff)
{ {
@@ -69,13 +69,10 @@ struct TRINITY_DLL_DECL boss_xevozzAI : public ScriptedAI
boss_xevozzAI(Creature* pCreature) : ScriptedAI(pCreature) boss_xevozzAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
pInstance = pCreature->GetInstanceData(); pInstance = pCreature->GetInstanceData();
HeroicMode = pCreature->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 uiSummonEtherealSphere_Timer; uint32 uiSummonEtherealSphere_Timer;
uint32 uiArcaneBarrageVolley_Timer; uint32 uiArcaneBarrageVolley_Timer;
uint32 uiArcaneBuffet_Timer; uint32 uiArcaneBuffet_Timer;
@@ -157,7 +154,7 @@ struct TRINITY_DLL_DECL boss_xevozzAI : public ScriptedAI
if (uiArcaneBarrageVolley_Timer < uiDiff) if (uiArcaneBarrageVolley_Timer < uiDiff)
{ {
DoCast(m_creature, HEROIC(SPELL_ARCANE_BARRAGE_VOLLEY, SPELL_ARCANE_BARRAGE_VOLLEY_H)); DoCast(m_creature, DUNGEON_MODE(SPELL_ARCANE_BARRAGE_VOLLEY, SPELL_ARCANE_BARRAGE_VOLLEY_H));
uiArcaneBarrageVolley_Timer = urand(20000, 22000); uiArcaneBarrageVolley_Timer = urand(20000, 22000);
} }
else uiArcaneBarrageVolley_Timer -= uiDiff; else uiArcaneBarrageVolley_Timer -= uiDiff;
@@ -165,7 +162,7 @@ struct TRINITY_DLL_DECL boss_xevozzAI : public ScriptedAI
if (uiArcaneBuffet_Timer) if (uiArcaneBuffet_Timer)
if (uiArcaneBuffet_Timer < uiDiff) if (uiArcaneBuffet_Timer < uiDiff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_ARCANE_BUFFET, SPELL_ARCANE_BUFFET_H)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_ARCANE_BUFFET, SPELL_ARCANE_BUFFET_H));
uiArcaneBuffet_Timer = 0; uiArcaneBuffet_Timer = 0;
} }
else uiArcaneBuffet_Timer -= uiDiff; else uiArcaneBuffet_Timer -= uiDiff;
@@ -174,7 +171,7 @@ struct TRINITY_DLL_DECL boss_xevozzAI : public ScriptedAI
{ {
DoScriptText(SAY_SPAWN, m_creature); DoScriptText(SAY_SPAWN, m_creature);
DoCast(m_creature, SPELL_SUMMON_ETHEREAL_SPHERE_1); DoCast(m_creature, SPELL_SUMMON_ETHEREAL_SPHERE_1);
if (HeroicMode) // extra one for heroic if (IsHeroic()) // extra one for heroic
m_creature->SummonCreature(NPC_ETHEREAL_SPHERE, m_creature->GetPositionX()-5+rand()%10, m_creature->GetPositionY()-5+rand()%10, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 40000); m_creature->SummonCreature(NPC_ETHEREAL_SPHERE, m_creature->GetPositionX()-5+rand()%10, m_creature->GetPositionY()-5+rand()%10, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 40000);
uiSummonEtherealSphere_Timer = urand(45000, 47000); uiSummonEtherealSphere_Timer = urand(45000, 47000);
@@ -224,11 +221,9 @@ struct TRINITY_DLL_DECL mob_ethereal_sphereAI : public ScriptedAI
mob_ethereal_sphereAI(Creature* pCreature) : ScriptedAI(pCreature) mob_ethereal_sphereAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
pInstance = pCreature->GetInstanceData(); pInstance = pCreature->GetInstanceData();
HeroicMode = pCreature->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 uiSummonPlayers_Timer; uint32 uiSummonPlayers_Timer;
uint32 uiRangeCheck_Timer; uint32 uiRangeCheck_Timer;
@@ -256,7 +251,7 @@ struct TRINITY_DLL_DECL mob_ethereal_sphereAI : public ScriptedAI
{ {
float fDistance = m_creature->GetDistance2d(pXevozz); float fDistance = m_creature->GetDistance2d(pXevozz);
if (fDistance <= 3) if (fDistance <= 3)
DoCast(pXevozz, HEROIC(SPELL_ARCANE_POWER, H_SPELL_ARCANE_POWER)); DoCast(pXevozz, DUNGEON_MODE(SPELL_ARCANE_POWER, H_SPELL_ARCANE_POWER));
else else
DoCast(m_creature, 35845); //Is it blizzlike? DoCast(m_creature, 35845); //Is it blizzlike?
} }
@@ -109,13 +109,13 @@ struct TRINITY_DLL_DECL boss_zuramatAI : public ScriptedAI
if (SpellVoidShiftTimer <= diff) if (SpellVoidShiftTimer <= diff)
{ {
if (Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pUnit, HEROIC(SPELL_VOID_SHIFT, H_SPELL_VOID_SHIFT)); DoCast(pUnit, DUNGEON_MODE(SPELL_VOID_SHIFT, H_SPELL_VOID_SHIFT));
SpellVoidShiftTimer = 20000; SpellVoidShiftTimer = 20000;
} else SpellVoidShiftTimer -=diff; } else SpellVoidShiftTimer -=diff;
if (SpellShroudOfDarknessTimer <= diff) if (SpellShroudOfDarknessTimer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHROUD_OF_DARKNESS, H_SPELL_SHROUD_OF_DARKNESS)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHROUD_OF_DARKNESS, H_SPELL_SHROUD_OF_DARKNESS));
SpellShroudOfDarknessTimer = 20000; SpellShroudOfDarknessTimer = 20000;
} else SpellShroudOfDarknessTimer -=diff; } else SpellShroudOfDarknessTimer -=diff;
@@ -152,7 +152,7 @@ struct TRINITY_DLL_DECL boss_zuramatAI : public ScriptedAI
void JustSummoned(Creature* summon) void JustSummoned(Creature* summon)
{ {
summon->AI()->AttackStart(m_creature->getVictim()); summon->AI()->AttackStart(m_creature->getVictim());
summon->AI()->DoCastAOE(HEROIC(SPELL_ZUMARAT_ADD_2, H_SPELL_ZUMARAT_ADD_2)); summon->AI()->DoCastAOE(DUNGEON_MODE(SPELL_ZUMARAT_ADD_2, H_SPELL_ZUMARAT_ADD_2));
summon->SetPhaseMask(17,true); summon->SetPhaseMask(17,true);
} }
}; };
@@ -27,13 +27,13 @@ EndScriptData */
#define SPELL_ATTRACTMAGIC 32265 #define SPELL_ATTRACTMAGIC 32265
#define N_SPELL_CARNIVOROUSBITE 36383 #define N_SPELL_CARNIVOROUSBITE 36383
#define H_SPELL_CARNIVOROUSBITE 39382 #define H_SPELL_CARNIVOROUSBITE 39382
#define SPELL_CARNIVOROUSBITE (HeroicMode?H_SPELL_CARNIVOROUSBITE:N_SPELL_CARNIVOROUSBITE) #define SPELL_CARNIVOROUSBITE DUNGEON_MODE(N_SPELL_CARNIVOROUSBITE, H_SPELL_CARNIVOROUSBITE)
#define ENTRY_FOCUS_FIRE 18374 #define ENTRY_FOCUS_FIRE 18374
#define N_SPELL_FIERY_BLAST 32302 #define N_SPELL_FIERY_BLAST 32302
#define H_SPELL_FIERY_BLAST 38382 #define H_SPELL_FIERY_BLAST 38382
#define SPELL_FIERY_BLAST (HeroicMode?H_SPELL_FIERY_BLAST:N_SPELL_FIERY_BLAST) #define SPELL_FIERY_BLAST DUNGEON_MODE(N_SPELL_FIERY_BLAST, H_SPELL_FIERY_BLAST)
#define SPELL_FOCUS_FIRE_VISUAL 42075 //need to find better visual #define SPELL_FOCUS_FIRE_VISUAL 42075 //need to find better visual
#define EMOTE_FOCUSES_ON "focuses on " #define EMOTE_FOCUSES_ON "focuses on "
@@ -42,14 +42,13 @@ struct TRINITY_DLL_DECL boss_shirrak_the_dead_watcherAI : public ScriptedAI
{ {
boss_shirrak_the_dead_watcherAI(Creature *c) : ScriptedAI(c) boss_shirrak_the_dead_watcherAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 Inhibitmagic_Timer; uint32 Inhibitmagic_Timer;
uint32 Attractmagic_Timer; uint32 Attractmagic_Timer;
uint32 Carnivorousbite_Timer; uint32 Carnivorousbite_Timer;
uint32 FocusFire_Timer; uint32 FocusFire_Timer;
bool HeroicMode;
Unit *focusedTarget; Unit *focusedTarget;
void Reset() void Reset()
@@ -156,10 +155,8 @@ struct TRINITY_DLL_DECL mob_focus_fireAI : public ScriptedAI
{ {
mob_focus_fireAI(Creature *c) : ScriptedAI(c) mob_focus_fireAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 FieryBlast_Timer; uint32 FieryBlast_Timer;
bool fiery1, fiery2; bool fiery1, fiery2;
@@ -216,10 +216,8 @@ struct TRINITY_DLL_DECL mob_ethereal_beaconAI : public ScriptedAI
{ {
mob_ethereal_beaconAI(Creature *c) : ScriptedAI(c) mob_ethereal_beaconAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 Apprentice_Timer; uint32 Apprentice_Timer;
uint32 ArcaneBolt_Timer; uint32 ArcaneBolt_Timer;
uint32 Check_Timer; uint32 Check_Timer;
@@ -231,7 +229,7 @@ struct TRINITY_DLL_DECL mob_ethereal_beaconAI : public ScriptedAI
void Reset() void Reset()
{ {
Apprentice_Timer = (HeroicMode ? 10000 : 20000); Apprentice_Timer = DUNGEON_MODE(20000, 10000);
ArcaneBolt_Timer = 1000; ArcaneBolt_Timer = 1000;
Check_Timer = 1000; Check_Timer = 1000;
} }
@@ -43,10 +43,8 @@ struct TRINITY_DLL_DECL boss_pandemoniusAI : public ScriptedAI
{ {
boss_pandemoniusAI(Creature *c) : ScriptedAI(c) boss_pandemoniusAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 VoidBlast_Timer; uint32 VoidBlast_Timer;
uint32 DarkShell_Timer; uint32 DarkShell_Timer;
uint32 VoidBlast_Counter; uint32 VoidBlast_Counter;
@@ -82,7 +80,7 @@ struct TRINITY_DLL_DECL boss_pandemoniusAI : public ScriptedAI
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
{ {
DoCast(pTarget, HEROIC(SPELL_VOID_BLAST, H_SPELL_VOID_BLAST)); DoCast(pTarget, DUNGEON_MODE(SPELL_VOID_BLAST, H_SPELL_VOID_BLAST));
VoidBlast_Timer = 500; VoidBlast_Timer = 500;
++VoidBlast_Counter; ++VoidBlast_Counter;
} }
@@ -103,7 +101,7 @@ struct TRINITY_DLL_DECL boss_pandemoniusAI : public ScriptedAI
DoScriptText(EMOTE_DARK_SHELL, m_creature); DoScriptText(EMOTE_DARK_SHELL, m_creature);
DoCast(m_creature, HEROIC(SPELL_DARK_SHELL, H_SPELL_DARK_SHELL)); DoCast(m_creature, DUNGEON_MODE(SPELL_DARK_SHELL, H_SPELL_DARK_SHELL));
DarkShell_Timer = 20000; DarkShell_Timer = 20000;
} else DarkShell_Timer -= diff; } else DarkShell_Timer -= diff;
} }
@@ -46,17 +46,15 @@ EndScriptData */
#define SPELL_SUMMON_SYTH_FROST 33539 // Spawns 19204 #define SPELL_SUMMON_SYTH_FROST 33539 // Spawns 19204
#define SPELL_SUMMON_SYTH_SHADOW 33540 // Spawns 19206 #define SPELL_SUMMON_SYTH_SHADOW 33540 // Spawns 19206
#define SPELL_FLAME_BUFFET (HeroicMode?38141:33526) #define SPELL_FLAME_BUFFET DUNGEON_MODE(33526, 38141)
#define SPELL_ARCANE_BUFFET (HeroicMode?38138:33527) #define SPELL_ARCANE_BUFFET DUNGEON_MODE(33527, 38138)
#define SPELL_FROST_BUFFET (HeroicMode?38142:33528) #define SPELL_FROST_BUFFET DUNGEON_MODE(33528, 38142)
#define SPELL_SHADOW_BUFFET (HeroicMode?38143:33529) #define SPELL_SHADOW_BUFFET DUNGEON_MODE(33529, 38143)
struct TRINITY_DLL_DECL boss_darkweaver_sythAI : public ScriptedAI struct TRINITY_DLL_DECL boss_darkweaver_sythAI : public ScriptedAI
{ {
boss_darkweaver_sythAI(Creature *c) : ScriptedAI(c) boss_darkweaver_sythAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 flameshock_timer; uint32 flameshock_timer;
@@ -68,7 +66,6 @@ struct TRINITY_DLL_DECL boss_darkweaver_sythAI : public ScriptedAI
bool summon90; bool summon90;
bool summon50; bool summon50;
bool summon10; bool summon10;
bool HeroicMode;
void Reset() void Reset()
{ {
@@ -197,14 +194,11 @@ CreatureAI* GetAI_boss_darkweaver_syth(Creature* pCreature)
struct TRINITY_DLL_DECL mob_syth_fireAI : public ScriptedAI struct TRINITY_DLL_DECL mob_syth_fireAI : public ScriptedAI
{ {
mob_syth_fireAI(Creature *c) : ScriptedAI(c) mob_syth_fireAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 flameshock_timer; uint32 flameshock_timer;
uint32 flamebuffet_timer; uint32 flamebuffet_timer;
bool HeroicMode;
void Reset() void Reset()
{ {
@@ -248,14 +242,11 @@ CreatureAI* GetAI_mob_syth_fire(Creature* pCreature)
struct TRINITY_DLL_DECL mob_syth_arcaneAI : public ScriptedAI struct TRINITY_DLL_DECL mob_syth_arcaneAI : public ScriptedAI
{ {
mob_syth_arcaneAI(Creature *c) : ScriptedAI(c) mob_syth_arcaneAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 arcaneshock_timer; uint32 arcaneshock_timer;
uint32 arcanebuffet_timer; uint32 arcanebuffet_timer;
bool HeroicMode;
void Reset() void Reset()
{ {
@@ -299,14 +290,11 @@ CreatureAI* GetAI_mob_syth_arcane(Creature* pCreature)
struct TRINITY_DLL_DECL mob_syth_frostAI : public ScriptedAI struct TRINITY_DLL_DECL mob_syth_frostAI : public ScriptedAI
{ {
mob_syth_frostAI(Creature *c) : ScriptedAI(c) mob_syth_frostAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 frostshock_timer; uint32 frostshock_timer;
uint32 frostbuffet_timer; uint32 frostbuffet_timer;
bool HeroicMode;
void Reset() void Reset()
{ {
@@ -350,14 +338,11 @@ CreatureAI* GetAI_mob_syth_frost(Creature* pCreature)
struct TRINITY_DLL_DECL mob_syth_shadowAI : public ScriptedAI struct TRINITY_DLL_DECL mob_syth_shadowAI : public ScriptedAI
{ {
mob_syth_shadowAI(Creature *c) : ScriptedAI(c) mob_syth_shadowAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 shadowshock_timer; uint32 shadowshock_timer;
uint32 shadowbuffet_timer; uint32 shadowbuffet_timer;
bool HeroicMode;
void Reset() void Reset()
{ {
@@ -59,8 +59,6 @@ struct TRINITY_DLL_DECL boss_talon_king_ikissAI : public ScriptedAI
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 ArcaneVolley_Timer; uint32 ArcaneVolley_Timer;
uint32 Sheep_Timer; uint32 Sheep_Timer;
uint32 Blink_Timer; uint32 Blink_Timer;
@@ -72,8 +70,6 @@ struct TRINITY_DLL_DECL boss_talon_king_ikissAI : public ScriptedAI
void Reset() void Reset()
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
ArcaneVolley_Timer = 5000; ArcaneVolley_Timer = 5000;
Sheep_Timer = 8000; Sheep_Timer = 8000;
Blink_Timer = 35000; Blink_Timer = 35000;
@@ -130,24 +126,29 @@ struct TRINITY_DLL_DECL boss_talon_king_ikissAI : public ScriptedAI
if (Blink) if (Blink)
{ {
DoCast(m_creature, HEROIC(SPELL_ARCANE_EXPLOSION, H_SPELL_ARCANE_EXPLOSION)); DoCast(m_creature, DUNGEON_MODE(SPELL_ARCANE_EXPLOSION, H_SPELL_ARCANE_EXPLOSION));
DoCast(m_creature, SPELL_ARCANE_BUBBLE, true); DoCast(m_creature, SPELL_ARCANE_BUBBLE, true);
Blink = false; Blink = false;
} }
if (ArcaneVolley_Timer <= diff) if (ArcaneVolley_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_ARCANE_VOLLEY, H_SPELL_ARCANE_VOLLEY)); DoCast(m_creature, DUNGEON_MODE(SPELL_ARCANE_VOLLEY, H_SPELL_ARCANE_VOLLEY));
ArcaneVolley_Timer = 7000+rand()%5000; ArcaneVolley_Timer = 7000+rand()%5000;
} else ArcaneVolley_Timer -= diff; } else ArcaneVolley_Timer -= diff;
if (Sheep_Timer <= diff) if (Sheep_Timer <= diff)
{ {
Unit *pTarget;
//second top aggro target in normal, random target in heroic correct? //second top aggro target in normal, random target in heroic correct?
Unit *pTarget = NULL; if (IsHeroic())
pTarget = HeroicMode ? SelectUnit(SELECT_TARGET_RANDOM,0) : SelectUnit(SELECT_TARGET_TOPAGGRO,1); pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
else
pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
if (pTarget) if (pTarget)
DoCast(pTarget, HEROIC(SPELL_POLYMORPH, H_SPELL_POLYMORPH)); DoCast(pTarget, DUNGEON_MODE(SPELL_POLYMORPH, H_SPELL_POLYMORPH));
Sheep_Timer = 15000+rand()%2500; Sheep_Timer = 15000+rand()%2500;
} else Sheep_Timer -= diff; } else Sheep_Timer -= diff;
@@ -158,7 +159,7 @@ struct TRINITY_DLL_DECL boss_talon_king_ikissAI : public ScriptedAI
ManaShield = true; ManaShield = true;
} }
if (HeroicMode) if (IsHeroic())
{ {
if (Slow_Timer <= diff) if (Slow_Timer <= diff)
{ {
@@ -47,11 +47,9 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public npc_escortAI
boss_ambassador_hellmawAI(Creature* pCreature) : npc_escortAI(pCreature) boss_ambassador_hellmawAI(Creature* pCreature) : npc_escortAI(pCreature)
{ {
m_pInstance = pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
HeroicMode = pCreature->GetMap()->IsHeroic();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
bool HeroicMode;
uint32 EventCheck_Timer; uint32 EventCheck_Timer;
uint32 CorrosiveAcid_Timer; uint32 CorrosiveAcid_Timer;
@@ -181,7 +179,7 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public npc_escortAI
Fear_Timer = 20000 + rand()%15000; Fear_Timer = 20000 + rand()%15000;
} else Fear_Timer -= diff; } else Fear_Timer -= diff;
if (HeroicMode) if (IsHeroic())
{ {
if (!Enraged && Enrage_Timer <= diff) if (!Enraged && Enrage_Timer <= diff)
{ {
@@ -64,10 +64,8 @@ struct TRINITY_DLL_DECL mob_voidtravelerAI : public ScriptedAI
{ {
mob_voidtravelerAI(Creature *c) : ScriptedAI(c) mob_voidtravelerAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
Unit *Vorpil; Unit *Vorpil;
uint32 move; uint32 move;
bool sacrificed; bool sacrificed;
@@ -92,7 +90,7 @@ struct TRINITY_DLL_DECL mob_voidtravelerAI : public ScriptedAI
{ {
if (sacrificed) if (sacrificed)
{ {
m_creature->AddAura(HEROIC(H_SPELL_EMPOWERING_SHADOWS, SPELL_EMPOWERING_SHADOWS), Vorpil); m_creature->AddAura(DUNGEON_MODE(SPELL_EMPOWERING_SHADOWS, H_SPELL_EMPOWERING_SHADOWS), Vorpil);
Vorpil->SetHealth(Vorpil->GetHealth() + Vorpil->GetMaxHealth()/25); Vorpil->SetHealth(Vorpil->GetHealth() + Vorpil->GetMaxHealth()/25);
DoCast(m_creature, SPELL_SHADOW_NOVA, true); DoCast(m_creature, SPELL_SHADOW_NOVA, true);
m_creature->Kill(m_creature); m_creature->Kill(m_creature);
@@ -125,14 +123,12 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
boss_grandmaster_vorpilAI(Creature *c) : ScriptedAI(c) boss_grandmaster_vorpilAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
Intro = false; Intro = false;
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool Intro, HelpYell; bool Intro, HelpYell;
bool sumportals; bool sumportals;
bool HeroicMode;
uint32 ShadowBoltVolley_Timer; uint32 ShadowBoltVolley_Timer;
uint32 DrawShadows_Timer; uint32 DrawShadows_Timer;
@@ -249,7 +245,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
ShadowBoltVolley_Timer = 15000 + rand()%15000; ShadowBoltVolley_Timer = 15000 + rand()%15000;
} else ShadowBoltVolley_Timer -= diff; } else ShadowBoltVolley_Timer -= diff;
if (HeroicMode && banish_Timer <= diff) if (IsHeroic() && banish_Timer <= diff)
{ {
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,30,false); Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,30,false);
if (pTarget) if (pTarget)
@@ -271,7 +267,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
m_creature->GetMap()->CreatureRelocation(m_creature, VorpilPosition[0],VorpilPosition[1],VorpilPosition[2],0.0f); m_creature->GetMap()->CreatureRelocation(m_creature, VorpilPosition[0],VorpilPosition[1],VorpilPosition[2],0.0f);
DoCast(m_creature, SPELL_DRAW_SHADOWS, true); DoCast(m_creature, SPELL_DRAW_SHADOWS, true);
DoCast(m_creature, HeroicMode?H_SPELL_RAIN_OF_FIRE:SPELL_RAIN_OF_FIRE); DoCast(m_creature, DUNGEON_MODE(SPELL_RAIN_OF_FIRE, H_SPELL_RAIN_OF_FIRE));
ShadowBoltVolley_Timer = 6000; ShadowBoltVolley_Timer = 6000;
DrawShadows_Timer = 30000; DrawShadows_Timer = 30000;
@@ -26,10 +26,10 @@ EndScriptData */
#define EMOTE_SONIC_BOOM -1555036 #define EMOTE_SONIC_BOOM -1555036
#define SPELL_SONIC_BOOM_CAST (HeroicMode?38796:33923) #define SPELL_SONIC_BOOM_CAST DUNGEON_MODE(33923, 38796)
#define SPELL_SONIC_BOOM_EFFECT (HeroicMode?38795:33666) #define SPELL_SONIC_BOOM_EFFECT DUNGEON_MODE(33666, 38795)
#define SPELL_RESONANCE 33657 #define SPELL_RESONANCE 33657
#define SPELL_MURMURS_TOUCH (HeroicMode?38794:33711) #define SPELL_MURMURS_TOUCH DUNGEON_MODE(33711, 38794)
#define SPELL_MAGNETIC_PULL 33689 #define SPELL_MAGNETIC_PULL 33689
#define SPELL_SONIC_SHOCK 38797 #define SPELL_SONIC_SHOCK 38797
#define SPELL_THUNDERING_STORM 39365 #define SPELL_THUNDERING_STORM 39365
@@ -39,7 +39,6 @@ struct TRINITY_DLL_DECL boss_murmurAI : public ScriptedAI
boss_murmurAI(Creature *c) : ScriptedAI(c) boss_murmurAI(Creature *c) : ScriptedAI(c)
{ {
SetCombatMovement(false); SetCombatMovement(false);
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 SonicBoom_Timer; uint32 SonicBoom_Timer;
@@ -48,7 +47,6 @@ struct TRINITY_DLL_DECL boss_murmurAI : public ScriptedAI
uint32 MagneticPull_Timer; uint32 MagneticPull_Timer;
uint32 SonicShock_Timer; uint32 SonicShock_Timer;
uint32 ThunderingStorm_Timer; uint32 ThunderingStorm_Timer;
bool HeroicMode;
bool SonicBoom; bool SonicBoom;
void Reset() void Reset()
@@ -149,7 +147,7 @@ struct TRINITY_DLL_DECL boss_murmurAI : public ScriptedAI
MagneticPull_Timer = 500; MagneticPull_Timer = 500;
} else MagneticPull_Timer -= diff; } else MagneticPull_Timer -= diff;
if (HeroicMode) if (IsHeroic())
{ {
// Thundering Storm // Thundering Storm
if (ThunderingStorm_Timer <= diff) if (ThunderingStorm_Timer <= diff)
@@ -46,11 +46,9 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
boss_thespiaAI(Creature *c) : ScriptedAI(c) boss_thespiaAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 LightningCloud_Timer; uint32 LightningCloud_Timer;
uint32 LungBurst_Timer; uint32 LungBurst_Timer;
@@ -95,12 +93,14 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
//LightningCloud_Timer //LightningCloud_Timer
if (LightningCloud_Timer <= diff) if (LightningCloud_Timer <= diff)
{ {
//cast twice in Heroic mode
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_LIGHTNING_CLOUD); DoCast(pTarget, SPELL_LIGHTNING_CLOUD);
if (HeroicMode)
//cast twice in Heroic mode
if (IsHeroic())
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_LIGHTNING_CLOUD); DoCast(pTarget, SPELL_LIGHTNING_CLOUD);
LightningCloud_Timer = 15000+rand()%10000; LightningCloud_Timer = 15000+rand()%10000;
} else LightningCloud_Timer -=diff; } else LightningCloud_Timer -=diff;
@@ -115,10 +115,11 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
//EnvelopingWinds_Timer //EnvelopingWinds_Timer
if (EnvelopingWinds_Timer <= diff) if (EnvelopingWinds_Timer <= diff)
{ {
//cast twice in Heroic mode
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_ENVELOPING_WINDS); DoCast(pTarget, SPELL_ENVELOPING_WINDS);
if (HeroicMode)
//cast twice in Heroic mode
if (IsHeroic())
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_ENVELOPING_WINDS); DoCast(pTarget, SPELL_ENVELOPING_WINDS);
EnvelopingWinds_Timer = 10000+rand()%5000; EnvelopingWinds_Timer = 10000+rand()%5000;
@@ -135,12 +136,10 @@ struct TRINITY_DLL_DECL mob_coilfang_waterelementalAI : public ScriptedAI
{ {
mob_coilfang_waterelementalAI(Creature *c) : ScriptedAI(c) {} mob_coilfang_waterelementalAI(Creature *c) : ScriptedAI(c) {}
bool HeroicMode;
uint32 WaterBoltVolley_Timer; uint32 WaterBoltVolley_Timer;
void Reset() void Reset()
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
WaterBoltVolley_Timer = 3000+rand()%3000; WaterBoltVolley_Timer = 3000+rand()%3000;
} }
@@ -153,7 +152,7 @@ struct TRINITY_DLL_DECL mob_coilfang_waterelementalAI : public ScriptedAI
if (WaterBoltVolley_Timer <= diff) if (WaterBoltVolley_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_WATER_BOLT_VOLLEY, H_SPELL_WATER_BOLT_VOLLEY)); DoCast(m_creature, DUNGEON_MODE(SPELL_WATER_BOLT_VOLLEY, H_SPELL_WATER_BOLT_VOLLEY));
WaterBoltVolley_Timer = 7000+rand()%5000; WaterBoltVolley_Timer = 7000+rand()%5000;
} else WaterBoltVolley_Timer -= diff; } else WaterBoltVolley_Timer -= diff;
@@ -51,11 +51,9 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c) boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 Shrink_Timer; uint32 Shrink_Timer;
uint32 Saw_Blade_Timer; uint32 Saw_Blade_Timer;
@@ -190,11 +188,9 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c) mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 Repair_Timer; uint32 Repair_Timer;
@@ -227,7 +223,7 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
//m_creature->GetMotionMaster()->MovementExpired(); //m_creature->GetMotionMaster()->MovementExpired();
//m_creature->GetMotionMaster()->MoveIdle(); //m_creature->GetMotionMaster()->MoveIdle();
DoCast(m_creature,HEROIC(SPELL_REPAIR, H_SPELL_REPAIR), true); DoCast(m_creature, DUNGEON_MODE(SPELL_REPAIR, H_SPELL_REPAIR), true);
} }
Repair_Timer = 5000; Repair_Timer = 5000;
} }
@@ -30,10 +30,8 @@ struct TRINITY_DLL_DECL boss_hungarfenAI : public ScriptedAI
{ {
boss_hungarfenAI(Creature *c) : ScriptedAI(c) boss_hungarfenAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
bool Root; bool Root;
uint32 Mushroom_Timer; uint32 Mushroom_Timer;
uint32 AcidGeyser_Timer; uint32 AcidGeyser_Timer;
@@ -37,10 +37,8 @@ struct TRINITY_DLL_DECL boss_the_black_stalkerAI : public ScriptedAI
{ {
boss_the_black_stalkerAI(Creature *c) : ScriptedAI(c) boss_the_black_stalkerAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 SporeStriders_Timer; uint32 SporeStriders_Timer;
uint32 Levitate_Timer; uint32 Levitate_Timer;
uint32 ChainLightning_Timer; uint32 ChainLightning_Timer;
@@ -104,7 +102,7 @@ struct TRINITY_DLL_DECL boss_the_black_stalkerAI : public ScriptedAI
} else check_Timer -= diff; } else check_Timer -= diff;
// Spore Striders // Spore Striders
if (HeroicMode && SporeStriders_Timer <= diff) if (IsHeroic() && SporeStriders_Timer <= diff)
{ {
DoCast(m_creature, SPELL_SUMMON_SPORE_STRIDER); DoCast(m_creature, SPELL_SUMMON_SPORE_STRIDER);
SporeStriders_Timer = 10000+rand()%5000; SporeStriders_Timer = 10000+rand()%5000;
@@ -70,13 +70,11 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
boss_kelidan_the_breakerAI(Creature *c) : ScriptedAI(c) boss_kelidan_the_breakerAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
for (uint8 i=0; i<5; ++i) for (uint8 i=0; i<5; ++i)
Channelers[i] = 0; Channelers[i] = 0;
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint32 ShadowVolley_Timer; uint32 ShadowVolley_Timer;
uint32 BurningNova_Timer; uint32 BurningNova_Timer;
@@ -203,7 +201,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
{ {
if (Firenova_Timer <= diff) if (Firenova_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_FIRE_NOVA, H_SPELL_FIRE_NOVA), true); DoCast(m_creature, DUNGEON_MODE(SPELL_FIRE_NOVA, H_SPELL_FIRE_NOVA), true);
Firenova = false; Firenova = false;
ShadowVolley_Timer = 2000; ShadowVolley_Timer = 2000;
} else Firenova_Timer -=diff; } else Firenova_Timer -=diff;
@@ -213,7 +211,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
if (ShadowVolley_Timer <= diff) if (ShadowVolley_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_SHADOW_BOLT_VOLLEY, H_SPELL_SHADOW_BOLT_VOLLEY)); DoCast(m_creature, DUNGEON_MODE(SPELL_SHADOW_BOLT_VOLLEY, H_SPELL_SHADOW_BOLT_VOLLEY));
ShadowVolley_Timer = 5000+rand()%8000; ShadowVolley_Timer = 5000+rand()%8000;
} else ShadowVolley_Timer -=diff; } else ShadowVolley_Timer -=diff;
@@ -236,7 +234,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
aura->ApplyForTargets(); aura->ApplyForTargets();
} }
if (HeroicMode) if (IsHeroic())
DoTeleportAll(m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),m_creature->GetOrientation()); DoTeleportAll(m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),m_creature->GetOrientation());
BurningNova_Timer = 20000+rand()%8000; BurningNova_Timer = 20000+rand()%8000;
@@ -271,11 +269,8 @@ struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI
{ {
mob_shadowmoon_channelerAI(Creature *c) : ScriptedAI(c) mob_shadowmoon_channelerAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 ShadowBolt_Timer; uint32 ShadowBolt_Timer;
uint32 MarkOfShadow_Timer; uint32 MarkOfShadow_Timer;
uint32 check_Timer; uint32 check_Timer;
@@ -331,7 +326,7 @@ struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI
if (ShadowBolt_Timer <= diff) if (ShadowBolt_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
ShadowBolt_Timer = 5000+rand()%1000; ShadowBolt_Timer = 5000+rand()%1000;
} else ShadowBolt_Timer -=diff; } else ShadowBolt_Timer -=diff;
@@ -46,11 +46,8 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public ScriptedAI
boss_omor_the_unscarredAI(Creature *c) : ScriptedAI(c) boss_omor_the_unscarredAI(Creature *c) : ScriptedAI(c)
{ {
SetCombatMovement(false); SetCombatMovement(false);
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 OrbitalStrike_Timer; uint32 OrbitalStrike_Timer;
uint32 ShadowWhip_Timer; uint32 ShadowWhip_Timer;
uint32 Aura_Timer; uint32 Aura_Timer;
@@ -171,7 +168,7 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public ScriptedAI
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
{ {
DoCast(pTarget, HEROIC(SPELL_TREACHEROUS_AURA, H_SPELL_BANE_OF_TREACHERY)); DoCast(pTarget, DUNGEON_MODE(SPELL_TREACHEROUS_AURA, H_SPELL_BANE_OF_TREACHERY));
Aura_Timer = 8000+rand()%8000; Aura_Timer = 8000+rand()%8000;
} }
} else Aura_Timer -= diff; } else Aura_Timer -= diff;
@@ -183,7 +180,7 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public ScriptedAI
if (pTarget) if (pTarget)
pTarget = m_creature->getVictim(); pTarget = m_creature->getVictim();
DoCast(pTarget, HEROIC(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT)); DoCast(pTarget, DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT));
Shadowbolt_Timer = 4000+rand()%2500; Shadowbolt_Timer = 4000+rand()%2500;
} }
} else Shadowbolt_Timer -= diff; } else Shadowbolt_Timer -= diff;
@@ -23,11 +23,11 @@ EndScriptData */
#include "precompiled.h" #include "precompiled.h"
#define SPELL_FIREBALL (HeroicMode?36920:34653) #define SPELL_FIREBALL DUNGEON_MODE(34653, 36920)
#define SPELL_CONE_OF_FIRE (HeroicMode?36921:30926) #define SPELL_CONE_OF_FIRE DUNGEON_MODE(30926, 36921)
#define SPELL_SUMMON_LIQUID_FIRE (HeroicMode?30928:23971) #define SPELL_SUMMON_LIQUID_FIRE DUNGEON_MODE(23971, 30928)
#define SPELL_BELLOWING_ROAR 39427 #define SPELL_BELLOWING_ROAR 39427
#define SPELL_REVENGE (HeroicMode?40392:19130) #define SPELL_REVENGE DUNGEON_MODE(19130, 40392)
#define SPELL_KIDNEY_SHOT 30621 #define SPELL_KIDNEY_SHOT 30621
#define SPELL_FIRE_NOVA_VISUAL 19823 #define SPELL_FIRE_NOVA_VISUAL 19823
@@ -36,7 +36,7 @@ EndScriptData */
#define ENTRY_VAZRUDEN 17537 #define ENTRY_VAZRUDEN 17537
#define ENTRY_NAZAN 17536 #define ENTRY_NAZAN 17536
#define ENTRY_LIQUID_FIRE 22515 #define ENTRY_LIQUID_FIRE 22515
#define ENTRY_REINFORCED_FEL_IRON_CHEST (HeroicMode?185169:185168) #define ENTRY_REINFORCED_FEL_IRON_CHEST DUNGEON_MODE(185168, 185169)
#define SAY_INTRO -1543017 #define SAY_INTRO -1543017
#define SAY_WIPE -1543018 #define SAY_WIPE -1543018
@@ -61,7 +61,6 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
{ {
boss_nazanAI(Creature *c) : ScriptedAI(c) boss_nazanAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
VazrudenGUID = 0; VazrudenGUID = 0;
flight = true; flight = true;
} }
@@ -74,7 +73,6 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
uint32 UnsummonCheck; uint32 UnsummonCheck;
bool flight; bool flight;
uint64 VazrudenGUID; uint64 VazrudenGUID;
bool HeroicMode;
SpellEntry *liquid_fire; SpellEntry *liquid_fire;
void Reset() void Reset()
@@ -157,11 +155,12 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
Fireball_Timer = 4000; Fireball_Timer = 4000;
} else ConeOfFire_Timer -= diff; } else ConeOfFire_Timer -= diff;
if (HeroicMode && BellowingRoar_Timer <= diff) if (IsHeroic())
{ if (BellowingRoar_Timer <= diff)
DoCast(m_creature, SPELL_BELLOWING_ROAR); {
BellowingRoar_Timer = 45000; DoCast(m_creature, SPELL_BELLOWING_ROAR);
} else BellowingRoar_Timer -= diff; BellowingRoar_Timer = 45000;
} else BellowingRoar_Timer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -172,11 +171,9 @@ struct TRINITY_DLL_DECL boss_vazrudenAI : public ScriptedAI
{ {
boss_vazrudenAI(Creature *c) : ScriptedAI(c) boss_vazrudenAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 Revenge_Timer; uint32 Revenge_Timer;
bool HeroicMode;
bool WipeSaid; bool WipeSaid;
uint32 UnsummonCheck; uint32 UnsummonCheck;
@@ -239,7 +236,6 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI
sentryDown = false; sentryDown = false;
NazanGUID = 0; NazanGUID = 0;
VazrudenGUID = 0; VazrudenGUID = 0;
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
uint32 phase; uint32 phase;
@@ -249,7 +245,6 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI
uint64 NazanGUID; uint64 NazanGUID;
uint64 VazrudenGUID; uint64 VazrudenGUID;
bool summoned; bool summoned;
bool HeroicMode;
void Reset() void Reset()
{ {
@@ -42,11 +42,8 @@ struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
{ {
boss_watchkeeper_gargolmarAI(Creature *c) : ScriptedAI(c) boss_watchkeeper_gargolmarAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = m_creature->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 Surge_Timer; uint32 Surge_Timer;
uint32 MortalWound_Timer; uint32 MortalWound_Timer;
uint32 Retaliation_Timer; uint32 Retaliation_Timer;
@@ -107,7 +104,7 @@ struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
if (MortalWound_Timer <= diff) if (MortalWound_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_MORTAL_WOUND, H_SPELL_MORTAL_WOUND)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MORTAL_WOUND, H_SPELL_MORTAL_WOUND));
MortalWound_Timer = 5000+rand()%8000; MortalWound_Timer = 5000+rand()%8000;
} else MortalWound_Timer -= diff; } else MortalWound_Timer -= diff;
@@ -78,11 +78,9 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c) boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
bool IntroOnce; bool IntroOnce;
bool IsIntroEvent; bool IsIntroEvent;
@@ -255,7 +253,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
if (Cleave_Timer <= diff) if (Cleave_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_SHADOW_CLEAVE, H_SPELL_SHADOW_SLAM)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_CLEAVE, H_SPELL_SHADOW_SLAM));
Cleave_Timer = 6000+rand()%2500; Cleave_Timer = 6000+rand()%2500;
} else Cleave_Timer -= diff; } else Cleave_Timer -= diff;
} }
@@ -138,11 +138,9 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
LeftHeadGUID = 0; LeftHeadGUID = 0;
RightHeadGUID = 0; RightHeadGUID = 0;
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool HeroicMode;
uint64 LeftHeadGUID; uint64 LeftHeadGUID;
uint64 RightHeadGUID; uint64 RightHeadGUID;
@@ -346,7 +344,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
if (BurningMaul_Timer <= diff) if (BurningMaul_Timer <= diff)
{ {
DoScriptText(EMOTE_ENRAGE, m_creature); DoScriptText(EMOTE_ENRAGE, m_creature);
DoCast(m_creature, HEROIC(SPELL_BURNING_MAUL, H_SPELL_BURNING_MAUL)); DoCast(m_creature, DUNGEON_MODE(SPELL_BURNING_MAUL, H_SPELL_BURNING_MAUL));
BurningMaul_Timer = 40000; BurningMaul_Timer = 40000;
BlastWave_Timer = 16000; BlastWave_Timer = 16000;
BlastCount = 1; BlastCount = 1;
@@ -52,11 +52,8 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
{ {
boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c) boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
std::vector<uint64> adds; std::vector<uint64> adds;
std::vector<uint64> assassins; std::vector<uint64> assassins;
@@ -202,10 +199,10 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
// stop bladedance // stop bladedance
InBlade = false; InBlade = false;
m_creature->SetSpeed(MOVE_RUN,2); m_creature->SetSpeed(MOVE_RUN,2);
(*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim()); m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
Blade_Dance_Timer = 30000; Blade_Dance_Timer = 30000;
Wait_Timer = 0; Wait_Timer = 0;
if (HeroicMode) if (IsHeroic())
Charge_timer = 5000; Charge_timer = 5000;
} }
else else
@@ -216,7 +213,7 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
randy = (rand()%40); randy = (rand()%40);
x = 210+ randx ; x = 210+ randx ;
y = -60- randy ; y = -60- randy ;
(*m_creature).GetMotionMaster()->MovePoint(1,x,y,m_creature->GetPositionZ()); m_creature->GetMotionMaster()->MovePoint(1,x,y,m_creature->GetPositionZ());
Wait_Timer = 0; Wait_Timer = 0;
} }
} else Wait_Timer -= diff; } else Wait_Timer -= diff;
@@ -58,12 +58,10 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
boss_harbinger_skyrissAI(Creature *c) : ScriptedAI(c) boss_harbinger_skyrissAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
Intro = false; Intro = false;
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
bool Intro; bool Intro;
bool IsImage33; bool IsImage33;
@@ -199,9 +197,9 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
if (MindRend_Timer <= diff) if (MindRend_Timer <= diff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1))
DoCast(pTarget, HEROIC(SPELL_MIND_REND, H_SPELL_MIND_REND)); DoCast(pTarget, DUNGEON_MODE(SPELL_MIND_REND, H_SPELL_MIND_REND));
else else
DoCast(m_creature->getVictim(), HEROIC(SPELL_MIND_REND, H_SPELL_MIND_REND)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MIND_REND, H_SPELL_MIND_REND));
MindRend_Timer = 8000; MindRend_Timer = 8000;
} else MindRend_Timer -=diff; } else MindRend_Timer -=diff;
@@ -229,14 +227,14 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
DoScriptText(RAND(SAY_MIND_1,SAY_MIND_2), m_creature); DoScriptText(RAND(SAY_MIND_1,SAY_MIND_2), m_creature);
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1))
DoCast(pTarget, HEROIC(SPELL_DOMINATION, H_SPELL_DOMINATION)); DoCast(pTarget, DUNGEON_MODE(SPELL_DOMINATION, H_SPELL_DOMINATION));
else else
DoCast(m_creature->getVictim(), HEROIC(SPELL_DOMINATION, H_SPELL_DOMINATION)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_DOMINATION, H_SPELL_DOMINATION));
Domination_Timer = 16000+rand()%16000; Domination_Timer = 16000+rand()%16000;
} else Domination_Timer -=diff; } else Domination_Timer -=diff;
if (HeroicMode) if (IsHeroic())
{ {
if (ManaBurn_Timer <= diff) if (ManaBurn_Timer <= diff)
{ {
@@ -266,11 +264,8 @@ struct TRINITY_DLL_DECL boss_harbinger_skyriss_illusionAI : public ScriptedAI
{ {
boss_harbinger_skyriss_illusionAI(Creature *c) : ScriptedAI(c) boss_harbinger_skyriss_illusionAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
void Reset() { } void Reset() { }
void EnterCombat(Unit *who) { } void EnterCombat(Unit *who) { }
@@ -88,7 +88,7 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI
#define WAR_STOMP 34716 #define WAR_STOMP 34716
#define SUMMON_TREANTS 34727 // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon) #define SUMMON_TREANTS 34727 // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon)
#define ARCANE_VOLLEY (HeroicMode?39133:36705) #define ARCANE_VOLLEY DUNGEON_MODE(36705, 39133)
#define CREATURE_TREANT 19949 #define CREATURE_TREANT 19949
@@ -108,7 +108,6 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
{ {
boss_warp_splinterAI(Creature *c) : ScriptedAI(c) boss_warp_splinterAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
Treant_Spawn_Pos_X = c->GetPositionX(); Treant_Spawn_Pos_X = c->GetPositionX();
Treant_Spawn_Pos_Y = c->GetPositionY(); Treant_Spawn_Pos_Y = c->GetPositionY();
} }
@@ -116,7 +115,6 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
uint32 War_Stomp_Timer; uint32 War_Stomp_Timer;
uint32 Summon_Treants_Timer; uint32 Summon_Treants_Timer;
uint32 Arcane_Volley_Timer; uint32 Arcane_Volley_Timer;
bool HeroicMode;
float Treant_Spawn_Pos_X; float Treant_Spawn_Pos_X;
float Treant_Spawn_Pos_Y; float Treant_Spawn_Pos_Y;
@@ -44,11 +44,8 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI
{ {
boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c)
{ {
HeroicMode = c->GetMap()->IsHeroic();
} }
bool HeroicMode;
uint32 Shadow_Power_Timer; uint32 Shadow_Power_Timer;
uint32 Jackhammer_Timer; uint32 Jackhammer_Timer;
uint32 Stream_of_Machine_Fluid_Timer; uint32 Stream_of_Machine_Fluid_Timer;
@@ -88,7 +85,7 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI
//Shadow Power //Shadow Power
if (Shadow_Power_Timer <= diff) if (Shadow_Power_Timer <= diff)
{ {
DoCast(m_creature, HEROIC(SPELL_SHADOW_POWER, H_SPELL_SHADOW_POWER)); DoCast(m_creature, DUNGEON_MODE(SPELL_SHADOW_POWER, H_SPELL_SHADOW_POWER));
Shadow_Power_Timer = 20000 + rand()%8000; Shadow_Power_Timer = 20000 + rand()%8000;
} else Shadow_Power_Timer -= diff; } else Shadow_Power_Timer -= diff;
@@ -97,7 +94,7 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI
{ {
//TODO: expect cast this about 5 times in a row (?), announce it by emote only once //TODO: expect cast this about 5 times in a row (?), announce it by emote only once
DoScriptText(EMOTE_HAMMER, m_creature); DoScriptText(EMOTE_HAMMER, m_creature);
DoCast(m_creature->getVictim(), HEROIC(SPELL_JACKHAMMER, H_SPELL_JACKHAMMER)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_JACKHAMMER, H_SPELL_JACKHAMMER));
//chance to yell, but not same time as emote (after spell in fact casted) //chance to yell, but not same time as emote (after spell in fact casted)
if (rand()%2) if (rand()%2)
@@ -46,13 +46,10 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
HeroicMode = c->GetMap()->IsHeroic();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 frost_attack_Timer; uint32 frost_attack_Timer;
uint32 arcane_blast_Timer; uint32 arcane_blast_Timer;
uint32 dragons_breath_Timer; uint32 dragons_breath_Timer;
@@ -77,7 +74,7 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
pInstance->SetData(DATA_NETHERMANCER_EVENT, IN_PROGRESS); pInstance->SetData(DATA_NETHERMANCER_EVENT, IN_PROGRESS);
DoScriptText(SAY_AGGRO, m_creature); DoScriptText(SAY_AGGRO, m_creature);
DoCast(who, HEROIC(SPELL_SUMMON_RAGIN_FLAMES, H_SPELL_SUMMON_RAGIN_FLAMES)); DoCast(who, DUNGEON_MODE(SPELL_SUMMON_RAGIN_FLAMES, H_SPELL_SUMMON_RAGIN_FLAMES));
DoScriptText(SAY_SUMMON, m_creature); DoScriptText(SAY_SUMMON, m_creature);
} }
@@ -158,13 +155,11 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI
{ {
mob_ragin_flamesAI(Creature *c) : ScriptedAI(c) mob_ragin_flamesAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); HeroicMode = m_creature->GetMap()->IsHeroic(); pInstance = c->GetInstanceData();
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
bool HeroicMode;
uint32 inferno_Timer; uint32 inferno_Timer;
uint32 flame_timer; uint32 flame_timer;
uint32 Check_Timer; uint32 Check_Timer;
@@ -179,7 +174,7 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI
onlyonce = false; onlyonce = false;
m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
m_creature->SetSpeed(MOVE_RUN, HeroicMode ? 0.7f : 0.5f); m_creature->SetSpeed(MOVE_RUN, DUNGEON_MODE(0.5f, 0.7f));
} }
void EnterCombat(Unit* who) void EnterCombat(Unit* who)
@@ -215,7 +210,7 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI
if (inferno_Timer <= diff) if (inferno_Timer <= diff)
{ {
DoCast(m_creature->getVictim(), HEROIC(SPELL_INFERNO, H_SPELL_INFERNO)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFERNO, H_SPELL_INFERNO));
m_creature->TauntApply(m_creature->getVictim()); m_creature->TauntApply(m_creature->getVictim());
inferno_Timer = 10000; inferno_Timer = 10000;
} else inferno_Timer -= diff; } else inferno_Timer -= diff;

Some files were not shown because too many files have changed in this diff Show More