convert Magtheridons Lair and Shattered Halls to new format

--HG--
branch : trunk
This commit is contained in:
Supabad
2010-08-08 00:49:40 +02:00
parent d3712984c1
commit c260b3f778
6 changed files with 1721 additions and 1549 deletions
@@ -41,58 +41,75 @@ static Yell RandomTaunt[]=
{-1544005},
};
#define SAY_FREED -1544006
#define SAY_AGGRO -1544007
#define SAY_BANISH -1544008
#define SAY_CHAMBER_DESTROY -1544009
#define SAY_PLAYER_KILLED -1544010
#define SAY_DEATH -1544011
enum eSays
{
SAY_FREED = -1544006,
SAY_AGGRO = -1544007,
SAY_BANISH = -1544008,
SAY_CHAMBER_DESTROY = -1544009,
SAY_PLAYER_KILLED = -1544010,
SAY_DEATH = -1544011,
};
#define EMOTE_BERSERK -1544012
#define EMOTE_BLASTNOVA -1544013
#define EMOTE_BEGIN -1544014
enum eEmotes
{
EMOTE_BERSERK = -1544012,
EMOTE_BLASTNOVA = -1544013,
EMOTE_BEGIN = -1544014,
};
#define MOB_MAGTHERIDON 17257
#define MOB_ROOM 17516
#define MOB_CHANNELLER 17256
#define MOB_ABYSSAL 17454
enum eCreatures
{
MOB_MAGTHERIDON = 17257,
MOB_ROOM = 17516,
MOB_CHANNELLER = 17256,
MOB_ABYSSAL = 17454,
};
#define SPELL_BLASTNOVA 30616
#define SPELL_CLEAVE 30619
#define SPELL_QUAKE_TRIGGER 30657 // must be cast with 30561 as the proc spell
#define SPELL_QUAKE_KNOCKBACK 30571
#define SPELL_BLAZE_TARGET 30541 // core bug, does not support target 7
#define SPELL_BLAZE_TRAP 30542
#define SPELL_DEBRIS_KNOCKDOWN 36449
#define SPELL_DEBRIS_VISUAL 30632
#define SPELL_DEBRIS_DAMAGE 30631 // core bug, does not support target 8
#define SPELL_CAMERA_SHAKE 36455
#define SPELL_BERSERK 27680
enum eSpells
{
SPELL_BLASTNOVA = 30616,
SPELL_CLEAVE = 30619,
SPELL_QUAKE_TRIGGER = 30657, //must be cast with 30561 as the proc spell
SPELL_QUAKE_KNOCKBACK = 30571,
SPELL_BLAZE_TARGET = 30541, //core bug, does not support target 7
SPELL_BLAZE_TRAP = 30542,
SPELL_DEBRIS_KNOCKDOWN = 36449,
SPELL_DEBRIS_VISUAL = 30632,
SPELL_DEBRIS_DAMAGE = 30631, //core bug, does not support target 8
SPELL_CAMERA_SHAKE = 36455,
SPELL_BERSERK = 27680,
SPELL_SHADOW_CAGE = 30168,
SPELL_SHADOW_GRASP = 30410,
SPELL_SHADOW_GRASP_VISUAL = 30166,
SPELL_MIND_EXHAUSTION = 44032, //Casted by the cubes when channeling ends
SPELL_SHADOW_CAGE_C = 30205,
SPELL_SHADOW_GRASP_C = 30207,
SPELL_SHADOW_BOLT_VOLLEY = 30510,
SPELL_DARK_MENDING = 30528,
SPELL_FEAR = 30530, //39176
SPELL_BURNING_ABYSSAL = 30511,
SPELL_SOUL_TRANSFER = 30531, //core bug, does not support target 7
SPELL_FIRE_BLAST = 37110,
};
#define SPELL_SHADOW_CAGE 30168
#define SPELL_SHADOW_GRASP 30410
#define SPELL_SHADOW_GRASP_VISUAL 30166
#define SPELL_MIND_EXHAUSTION 44032 //Casted by the cubes when channeling ends
#define SPELL_SHADOW_CAGE_C 30205
#define SPELL_SHADOW_GRASP_C 30207
#define SPELL_SHADOW_BOLT_VOLLEY 30510
#define SPELL_DARK_MENDING 30528
#define SPELL_FEAR 30530 //39176
#define SPELL_BURNING_ABYSSAL 30511
#define SPELL_SOUL_TRANSFER 30531 // core bug, does not support target 7
#define SPELL_FIRE_BLAST 37110
// count of clickers needed to interrupt blast nova
//count of clickers needed to interrupt blast nova
#define CLICKERS_COUNT 5
typedef std::map<uint64, uint64> CubeMap;
struct mob_abyssalAI : public ScriptedAI
class mob_abyssal : public CreatureScript
{
mob_abyssalAI(Creature *c) : ScriptedAI(c)
public:
mob_abyssal()
: CreatureScript("mob_abyssal")
{
}
struct mob_abyssalAI : public ScriptedAI
{
mob_abyssalAI(Creature* pCreature) : ScriptedAI(pCreature)
{
trigger = 0;
Despawn_Timer = 60000;
@@ -130,9 +147,20 @@ struct mob_abyssalAI : public ScriptedAI
}
}
void EnterCombat(Unit* /*who*/) {DoZoneInCombat();}
void AttackStart(Unit *who) {if (!trigger) ScriptedAI::AttackStart(who);}
void MoveInLineOfSight(Unit *who) {if (!trigger) ScriptedAI::MoveInLineOfSight(who);}
void EnterCombat(Unit* /*who*/)
{
DoZoneInCombat();
}
void AttackStart(Unit *who)
{
if (!trigger)
ScriptedAI::AttackStart(who);
}
void MoveInLineOfSight(Unit *who)
{
if (!trigger)
ScriptedAI::MoveInLineOfSight(who);
}
void UpdateAI(const uint32 diff)
{
@@ -144,7 +172,8 @@ struct mob_abyssalAI : public ScriptedAI
{
DoCast(me, SPELL_DEBRIS_DAMAGE, true);
trigger = 3;
} else FireBlast_Timer -= diff;
}
else FireBlast_Timer -= diff;
}
return;
}
@@ -152,7 +181,8 @@ struct mob_abyssalAI : public ScriptedAI
if (Despawn_Timer <= diff)
{
me->ForcedDespawn();
} else Despawn_Timer -= diff;
}
else Despawn_Timer -= diff;
if (!UpdateVictim())
return;
@@ -161,17 +191,33 @@ struct mob_abyssalAI : public ScriptedAI
{
DoCast(me->getVictim(), SPELL_FIRE_BLAST);
FireBlast_Timer = 5000+rand()%10000;
} else FireBlast_Timer -= diff;
}
else FireBlast_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new mob_abyssalAI(Creature);
}
};
struct boss_magtheridonAI : public ScriptedAI
class boss_magtheridon : public CreatureScript
{
boss_magtheridonAI(Creature *c) : ScriptedAI(c)
public:
boss_magtheridon()
: CreatureScript("boss_magtheridon")
{
pInstance = c->GetInstanceData();
}
struct boss_magtheridonAI : public ScriptedAI
{
boss_magtheridonAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
@@ -266,7 +312,9 @@ struct boss_magtheridonAI : public ScriptedAI
{
DebuffClicker(clicker);
(*i).second = 0;
} else ++ClickerNum;
}
else
++ClickerNum;
}
// if 5 clickers from other cubes apply shadow cage
@@ -275,10 +323,12 @@ struct boss_magtheridonAI : public ScriptedAI
DoScriptText(SAY_BANISH, me);
DoCast(me, SPELL_SHADOW_CAGE, true);
}
else if (ClickerNum < CLICKERS_COUNT && me->HasAura(SPELL_SHADOW_CAGE))
else
if (ClickerNum < CLICKERS_COUNT && me->HasAura(SPELL_SHADOW_CAGE))
me->RemoveAurasDueToSpell(SPELL_SHADOW_CAGE);
if (!ClickerNum) NeedCheckCube = false;
if (!ClickerNum)
NeedCheckCube = false;
}
void KilledUnit(Unit* /*victim*/)
@@ -322,7 +372,9 @@ struct boss_magtheridonAI : public ScriptedAI
{
DoScriptText(RandomTaunt[rand()%6].id, me);
RandChat_Timer = 90000;
} else RandChat_Timer -= diff;
}
else
RandChat_Timer -= diff;
}
if (!UpdateVictim())
@@ -335,13 +387,17 @@ struct boss_magtheridonAI : public ScriptedAI
DoCast(me, SPELL_BERSERK, true);
DoScriptText(EMOTE_BERSERK, me);
Berserk_Timer = 60000;
} else Berserk_Timer -= diff;
}
else
Berserk_Timer -= diff;
if (Cleave_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
Cleave_Timer = 10000;
} else Cleave_Timer -= diff;
}
else
Cleave_Timer -= diff;
if (BlastNova_Timer <= diff)
{
@@ -352,7 +408,9 @@ struct boss_magtheridonAI : public ScriptedAI
DoCast(me, SPELL_BLASTNOVA);
BlastNova_Timer = 60000;
}
} else BlastNova_Timer -= diff;
}
else
BlastNova_Timer -= diff;
if (Quake_Timer <= diff)
{
@@ -362,7 +420,9 @@ struct boss_magtheridonAI : public ScriptedAI
DoCast(me, SPELL_QUAKE_TRIGGER, true);
Quake_Timer = 50000;
}
} else Quake_Timer -= diff;
}
else
Quake_Timer -= diff;
if (Blaze_Timer <= diff)
{
@@ -373,13 +433,15 @@ struct boss_magtheridonAI : public ScriptedAI
Creature *summon = me->SummonCreature(MOB_ABYSSAL, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (summon)
{
CAST_AI(mob_abyssalAI, summon->AI())->SetTrigger(2);
CAST_AI(mob_abyssal::mob_abyssalAI, summon->AI())->SetTrigger(2);
DoCast(summon, SPELL_BLAZE_TARGET, true);
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
}
Blaze_Timer = 20000 + rand()%20000;
} else Blaze_Timer -= diff;
}
else
Blaze_Timer -= diff;
if (!Phase3 && me->GetHealth()*10 < me->GetMaxHealth()*3
&& !me->IsNonMeleeSpellCasted(false) // blast nova
@@ -403,21 +465,39 @@ struct boss_magtheridonAI : public ScriptedAI
float x, y, z;
pTarget->GetPosition(x, y, z);
Creature *summon = me->SummonCreature(MOB_ABYSSAL, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
if (summon) CAST_AI(mob_abyssalAI, summon->AI())->SetTrigger(1);
if (summon)
CAST_AI(mob_abyssal::mob_abyssalAI, summon->AI())->SetTrigger(1);
}
Debris_Timer = 10000;
} else Debris_Timer -= diff;
}
else
Debris_Timer -= diff;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new boss_magtheridonAI(Creature);
}
};
struct mob_hellfire_channelerAI : public ScriptedAI
class mob_hellfire_channeler : public CreatureScript
{
mob_hellfire_channelerAI(Creature *c) : ScriptedAI(c)
public:
mob_hellfire_channeler()
: CreatureScript("mob_hellfire_channeler")
{
pInstance =me->GetInstanceData();
}
struct mob_hellfire_channelerAI : public ScriptedAI
{
mob_hellfire_channelerAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
}
ScriptedInstance* pInstance;
@@ -482,42 +562,67 @@ struct mob_hellfire_channelerAI : public ScriptedAI
{
DoCast(me, SPELL_SHADOW_BOLT_VOLLEY);
ShadowBoltVolley_Timer = 10000 + rand()%10000;
} else ShadowBoltVolley_Timer -= diff;
}
else
ShadowBoltVolley_Timer -= diff;
if (DarkMending_Timer <= diff)
{
if ((me->GetHealth()*100 / me->GetMaxHealth()) < 50)
DoCast(me, SPELL_DARK_MENDING);
DarkMending_Timer = 10000 +(rand() % 10000);
} else DarkMending_Timer -= diff;
}
else
DarkMending_Timer -= diff;
if (Fear_Timer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1))
DoCast(pTarget, SPELL_FEAR);
Fear_Timer = 25000 + rand()%15000;
} else Fear_Timer -= diff;
}
else
Fear_Timer -= diff;
if (Infernal_Timer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_BURNING_ABYSSAL, true);
Infernal_Timer = 30000 + rand()%10000;
} else Infernal_Timer -= diff;
}
else
Infernal_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new mob_hellfire_channelerAI(Creature);
}
};
//Manticron Cube
bool GOHello_go_Manticron_Cube(Player* pPlayer, GameObject* pGo)
class go_manticron_cube : public GameObjectScript
{
ScriptedInstance* pInstance = pGo->GetInstanceData();
public:
go_manticron_cube() : GameObjectScript("go_manticron_cube")
{
}
bool OnGossipHello(Player *pPlayer, GameObject * pGO)
{
ScriptedInstance* pInstance = pGO->GetInstanceData();
if (!pInstance)
return true;
if (pInstance->GetData(DATA_MAGTHERIDON_EVENT) != IN_PROGRESS) return true;
Creature *Magtheridon =Unit::GetCreature(*pGo, pInstance->GetData64(DATA_MAGTHERIDON));
if (!Magtheridon || !Magtheridon->isAlive()) return true;
if (pInstance->GetData(DATA_MAGTHERIDON_EVENT) != IN_PROGRESS)
return true;
Creature *Magtheridon =Unit::GetCreature(*pGO, pInstance->GetData64(DATA_MAGTHERIDON));
if (!Magtheridon || !Magtheridon->isAlive())
return true;
// if exhausted or already channeling return
if (pPlayer->HasAura(SPELL_MIND_EXHAUSTION) || pPlayer->HasAura(SPELL_SHADOW_GRASP))
@@ -526,47 +631,16 @@ bool GOHello_go_Manticron_Cube(Player* pPlayer, GameObject* pGo)
pPlayer->InterruptNonMeleeSpells(false);
pPlayer->CastSpell(pPlayer, SPELL_SHADOW_GRASP, true);
pPlayer->CastSpell(pPlayer, SPELL_SHADOW_GRASP_VISUAL, false);
CAST_AI(boss_magtheridonAI, Magtheridon->AI())->SetClicker(pGo->GetGUID(), pPlayer->GetGUID());
CAST_AI(boss_magtheridon::boss_magtheridonAI, Magtheridon->AI())->SetClicker(pGO->GetGUID(), pPlayer->GetGUID());
return true;
}
CreatureAI* GetAI_boss_magtheridon(Creature* pCreature)
{
return new boss_magtheridonAI(pCreature);
}
CreatureAI* GetAI_mob_hellfire_channeler(Creature* pCreature)
{
return new mob_hellfire_channelerAI(pCreature);
}
CreatureAI* GetAI_mob_abyssalAI(Creature* pCreature)
{
return new mob_abyssalAI(pCreature);
}
}
};
void AddSC_boss_magtheridon()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_magtheridon";
newscript->GetAI = &GetAI_boss_magtheridon;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_hellfire_channeler";
newscript->GetAI = &GetAI_mob_hellfire_channeler;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "go_manticron_cube";
newscript->pGOHello = &GOHello_go_Manticron_Cube;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_abyssal";
newscript->GetAI = &GetAI_mob_abyssalAI;
newscript->RegisterSelf();
new boss_magtheridon();
new mob_hellfire_channeler();
new mob_abyssal();
new go_manticron_cube();
}
@@ -26,8 +26,11 @@ EndScriptData */
#include "ScriptPCH.h"
#include "magtheridons_lair.h"
#define SPELL_SOUL_TRANSFER 30531 // core bug, does not support target 7
#define SPELL_BLAZE_TARGET 30541 // core bug, does not support target 7
enum eSpells
{
SPELL_SOUL_TRANSFER = 30531, // core bug, does not support target 7
SPELL_BLAZE_TARGET = 30541, // core bug, does not support target 7
};
#define CHAMBER_CENTER_X -15.14
#define CHAMBER_CENTER_Y 1.8
@@ -37,9 +40,17 @@ EndScriptData */
#define EMOTE_BONDS_WEAKEN "'s bonds begin to weaken!"
struct instance_magtheridons_lair : public ScriptedInstance
class instance_magtheridons_lair : public InstanceMapScript
{
instance_magtheridons_lair(Map* pMap) : ScriptedInstance(pMap)
public:
instance_magtheridons_lair()
: InstanceMapScript("instance_magtheridons_lair")
{
}
struct instance_magtheridons_lair_InstanceMapScript : public ScriptedInstance
{
instance_magtheridons_lair_InstanceMapScript(Map* pMap) : ScriptedInstance(pMap)
{
Initialize();
}
@@ -238,19 +249,17 @@ struct instance_magtheridons_lair : public ScriptedInstance
} else RespawnTimer -= diff;
}
}
};
InstanceData* GetInstanceData(Map* pMap) const
{
return new instance_magtheridons_lair_InstanceMapScript(pMap);
}
};
InstanceData* GetInstanceData_instance_magtheridons_lair(Map* pMap)
{
return new instance_magtheridons_lair(pMap);
}
void AddSC_instance_magtheridons_lair()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_magtheridons_lair";
newscript->GetInstanceData = &GetInstanceData_instance_magtheridons_lair;
newscript->RegisterSelf();
new instance_magtheridons_lair();
}
@@ -52,34 +52,46 @@ static Say PeonDies[]=
{-1540008},
};
#define SAY_INTRO -1540000
#define SAY_TAUNT_1 -1540009
#define SAY_TAUNT_2 -1540010
#define SAY_TAUNT_3 -1540011
#define SAY_AGGRO_1 -1540012
#define SAY_AGGRO_2 -1540013
#define SAY_AGGRO_3 -1540014
#define SAY_SLAY_1 -1540015
#define SAY_SLAY_2 -1540016
#define SAY_DIE -1540017
#define SPELL_DEATH_COIL 30500
#define SPELL_DARK_SPIN 30502 // core bug spell attack caster :D
#define SPELL_SHADOW_FISSURE 30496 // Summon the ShadowFissure NPC
#define SPELL_SHADOW_CLEAVE 30495
#define H_SPELL_SHADOW_SLAM 35953
#define SPELL_HEMORRHAGE 30478
#define SPELL_CONSUMPTION 30497
#define SPELL_TEMPORARY_VISUAL 39312 // this is wrong, a temporary solution. spell consumption already has the purple visual, but doesn't display as it should
struct boss_grand_warlock_nethekurseAI : public ScriptedAI
enum eSays
{
boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c)
SAY_INTRO = -1540000,
SAY_TAUNT_1 = -1540009,
SAY_TAUNT_2 = -1540010,
SAY_TAUNT_3 = -1540011,
SAY_AGGRO_1 = -1540012,
SAY_AGGRO_2 = -1540013,
SAY_AGGRO_3 = -1540014,
SAY_SLAY_1 = -1540015,
SAY_SLAY_2 = -1540016,
SAY_DIE = -1540017,
};
enum eSpells
{
SPELL_DEATH_COIL = 30500,
SPELL_DARK_SPIN = 30502, // core bug spell attack caster :D
SPELL_SHADOW_FISSURE = 30496, // Summon the ShadowFissure NPC
SPELL_SHADOW_CLEAVE = 30495,
H_SPELL_SHADOW_SLAM = 35953,
SPELL_HEMORRHAGE = 30478,
SPELL_CONSUMPTION = 30497,
SPELL_TEMPORARY_VISUAL = 39312, // this is wrong, a temporary solution. spell consumption already has the purple visual, but doesn't display as it should
};
class boss_grand_warlock_nethekurse : public CreatureScript
{
public:
boss_grand_warlock_nethekurse()
: CreatureScript("boss_grand_warlock_nethekurse")
{
pInstance = c->GetInstanceData();
}
struct boss_grand_warlock_nethekurseAI : public ScriptedAI
{
boss_grand_warlock_nethekurseAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
}
ScriptedInstance* pInstance;
@@ -257,7 +269,9 @@ struct boss_grand_warlock_nethekurseAI : public ScriptedAI
{
DoCast(me->getVictim(), SPELL_SHADOW_CLEAVE);
Cleave_Timer = 6000+rand()%2500;
} else Cleave_Timer -= diff;
}
else
Cleave_Timer -= diff;
}
else
{
@@ -266,14 +280,18 @@ struct boss_grand_warlock_nethekurseAI : public ScriptedAI
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_SHADOW_FISSURE);
ShadowFissure_Timer = urand(7500,15000);
} else ShadowFissure_Timer -= diff;
}
else
ShadowFissure_Timer -= diff;
if (DeathCoil_Timer <= diff)
{
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(pTarget, SPELL_DEATH_COIL);
DeathCoil_Timer = urand(15000,20000);
} else DeathCoil_Timer -= diff;
}
else
DeathCoil_Timer -= diff;
if ((me->GetHealth()*100) / me->GetMaxHealth() <= 20)
Phase = true;
@@ -281,13 +299,29 @@ struct boss_grand_warlock_nethekurseAI : public ScriptedAI
DoMeleeAttackIfReady();
}
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new boss_grand_warlock_nethekurseAI (Creature);
}
};
struct mob_fel_orc_convertAI : public ScriptedAI
class mob_fel_orc_convert : public CreatureScript
{
mob_fel_orc_convertAI(Creature *c) : ScriptedAI(c)
public:
mob_fel_orc_convert()
: CreatureScript("mob_fel_orc_convert")
{
pInstance = c->GetInstanceData();
}
struct mob_fel_orc_convertAI : public ScriptedAI
{
mob_fel_orc_convertAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = pCreature->GetInstanceData();
}
ScriptedInstance* pInstance;
@@ -312,7 +346,7 @@ struct mob_fel_orc_convertAI : public ScriptedAI
Creature *pKurse = Unit::GetCreature(*me,pInstance->GetData64(DATA_NETHEKURSE));
if (pKurse && me->IsWithinDist(pKurse, 45.0f))
{
CAST_AI(boss_grand_warlock_nethekurseAI, pKurse->AI())->DoYellForPeonAggro();
CAST_AI(boss_grand_warlock_nethekurse::boss_grand_warlock_nethekurseAI, pKurse->AI())->DoYellForPeonAggro();
if (pInstance->GetData(TYPE_NETHEKURSE) == IN_PROGRESS)
return;
@@ -331,7 +365,7 @@ struct mob_fel_orc_convertAI : public ScriptedAI
return;
if (pInstance->GetData64(DATA_NETHEKURSE))
if (Creature *pKurse = Unit::GetCreature(*me,pInstance->GetData64(DATA_NETHEKURSE)))
CAST_AI(boss_grand_warlock_nethekurseAI, pKurse->AI())->DoYellForPeonDeath();
CAST_AI(boss_grand_warlock_nethekurse::boss_grand_warlock_nethekurseAI, pKurse->AI())->DoYellForPeonDeath();
}
}
@@ -348,51 +382,44 @@ struct mob_fel_orc_convertAI : public ScriptedAI
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new mob_fel_orc_convertAI (Creature);
}
};
//NOTE: this Creature are also summoned by other spells, for different creatures
struct mob_lesser_shadow_fissureAI : public ScriptedAI
class mob_lesser_shadow_fissure : public CreatureScript
{
mob_lesser_shadow_fissureAI(Creature *c) : ScriptedAI(c) {}
public:
mob_lesser_shadow_fissure()
: CreatureScript("mob_lesser_shadow_fissure")
{
}
struct mob_lesser_shadow_fissureAI : public ScriptedAI
{
mob_lesser_shadow_fissureAI(Creature* pCreature) : ScriptedAI(pCreature) {}
void Reset() { }
void MoveInLineOfSight(Unit * /*who*/) {}
void AttackStart(Unit* /*who*/) {}
void EnterCombat(Unit* /*who*/) {}
};
};
CreatureAI* GetAI_boss_grand_warlock_nethekurse(Creature* pCreature)
{
return new boss_grand_warlock_nethekurseAI (pCreature);
}
CreatureAI* GetAI_mob_fel_orc_convert(Creature* pCreature)
{
return new mob_fel_orc_convertAI (pCreature);
}
CreatureAI* GetAI_mob_lesser_shadow_fissure(Creature* pCreature)
{
CreatureAI* GetAI_mob_lesser_shadow_fissure(Creature* pCreature)
{
return new mob_lesser_shadow_fissureAI (pCreature);
}
}
};
void AddSC_boss_grand_warlock_nethekurse()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_grand_warlock_nethekurse";
newscript->GetAI = &GetAI_boss_grand_warlock_nethekurse;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_fel_orc_convert";
newscript->GetAI = &GetAI_mob_fel_orc_convert;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_lesser_shadow_fissure";
newscript->GetAI = &GetAI_mob_lesser_shadow_fissure;
newscript->RegisterSelf();
new boss_grand_warlock_nethekurse();
new mob_fel_orc_convert();
new mob_lesser_shadow_fissure();
}
@@ -94,15 +94,25 @@ static Yell Killing[]=
{-1540036, NPC_LEFT_HEAD},
{-1540037, NPC_RIGHT_HEAD},
};
static Yell KillingDelay[]=
{
{-1540038, NPC_RIGHT_HEAD},
{-1000000, NPC_LEFT_HEAD},
};
struct mob_omrogg_headsAI : public ScriptedAI
class mob_omrogg_heads : public CreatureScript
{
mob_omrogg_headsAI(Creature *c) : ScriptedAI(c) {}
public:
mob_omrogg_heads()
: CreatureScript("mob_omrogg_heads")
{
}
struct mob_omrogg_headsAI : public ScriptedAI
{
mob_omrogg_headsAI(Creature* pCreature) : ScriptedAI(pCreature) {}
bool DeathYell;
uint32 Death_Timer;
@@ -131,15 +141,30 @@ struct mob_omrogg_headsAI : public ScriptedAI
me->setDeathState(JUST_DIED);
} else Death_Timer -= diff;
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new mob_omrogg_headsAI (Creature);
}
};
struct boss_warbringer_omroggAI : public ScriptedAI
class boss_warbringer_omrogg : public CreatureScript
{
boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c)
public:
boss_warbringer_omrogg()
: CreatureScript("boss_warbringer_omrogg")
{
}
struct boss_warbringer_omroggAI : public ScriptedAI
{
boss_warbringer_omroggAI(Creature* pCreature) : ScriptedAI(pCreature)
{
LeftHeadGUID = 0;
RightHeadGUID = 0;
pInstance = c->GetInstanceData();
pInstance = pCreature->GetInstanceData();
}
ScriptedInstance* pInstance;
@@ -280,7 +305,7 @@ struct boss_warbringer_omroggAI : public ScriptedAI
DoScriptText(YELL_DIE_L, pLeftHead);
CAST_AI(mob_omrogg_headsAI, CAST_CRE(pRightHead)->AI())->DoDeathYell();
CAST_AI(mob_omrogg_heads::mob_omrogg_headsAI, CAST_CRE(pRightHead)->AI())->DoDeathYell();
if (pInstance)
pInstance->SetData(TYPE_OMROGG, DONE);
@@ -341,7 +366,9 @@ struct boss_warbringer_omroggAI : public ScriptedAI
if (BlastCount == 3)
BlastCount = 0;
} else BlastWave_Timer -= diff;
}
else
BlastWave_Timer -= diff;
if (BurningMaul_Timer <= diff)
{
@@ -350,7 +377,9 @@ struct boss_warbringer_omroggAI : public ScriptedAI
BurningMaul_Timer = 40000;
BlastWave_Timer = 16000;
BlastCount = 1;
} else BurningMaul_Timer -= diff;
}
else
BurningMaul_Timer -= diff;
if (ResetThreat_Timer <= diff)
{
@@ -361,46 +390,38 @@ struct boss_warbringer_omroggAI : public ScriptedAI
me->AddThreat(pTarget, 0.0f);
}
ResetThreat_Timer = 25000+rand()%15000;
} else ResetThreat_Timer -= diff;
}
else
ResetThreat_Timer -= diff;
if (Fear_Timer <= diff)
{
DoCast(me, SPELL_FEAR);
Fear_Timer = 15000+rand()%20000;
} else Fear_Timer -= diff;
}
else
Fear_Timer -= diff;
if (ThunderClap_Timer <= diff)
{
DoCast(me, SPELL_THUNDERCLAP);
ThunderClap_Timer = 15000+rand()%15000;
} else ThunderClap_Timer -= diff;
}
else
ThunderClap_Timer -= diff;
DoMeleeAttackIfReady();
}
};
};
CreatureAI* GetAI_boss_warbringer_omrogg(Creature* pCreature)
{
CreatureAI* GetAI_boss_warbringer_omrogg(Creature* pCreature)
{
return new boss_warbringer_omroggAI (pCreature);
}
CreatureAI* GetAI_mob_omrogg_heads(Creature* pCreature)
{
return new mob_omrogg_headsAI (pCreature);
}
}
};
void AddSC_boss_warbringer_omrogg()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_warbringer_omrogg";
newscript->GetAI = &GetAI_boss_warbringer_omrogg;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "mob_omrogg_heads";
newscript->GetAI = &GetAI_mob_omrogg_heads;
newscript->RegisterSelf();
new boss_warbringer_omrogg();
new mob_omrogg_heads();
}
@@ -29,30 +29,48 @@ EndContentData */
#include "ScriptPCH.h"
#define SAY_AGGRO1 -1540042
#define SAY_AGGRO2 -1540043
#define SAY_AGGRO3 -1540044
#define SAY_SLAY1 -1540045
#define SAY_SLAY2 -1540046
#define SAY_DEATH -1540047
enum eSays
{
SAY_AGGRO1 = -1540042,
SAY_AGGRO2 = -1540043,
SAY_AGGRO3 = -1540044,
SAY_SLAY1 = -1540045,
SAY_SLAY2 = -1540046,
SAY_DEATH = -1540047,
};
#define SPELL_BLADE_DANCE 30739
#define H_SPELL_CHARGE 25821
enum eSpells
{
SPELL_BLADE_DANCE = 30739,
H_SPELL_CHARGE = 25821,
};
enum eCreatures
{
MOB_SHATTERED_ASSASSIN = 17695,
MOB_HEARTHEN_GUARD = 17621,
MOB_SHARPSHOOTER_GUARD = 17622,
MOB_REAVER_GUARD = 17623,
};
#define TARGET_NUM 5
#define MOB_SHATTERED_ASSASSIN 17695
#define MOB_HEARTHEN_GUARD 17621
#define MOB_SHARPSHOOTER_GUARD 17622
#define MOB_REAVER_GUARD 17623
float AssassEntrance[3] = {275.136,-84.29,2.3}; // y -8
float AssassExit[3] = {184.233,-84.29,2.3}; // y -8
float AddsEntrance[3] = {306.036,-84.29,1.93};
struct boss_warchief_kargath_bladefistAI : public ScriptedAI
class boss_warchief_kargath_bladefist : public CreatureScript
{
boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c)
public:
boss_warchief_kargath_bladefist()
: CreatureScript("boss_warchief_kargath_bladefist")
{
}
struct boss_warchief_kargath_bladefistAI : public ScriptedAI
{
boss_warchief_kargath_bladefistAI(Creature* pCreature) : ScriptedAI(pCreature)
{
}
@@ -189,7 +207,9 @@ struct boss_warchief_kargath_bladefistAI : public ScriptedAI
{
SpawnAssassin();
Assassins_Timer = 0;
} else Assassins_Timer -= diff;
}
else
Assassins_Timer -= diff;
if (InBlade)
{
@@ -218,7 +238,9 @@ struct boss_warchief_kargath_bladefistAI : public ScriptedAI
me->GetMotionMaster()->MovePoint(1,x,y,me->GetPositionZ());
Wait_Timer = 0;
}
} else Wait_Timer -= diff;
}
else
Wait_Timer -= diff;
}
else
{
@@ -231,14 +253,18 @@ struct boss_warchief_kargath_bladefistAI : public ScriptedAI
Blade_Dance_Timer = 0;
me->SetSpeed(MOVE_RUN,4);
return;
} else Blade_Dance_Timer -= diff;
}
else
Blade_Dance_Timer -= diff;
if (Charge_timer)
if (Charge_timer <= diff)
{
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), H_SPELL_CHARGE);
Charge_timer = 0;
} else Charge_timer -= diff;
}
else
Charge_timer -= diff;
if (Summon_Assistant_Timer <= diff)
{
@@ -246,15 +272,23 @@ struct boss_warchief_kargath_bladefistAI : public ScriptedAI
{
switch (urand(0,2))
{
case 0: me->SummonCreature(MOB_HEARTHEN_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
case 1: me->SummonCreature(MOB_SHARPSHOOTER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
case 2: me->SummonCreature(MOB_REAVER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
case 0:
me->SummonCreature(MOB_HEARTHEN_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000);
break;
case 1:
me->SummonCreature(MOB_SHARPSHOOTER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000);
break;
case 2:
me->SummonCreature(MOB_REAVER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000);
break;
}
}
if (urand(0,9) < 2)
++summoned;
Summon_Assistant_Timer = urand(25000,35000);
} else Summon_Assistant_Timer -= diff;
}
else
Summon_Assistant_Timer -= diff;
DoMeleeAttackIfReady();
}
@@ -270,21 +304,20 @@ struct boss_warchief_kargath_bladefistAI : public ScriptedAI
return;
}
resetcheck_timer = 5000;
} else resetcheck_timer -= diff;
}
else
resetcheck_timer -= diff;
}
};
CreatureAI* GetAI(Creature* Creature) const
{
return new boss_warchief_kargath_bladefistAI (Creature);
}
};
CreatureAI* GetAI_boss_warchief_kargath_bladefist(Creature* pCreature)
{
return new boss_warchief_kargath_bladefistAI (pCreature);
}
void AddSC_boss_warchief_kargath_bladefist()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_warchief_kargath_bladefist";
newscript->GetAI = &GetAI_boss_warchief_kargath_bladefist;
newscript->RegisterSelf();
new boss_warchief_kargath_bladefist();
}
@@ -30,9 +30,16 @@ EndScriptData */
#define DOOR_NETHEKURSE 1
struct instance_shattered_halls : public ScriptedInstance
class instance_shattered_halls : public InstanceMapScript
{
instance_shattered_halls(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
public:
instance_shattered_halls()
: InstanceMapScript("instance_shattered_halls")
{
}
struct instance_shattered_halls_InstanceMapScript : public ScriptedInstance
{
instance_shattered_halls_InstanceMapScript(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint64 nethekurseGUID;
@@ -50,7 +57,9 @@ struct instance_shattered_halls : public ScriptedInstance
{
switch(pGo->GetEntry())
{
case DOOR_NETHEKURSE: nethekurseDoorGUID = pGo->GetGUID(); break;
case DOOR_NETHEKURSE:
nethekurseDoorGUID = pGo->GetGUID();
break;
}
}
@@ -58,7 +67,9 @@ struct instance_shattered_halls : public ScriptedInstance
{
switch(pCreature->GetEntry())
{
case 16807: nethekurseGUID = pCreature->GetGUID(); break;
case 16807:
nethekurseGUID = pCreature->GetGUID();
break;
}
}
@@ -98,19 +109,16 @@ struct instance_shattered_halls : public ScriptedInstance
}
return 0;
}
};
};
InstanceData* GetInstanceData_instance_shattered_halls(Map* pMap)
{
return new instance_shattered_halls(pMap);
}
InstanceData* GetInstanceData(Map* pMap) const
{
return new instance_shattered_halls_InstanceMapScript(pMap);
}
};
void AddSC_instance_shattered_halls()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_shattered_halls";
newscript->GetInstanceData = &GetInstanceData_instance_shattered_halls;
newscript->RegisterSelf();
new instance_shattered_halls();
}