[svn] * Updated more .cpp scripts to use script_texts

- Hellfire Ramparts
 - Blood Furnace
 - Shattered Halls
 - Magtheridon's Lair
 - Steam Vault
* Added random OOC yells to Magtheridon

--HG--
branch : trunk
This commit is contained in:
slg
2008-11-04 16:26:01 -06:00
parent e91816937b
commit d266f7622b
11 changed files with 456 additions and 662 deletions

View File

@@ -17,7 +17,7 @@
/* ScriptData
SDName: Boss_Hydromancer_Thespia
SD%Complete: 80
SDComment: Normal/heroic mode: to be tested. Needs additional adjustments (when instance script is adjusted)
SDComment: Needs additional adjustments (when instance script is adjusted)
SDCategory: Coilfang Resevoir, The Steamvault
EndScriptData */
@@ -29,23 +29,13 @@ EndContentData */
#include "precompiled.h"
#include "def_steam_vault.h"
#define SAY_SUMMON "Surge forth my pets!"
#define SOUND_SUMMON 10360
#define SAY_AGGRO_1 "The depths will consume you!"
#define SOUND_AGGRO_1 10361
#define SAY_AGGRO_2 "Meet your doom, surface dwellers!"
#define SOUND_AGGRO_2 10362
#define SAY_AGGRO_3 "You will drown in blood!"
#define SOUND_AGGRO_3 10363
#define SAY_SLAY_1 "To the depths of oblivion with you!"
#define SOUND_SLAY_1 10364
#define SAY_SLAY_2 "For my lady and master!"
#define SOUND_SLAY_2 10365
#define SAY_DEAD "Our matron will be.. the end of.. you.."
#define SOUND_DEAD 10366
#define SAY_SUMMON -1545000
#define SAY_AGGRO_1 -1545001
#define SAY_AGGRO_2 -1545002
#define SAY_AGGRO_3 -1545003
#define SAY_SLAY_1 -1545004
#define SAY_SLAY_2 -1545005
#define SAY_DEAD -1545006
#define SPELL_LIGHTNING_CLOUD 25033
#define SPELL_LUNG_BURST 31481
@@ -56,6 +46,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
boss_thespiaAI(Creature *c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
@@ -68,35 +59,28 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
void Reset()
{
HeroicMode = m_creature->GetMap()->IsHeroic();
LightningCloud_Timer = 28000;
LungBurst_Timer = 7000;
EnvelopingWinds_Timer = 9000;
if( pInstance ) pInstance->SetData(TYPE_HYDROMANCER_THESPIA, NOT_STARTED);
if (pInstance)
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, NOT_STARTED);
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DEAD, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_DEAD);
DoScriptText(SAY_DEAD, m_creature);
if( pInstance ) pInstance->SetData(TYPE_HYDROMANCER_THESPIA, DONE);
if (pInstance)
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, DONE);
}
void KilledUnit(Unit* victim)
{
switch(rand()%2)
{
case 0:
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_2);
break;
case 0: DoScriptText(SAY_SLAY_1, m_creature); break;
case 1: DoScriptText(SAY_SLAY_2, m_creature); break;
}
}
@@ -104,21 +88,13 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_1);
break;
case 1:
DoYell(SAY_AGGRO_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_2);
break;
case 2:
DoYell(SAY_AGGRO_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_3);
break;
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
if( pInstance ) pInstance->SetData(TYPE_HYDROMANCER_THESPIA, IN_PROGRESS);
if (pInstance)
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, IN_PROGRESS);
}
void UpdateAI(const uint32 diff)
@@ -127,33 +103,33 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
return;
//LightningCloud_Timer
if( LightningCloud_Timer < diff )
if (LightningCloud_Timer < diff)
{
//cast twice in Heroic mode
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_LIGHTNING_CLOUD);
if( HeroicMode )
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (HeroicMode)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_LIGHTNING_CLOUD);
LightningCloud_Timer = 28000;
}else LightningCloud_Timer -=diff;
//LungBurst_Timer
if( LungBurst_Timer < diff )
if (LungBurst_Timer < diff)
{
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_LUNG_BURST);
LungBurst_Timer = 10000+rand()%5000;
}else LungBurst_Timer -=diff;
//EnvelopingWinds_Timer
if( EnvelopingWinds_Timer < diff )
if (EnvelopingWinds_Timer < diff)
{
//cast twice in Heroic mode
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_ENVELOPING_WINDS);
if( HeroicMode )
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (HeroicMode)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_ENVELOPING_WINDS);
EnvelopingWinds_Timer = 10000+rand()%5000;
}else EnvelopingWinds_Timer -=diff;
@@ -185,11 +161,9 @@ struct TRINITY_DLL_DECL mob_coilfang_waterelementalAI : public ScriptedAI
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( WaterBoltVolley_Timer < diff )
if (WaterBoltVolley_Timer < diff)
{
if( HeroicMode ) DoCast(m_creature,H_SPELL_WATER_BOLT_VOLLEY);
else DoCast(m_creature,SPELL_WATER_BOLT_VOLLEY);
DoCast(m_creature, HeroicMode ? H_SPELL_WATER_BOLT_VOLLEY : SPELL_WATER_BOLT_VOLLEY);
WaterBoltVolley_Timer = 10000+rand()%5000;
}else WaterBoltVolley_Timer -= diff;

View File

@@ -29,27 +29,15 @@ EndContentData */
#include "precompiled.h"
#include "def_steam_vault.h"
#define SAY_MECHANICS "I'm bringin' the pain!"
#define SOUND_MECHANICS 10367
#define SAY_AGGRO_1 "You're in for a world of hurt!"
#define SOUND_AGGRO_1 10368
#define SAY_AGGRO_2 "Eat hot metal, scumbag!"
#define SOUND_AGGRO_2 10369
#define SAY_AGGRO_3 "I'll come over there!"
#define SOUND_AGGRO_3 10370
#define SAY_AGGRO_4 "I'm bringin' the pain!"
#define SOUND_AGGRO_4 10371
#define SAY_SLAY_1 "You just got served, punk!"
#define SOUND_SLAY_1 10372
#define SAY_SLAY_2 "I own you!"
#define SOUND_SLAY_2 10373
#define SAY_SLAY_3 "Have fun dyin', cupcake!"
#define SOUND_SLAY_3 10374
#define SAY_DEATH "Mommy!"
#define SOUND_DEATH 10375
#define SAY_MECHANICS -1545007
#define SAY_AGGRO_1 -1545008
#define SAY_AGGRO_2 -1545009
#define SAY_AGGRO_3 -1545010
#define SAY_AGGRO_4 -1545011
#define SAY_SLAY_1 -1545012
#define SAY_SLAY_2 -1545013
#define SAY_SLAY_3 -1545014
#define SAY_DEATH -1545015
#define SPELL_SUPER_SHRINK_RAY 31485
#define SPELL_SAW_BLADE 31486
@@ -63,10 +51,12 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
ScriptedInstance *pInstance;
bool HeroicMode;
uint32 Shrink_Timer;
uint32 Saw_Blade_Timer;
@@ -85,33 +75,25 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
Summon50 = false;
Summon25 = false;
if( pInstance ) pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, NOT_STARTED);
if (pInstance)
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, NOT_STARTED);
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_DEATH);
DoScriptText(SAY_DEATH, m_creature);
if( pInstance ) pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, DONE);
if (pInstance)
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, DONE);
}
void KilledUnit(Unit* victim)
{
switch(rand()%3)
{
case 0:
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_2);
break;
case 2:
DoYell(SAY_SLAY_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_3);
break;
case 0: DoScriptText(SAY_SLAY_1, m_creature); break;
case 1: DoScriptText(SAY_SLAY_2, m_creature); break;
case 2: DoScriptText(SAY_SLAY_3, m_creature); break;
}
}
@@ -119,36 +101,27 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_1);
break;
case 1:
DoYell(SAY_AGGRO_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_2);
break;
case 2:
DoYell(SAY_AGGRO_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_3);
break;
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
if( pInstance ) pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, IN_PROGRESS);
if (pInstance)
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, IN_PROGRESS);
}
//no known summon spells exist
void SummonMechanichs()
{
DoYell(SAY_MECHANICS, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_MECHANICS);
DoScriptText(SAY_MECHANICS, m_creature);
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,5,5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,-5,5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,-5,-5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
if( rand()%2 )
if (rand()%2)
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,5,-7,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
if( rand()%2 )
if (rand()%2)
DoSpawnCreature(ENTRY_STREAMRIGGER_MECHANIC,7,-5,0,0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000);
}
@@ -157,43 +130,54 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( Shrink_Timer < diff )
if (Shrink_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SUPER_SHRINK_RAY);
Shrink_Timer = 20000;
}else Shrink_Timer -= diff;
if( Saw_Blade_Timer < diff )
if (Saw_Blade_Timer < diff)
{
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1) ) DoCast(target,SPELL_SAW_BLADE);
else DoCast(m_creature->getVictim(),SPELL_SAW_BLADE);
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
DoCast(target,SPELL_SAW_BLADE);
else
DoCast(m_creature->getVictim(),SPELL_SAW_BLADE);
Saw_Blade_Timer = 15000;
} else Saw_Blade_Timer -= diff;
if( Electrified_Net_Timer < diff )
if (Electrified_Net_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_ELECTRIFIED_NET);
Electrified_Net_Timer = 10000;
}
else Electrified_Net_Timer -= diff;
if( !Summon75 )
if( (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 75 )
if (!Summon75)
{
SummonMechanichs();
Summon75 = true;
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 75)
{
SummonMechanichs();
Summon75 = true;
}
}
if( !Summon50 )
if( (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 50 )
if (!Summon50)
{
SummonMechanichs();
Summon50 = true;
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 50)
{
SummonMechanichs();
Summon50 = true;
}
}
if( !Summon25 )
if( (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25 )
if (!Summon25)
{
SummonMechanichs();
Summon25 = true;
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25)
{
SummonMechanichs();
Summon25 = true;
}
}
DoMeleeAttackIfReady();
@@ -217,17 +201,17 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
ScriptedInstance* pInstance;
bool HeroicMode;
uint32 Repair_Timer;
bool HeroicMode;
void Reset()
{
HeroicMode = m_creature->GetMap()->IsHeroic();
Repair_Timer = 2000;
}
@@ -241,22 +225,21 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if( Repair_Timer < diff )
if (Repair_Timer < diff)
{
if( pInstance && pInstance->GetData64(DATA_MEKGINEERSTEAMRIGGER) && pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == IN_PROGRESS)
if (pInstance && pInstance->GetData64(DATA_MEKGINEERSTEAMRIGGER) && pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == IN_PROGRESS)
{
if( Unit* pMekgineer = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MEKGINEERSTEAMRIGGER)) )
if (Unit* pMekgineer = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MEKGINEERSTEAMRIGGER)))
{
if( m_creature->IsWithinDistInMap(pMekgineer, MAX_REPAIR_RANGE) )
if (m_creature->IsWithinDistInMap(pMekgineer, MAX_REPAIR_RANGE))
{
//are we already channeling? Doesn't work very well, find better check?
if( !m_creature->GetUInt32Value(UNIT_CHANNEL_SPELL) )
if (!m_creature->GetUInt32Value(UNIT_CHANNEL_SPELL))
{
//m_creature->GetMotionMaster()->MovementExpired();
//m_creature->GetMotionMaster()->MoveIdle();
if( HeroicMode ) DoCast(m_creature,H_SPELL_REPAIR,true);
else DoCast(m_creature,SPELL_REPAIR,true);
DoCast(m_creature,HeroicMode ? H_SPELL_REPAIR : SPELL_REPAIR, true);
}
Repair_Timer = 5000;
}
@@ -269,7 +252,7 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
}else Repair_Timer = 5000;
}else Repair_Timer -= diff;
if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() )
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
DoMeleeAttackIfReady();

View File

@@ -24,26 +24,14 @@ EndScriptData */
#include "precompiled.h"
#include "def_steam_vault.h"
#define SAY_INTRO "You deem yourselves worthy simply because you bested my guards? Our work here will not be compromised!"
#define SOUND_INTRO 10390
#define SAY_REGEN "This is not nearly over..."
#define SOUND_REGEN 10391
#define SAY_AGGRO1 "Your head will roll!"
#define SOUND_AGGRO1 10392
#define SAY_AGGRO2 "I despise all of your kind!"
#define SOUND_AGGRO2 10393
#define SAY_AGGRO3 "Ba'ahntha sol'dorei!"
#define SOUND_AGGRO3 10394
#define SAY_SLAY1 "Scram, surface filth!"
#define SOUND_SLAY1 10395
#define SAY_SLAY2 "Ah ha ha ha ha ha ha!"
#define SOUND_SLAY2 10396
#define SAY_DEATH "For her Excellency... for... Vashj!"
#define SOUND_DEATH 10397
#define SAY_INTRO -1545016
#define SAY_REGEN -1545017
#define SAY_AGGRO1 -1545018
#define SAY_AGGRO2 -1545019
#define SAY_AGGRO3 -1545020
#define SAY_SLAY1 -1545021
#define SAY_SLAY2 -1545022
#define SAY_DEATH -1545023
#define SPELL_SPELL_REFLECTION 31534
#define SPELL_IMPALE 39061
@@ -68,11 +56,13 @@ struct TRINITY_DLL_DECL mob_naga_distillerAI : public ScriptedAI
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
//hack, due to really weird spell behaviour :(
if( pInstance )
if( pInstance->GetData(TYPE_DISTILLER) == IN_PROGRESS )
if (pInstance)
{
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (pInstance->GetData(TYPE_DISTILLER) == IN_PROGRESS)
{
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
}
}
@@ -82,14 +72,18 @@ struct TRINITY_DLL_DECL mob_naga_distillerAI : public ScriptedAI
{
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
DoCast(m_creature,SPELL_WARLORDS_RAGE_NAGA,true);
if( pInstance ) pInstance->SetData(TYPE_DISTILLER,IN_PROGRESS);
if (pInstance)
pInstance->SetData(TYPE_DISTILLER,IN_PROGRESS);
}
void DamageTaken(Unit *done_by, uint32 &damage)
{
if( m_creature->GetHealth() <= damage )
if( pInstance ) pInstance->SetData(TYPE_DISTILLER,DONE);
if (m_creature->GetHealth() <= damage)
if (pInstance)
pInstance->SetData(TYPE_DISTILLER,DONE);
}
};
@@ -115,42 +109,29 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
Rage_Timer = 45000;
CanRage = false;
if( pInstance ) pInstance->SetData(TYPE_WARLORD_KALITHRESH, NOT_STARTED);
if (pInstance)
pInstance->SetData(TYPE_WARLORD_KALITHRESH, NOT_STARTED);
}
void Aggro(Unit *who)
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO1);
break;
case 1:
DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO2);
break;
case 2:
DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO3);
break;
case 0: DoScriptText(SAY_AGGRO1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO3, m_creature); break;
}
if( pInstance ) pInstance->SetData(TYPE_WARLORD_KALITHRESH, IN_PROGRESS);
if (pInstance)
pInstance->SetData(TYPE_WARLORD_KALITHRESH, IN_PROGRESS);
}
void KilledUnit(Unit* victim)
{
switch(rand()%2)
{
case 0:
DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(victim, SOUND_SLAY1);
break;
case 1:
DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(victim, SOUND_SLAY2);
break;
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
}
}
@@ -177,18 +158,18 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
void SpellHit(Unit *caster, const SpellEntry *spell)
{
//hack :(
if( spell->Id == SPELL_WARLORDS_RAGE_PROC )
if( pInstance )
if( pInstance->GetData(TYPE_DISTILLER) == DONE )
if (spell->Id == SPELL_WARLORDS_RAGE_PROC)
if (pInstance)
if (pInstance->GetData(TYPE_DISTILLER) == DONE)
m_creature->RemoveAurasDueToSpell(SPELL_WARLORDS_RAGE_PROC);
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_DEATH);
DoScriptText(SAY_DEATH, m_creature);
if( pInstance ) pInstance->SetData(TYPE_WARLORD_KALITHRESH, DONE);
if (pInstance)
pInstance->SetData(TYPE_WARLORD_KALITHRESH, DONE);
}
void UpdateAI(const uint32 diff)
@@ -196,13 +177,12 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
if( Rage_Timer < diff )
if (Rage_Timer < diff)
{
Creature* distiller = SelectCreatureInGrid(17954, 100);
if( distiller )
if (distiller)
{
DoYell(SAY_REGEN, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_REGEN);
DoScriptText(SAY_REGEN, m_creature);
DoCast(m_creature,SPELL_WARLORDS_RAGE);
((mob_naga_distillerAI*)distiller->AI())->StartRageGen(m_creature);
}
@@ -210,16 +190,16 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
}else Rage_Timer -= diff;
//Reflection_Timer
if( Reflection_Timer < diff )
if (Reflection_Timer < diff)
{
DoCast(m_creature, SPELL_SPELL_REFLECTION);
Reflection_Timer = 20000+rand()%5000;
}else Reflection_Timer -= diff;
//Impale_Timer
if( Impale_Timer < diff )
if (Impale_Timer < diff)
{
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_IMPALE);
Impale_Timer = 7500+rand()%5000;

View File

@@ -23,14 +23,14 @@ EndScriptData */
#include "precompiled.h"
#define SAY_AGGRO -1542008
#define SPELL_SLIME_SPRAY 30913
#define SPELL_POISON_CLOUD 30916
#define SPELL_POISON_BOLT 30917
#define SPELL_POISON 30914
#define SAY_AGGRO "Come intruders...."
struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
{
boss_broggokAI(Creature *c) : ScriptedAI(c) {Reset();}
@@ -48,7 +48,7 @@ struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
void Aggro(Unit *who)
{
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
DoScriptText(SAY_AGGRO, m_creature);
}
void UpdateAI(const uint32 diff)

View File

@@ -28,26 +28,16 @@ EndContentData */
#include "precompiled.h"
#define SAY_WAKE "Who dares interrupt... What is this? What have you done? You ruin everything!"
#define SOUND_WAKE 10164
#define SAY_WAKE -1542000
#define SAY_ADD_AGGRO_1 "You mustn't let him loose!"
#define SOUND_ADD_AGGRO_1 10166
#define SAY_ADD_AGGRO_2 "Ignorant whelps!"
#define SOUND_ADD_AGGRO_2 10167
#define SAY_ADD_AGGRO_3 "You fools! He'll kill us all!"
#define SOUND_ADD_AGGRO_3 10168
#define SAY_ADD_AGGRO_1 -1542001
#define SAY_ADD_AGGRO_2 -1542002
#define SAY_ADD_AGGRO_3 -1542003
#define SAY_KILL_1 "Just as you deserve!"
#define SOUND_KILL_1 10169
#define SAY_KILL_2 "Your friends will soon be joining you."
#define SOUND_KILL_2 10170
#define SAY_NOVA "Closer... Come closer.. and burn!"
#define SOUND_NOVA 10165
#define SAY_DIE "Good luck... you'll need it.."
#define SOUND_DIE 10171
#define SAY_KILL_1 -1542004
#define SAY_KILL_2 -1542005
#define SAY_NOVA -1542006
#define SAY_DIE -1542007
#define SPELL_CORRUPTION 30938
@@ -88,8 +78,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
void Aggro(Unit *who)
{
DoYell(SAY_WAKE, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_WAKE);
DoScriptText(SAY_WAKE, m_creature);
}
void KilledUnit(Unit* victim)
@@ -99,31 +88,24 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
switch(rand()%2)
{
case 0:
DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_1);
break;
case 1:
DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_2);
break;
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
}
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DIE,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_DIE);
DoScriptText(SAY_DIE, m_creature);
}
void UpdateAI(const uint32 diff)
{
if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() )
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( Firenova )
if (Firenova)
{
if( Firenova_Timer < diff )
if (Firenova_Timer < diff)
{
DoCast(m_creature,HeroicMode ? H_SPELL_FIRE_NOVA : SPELL_FIRE_NOVA);
Firenova = false;
@@ -133,27 +115,26 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
return;
}
if( ShadowVolley_Timer < diff )
if (ShadowVolley_Timer < diff)
{
DoCast(m_creature,HeroicMode ? H_SPELL_SHADOW_BOLT_VOLLEY : SPELL_SHADOW_BOLT_VOLLEY);
ShadowVolley_Timer = 5000+rand()%8000;
}else ShadowVolley_Timer -=diff;
if( Corruption_Timer < diff )
if (Corruption_Timer < diff)
{
DoCast(m_creature,SPELL_CORRUPTION);
Corruption_Timer = 30000+rand()%20000;
}else Corruption_Timer -=diff;
if( BurningNova_Timer < diff )
if (BurningNova_Timer < diff)
{
if( m_creature->IsNonMeleeSpellCasted(false) )
if (m_creature->IsNonMeleeSpellCasted(false))
m_creature->InterruptNonMeleeSpells(true);
DoYell(SAY_NOVA, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_NOVA);
DoScriptText(SAY_NOVA, m_creature);
if( HeroicMode )
if (HeroicMode)
DoCast(m_creature,SPELL_VORTEX);
DoCast(m_creature,SPELL_BURNING_NOVA);
@@ -212,17 +193,17 @@ struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() )
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( MarkOfShadow_Timer < diff )
if (MarkOfShadow_Timer < diff)
{
if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0) )
if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(target,SPELL_MARK_OF_SHADOW);
MarkOfShadow_Timer = 15000+rand()%5000;
}else MarkOfShadow_Timer -=diff;
if( ShadowBolt_Timer < diff )
if (ShadowBolt_Timer < diff)
{
DoCast(m_creature->getVictim(),HeroicMode ? H_SPELL_SHADOW_BOLT : SPELL_SHADOW_BOLT);
ShadowBolt_Timer = 5000+rand()%1000;

View File

@@ -23,26 +23,18 @@ EndScriptData */
#include "precompiled.h"
#define SAY_AGGRO_1 -1542009
#define SAY_AGGRO_2 -1542010
#define SAY_AGGRO_3 -1542011
#define SAY_KILL_1 -1542012
#define SAY_KILL_2 -1542013
#define SAY_DIE -1542014
#define SPELL_ACID_SPRAY 38153 // heroic 38973 ??? 38153
#define SPELL_EXPLODING_BREAKER 30925
#define SPELL_KNOCKDOWN 20276
#define SPELL_DOMINATION 25772 // ???
#define SAY_KILL_1 "Let's see what I can make of you."
#define SOUND_KILL_1 10289
#define SAY_KILL_2 "It is pointless to resist."
#define SOUND_KILL_2 10290
#define SAY_AGGRO_1 "My work must not be interrupted."
#define SOUND_AGGRO_1 10286
#define SAY_AGGRO_2 "Perhaps I can find a use for you."
#define SOUND_AGGRO_2 10287
#define SAY_AGGRO_3 "Anger... Hate... These are tools I can use."
#define SOUND_AGGRO_3 10288
#define SAY_DIE "Stay away from... me."
#define SOUND_DIE 10291
struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
{
boss_the_makerAI(Creature *c) : ScriptedAI(c) {Reset();}
@@ -64,43 +56,24 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_1);
break;
case 1:
DoYell(SAY_AGGRO_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_2);
break;
case 2:
DoYell(SAY_AGGRO_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_3);
break;
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
}
void KilledUnit(Unit* victim)
{
if (rand()%5)
return;
switch(rand()%2)
{
case 0:
DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_1);
break;
case 1:
DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_2);
break;
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
}
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DIE,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_DIE);
DoScriptText(SAY_DIE, m_creature);
}
void UpdateAI(const uint32 diff)
@@ -108,18 +81,16 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if(AcidSpray_Timer < diff)
if (AcidSpray_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_ACID_SPRAY);
AcidSpray_Timer = 16000+rand()%8000;
}else AcidSpray_Timer -=diff;
if(ExplodingBreaker_Timer < diff)
if (ExplodingBreaker_Timer < diff)
{
Unit* target;
target = SelectUnit(SELECT_TARGET_RANDOM,0);
DoCast(target,SPELL_EXPLODING_BREAKER);
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_EXPLODING_BREAKER);
ExplodingBreaker_Timer = 4000+rand()%8000;
}else ExplodingBreaker_Timer -=diff;
@@ -135,7 +106,7 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
}else domination_timer -=diff;
*/
if(Knockdown_Timer < diff)
if (Knockdown_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_KNOCKDOWN);
Knockdown_Timer = 4000+rand()%8000;

View File

@@ -17,12 +17,21 @@
/* ScriptData
SDName: Boss_Omar_The_Unscarred
SD%Complete: 90
SDComment: Normal/Heroic support: both, to be tested. Temporary solution for orbital/shadow whip-ability. Needs more core support before making it more proper.
SDComment: Temporary solution for orbital/shadow whip-ability. Needs more core support before making it more proper.
SDCategory: Hellfire Citadel, Hellfire Ramparts
EndScriptData */
#include "precompiled.h"
#define SAY_AGGRO_1 -1543009
#define SAY_AGGRO_2 -1543010
#define SAY_AGGRO_3 -1543011
#define SAY_SUMMON -1543012
#define SAY_CURSE -1543013
#define SAY_KILL_1 -1543014
#define SAY_DIE -1543015
#define SAY_WIPE -1543016
#define SPELL_ORBITAL_STRIKE 30637
#define SPELL_SHADOW_WHIP 30638
#define SPELL_TREACHEROUS_AURA 30695
@@ -32,31 +41,15 @@ EndScriptData */
#define H_SPELL_SHADOW_BOLT 39297
#define SPELL_SUMMON_FIENDISH_HOUND 30707
#define SAY_AGGRO_1 "You dare stand against me?!"
#define SOUND_AGGRO_1 10280
#define SAY_AGGRO_2 "I will not be defeated!"
#define SOUND_AGGRO_2 10279
#define SAY_AGGRO_3 "Your insolence will be your death."
#define SOUND_AGGRO_3 10281
#define SAY_SUMMON "Achor-she-ki! Feast my pet! Eat your fill!"
#define SOUND_SUMMON 10277
#define SAY_CURSE "A-Kreesh!"
#define SOUND_CURSE 10278
#define SAY_KILL_1 "Die, weakling!"
#define SOUND_KILL_1 10282
#define SAY_DIE "It is... not over."
#define SOUND_DIE 10284
#define SAY_WIPE "I am victorious!"
#define SOUND_WIPE 10283
struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
{
boss_omor_the_unscarredAI(Creature *c) : Scripted_NoMovementAI(c) {Reset();}
boss_omor_the_unscarredAI(Creature *c) : Scripted_NoMovementAI(c)
{
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
bool HeroicMode;
uint32 OrbitalStrike_Timer;
uint32 ShadowWhip_Timer;
@@ -67,14 +60,10 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
uint32 SummonedCount;
uint64 playerGUID;
bool CanPullBack;
bool HeroicMode;
void Reset()
{
HeroicMode = m_creature->GetMap()->IsHeroic();
DoYell(SAY_WIPE,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_WIPE);
DoScriptText(SAY_WIPE, m_creature);
OrbitalStrike_Timer = 25000;
ShadowWhip_Timer = 2000;
@@ -91,18 +80,9 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_1);
break;
case 1:
DoYell(SAY_AGGRO_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_2);
break;
case 2:
DoYell(SAY_AGGRO_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_3);
break;
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
}
@@ -111,16 +91,14 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
if (rand()%2)
return;
DoYell(SAY_KILL_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_1);
DoScriptText(SAY_KILL_1, m_creature);
}
void JustSummoned(Creature* summoned)
{
DoYell(SAY_SUMMON,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_SUMMON);
DoScriptText(SAY_SUMMON, m_creature);
if( Unit* random = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* random = SelectUnit(SELECT_TARGET_RANDOM,0))
summoned->AI()->AttackStart(random);
++SummonedCount;
@@ -128,8 +106,7 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
void JustDied(Unit* Killer)
{
DoYell(SAY_DIE,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_DIE);
DoScriptText(SAY_DIE, m_creature);
}
void UpdateAI(const uint32 diff)
@@ -138,9 +115,9 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
return;
//only two may be wrong, perhaps increase timer and spawn periodically instead.
if( SummonedCount < 2 )
if (SummonedCount < 2)
{
if( Summon_Timer < diff )
if (Summon_Timer < diff)
{
m_creature->InterruptNonMeleeSpells(false);
DoCast(m_creature,SPELL_SUMMON_FIENDISH_HOUND);
@@ -148,14 +125,14 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
}else Summon_Timer -= diff;
}
if( CanPullBack )
if (CanPullBack)
{
if( ShadowWhip_Timer < diff )
if (ShadowWhip_Timer < diff)
{
if( Unit* temp = Unit::GetUnit(*m_creature,playerGUID) )
if (Unit* temp = Unit::GetUnit(*m_creature,playerGUID))
{
//if unit dosen't have this flag, then no pulling back (script will attempt cast, even if orbital strike was resisted)
if( temp->HasUnitMovementFlag(MOVEMENTFLAG_FALLING) )
if (temp->HasUnitMovementFlag(MOVEMENTFLAG_FALLING))
{
m_creature->InterruptNonMeleeSpells(false);
DoCast(temp,SPELL_SHADOW_WHIP);
@@ -166,56 +143,52 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
CanPullBack = false;
}else ShadowWhip_Timer -= diff;
}
else if( OrbitalStrike_Timer < diff )
else if (OrbitalStrike_Timer < diff)
{
Unit* temp = NULL;
if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE) )
if (m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))
temp = m_creature->getVictim();
else temp = SelectUnit(SELECT_TARGET_RANDOM,0);
if( temp && temp->GetTypeId() == TYPEID_PLAYER )
if (temp && temp->GetTypeId() == TYPEID_PLAYER)
{
DoCast(temp,SPELL_ORBITAL_STRIKE);
OrbitalStrike_Timer = 14000+rand()%2000;
playerGUID = temp->GetGUID();
if( playerGUID )
if (playerGUID)
CanPullBack = true;
}
}else OrbitalStrike_Timer -= diff;
if( (m_creature->GetHealth()*100) / m_creature->GetMaxHealth() < 20 )
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() < 20)
{
if( DemonicShield_Timer < diff )
if (DemonicShield_Timer < diff)
{
DoCast(m_creature,SPELL_DEMONIC_SHIELD);
DemonicShield_Timer = 15000;
}else DemonicShield_Timer -= diff;
}
if( Aura_Timer < diff )
if (Aura_Timer < diff)
{
DoYell(SAY_CURSE,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_CURSE);
DoScriptText(SAY_CURSE, m_creature);
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
{
if( HeroicMode ) DoCast(target,H_SPELL_BANE_OF_TREACHERY);
else DoCast(target,SPELL_TREACHEROUS_AURA);
DoCast(target,HeroicMode ? H_SPELL_BANE_OF_TREACHERY : SPELL_TREACHEROUS_AURA);
Aura_Timer = 8000+rand()%8000;
}
}else Aura_Timer -= diff;
if( Shadowbolt_Timer < diff )
if (Shadowbolt_Timer < diff)
{
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
{
if( target )
if (target)
target = m_creature->getVictim();
if( HeroicMode ) DoCast(target,H_SPELL_SHADOW_BOLT);
else DoCast(target,SPELL_SHADOW_BOLT);
DoCast(target,HeroicMode ? H_SPELL_SHADOW_BOLT : SPELL_SHADOW_BOLT);
Shadowbolt_Timer = 4000+rand()%2500;
}
}else Shadowbolt_Timer -= diff;

View File

@@ -17,33 +17,21 @@
/* ScriptData
SDName: Boss_Watchkeeper_Gargolmar
SD%Complete: 80
SDComment: Normal/Heroic support: both, to be tested. Missing adds to heal him. Surge should be used on target furthest away, not random.
SDComment: Missing adds to heal him. Surge should be used on target furthest away, not random.
SDCategory: Hellfire Citadel, Hellfire Ramparts
EndScriptData */
#include "precompiled.h"
#define SAY_HEAL "Heal me! QUICKLY!"
#define SOUND_HEAL 10329
#define SAY_SURGE "Back off, pup!"
#define SOUND_SURGE 10330
#define SAY_TAUNT "Do you smell that? Fresh meat has somehow breached our citadel. Be wary of any intruders."
#define SAY_AGGRO_1 "What have we here...?"
#define SOUND_AGGRO_1 10331
#define SAY_AGGRO_2 "Heh... this may hurt a little."
#define SOUND_AGGRO_2 10332
#define SAY_AGGRO_3 "I'm gonna enjoy this."
#define SOUND_AGGRO_3 10333
#define SAY_KILL_1 "Say farewell!"
#define SOUND_KILL_1 10334
#define SAY_KILL_2 "Much too easy..."
#define SOUND_KILL_2 10335
#define SOUND_DIE 10336
#define SAY_TAUNT -1543000
#define SAY_HEAL -1543001
#define SAY_SURGE -1543002
#define SAY_AGGRO_1 -1543003
#define SAY_AGGRO_2 -1543004
#define SAY_AGGRO_3 -1543005
#define SAY_KILL_1 -1543006
#define SAY_KILL_2 -1543007
#define SAY_DIE -1543008
#define SPELL_MORTAL_WOUND 30641
#define H_SPELL_MORTAL_WOUND 36814
@@ -52,7 +40,13 @@ EndScriptData */
struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
{
boss_watchkeeper_gargolmarAI(Creature *c) : ScriptedAI(c) {Reset();}
boss_watchkeeper_gargolmarAI(Creature *c) : ScriptedAI(c)
{
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
bool HeroicMode;
uint32 Surge_Timer;
uint32 MortalWound_Timer;
@@ -60,12 +54,9 @@ struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
bool HasTaunted;
bool YelledForHeal;
bool HeroicMode;
void Reset()
{
HeroicMode = m_creature->GetMap()->IsHeroic();
Surge_Timer = 5000;
MortalWound_Timer = 4000;
Retaliation_Timer = 0;
@@ -78,37 +69,28 @@ struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
{
switch(rand()%3)
{
case 0:
DoYell(SAY_AGGRO_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_1);
break;
case 1:
DoYell(SAY_AGGRO_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_2);
break;
case 2:
DoYell(SAY_AGGRO_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_AGGRO_3);
break;
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
}
void MoveInLineOfSight(Unit* who)
{
if( !m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
if (!m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
{
if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
return;
float attackRadius = m_creature->GetAttackDistance(who);
if(m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
{
who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
AttackStart(who);
}
else if (!HasTaunted && m_creature->IsWithinDistInMap(who, 60.0f))
{
DoYell(SAY_TAUNT, LANG_UNIVERSAL, NULL);
DoScriptText(SAY_TAUNT, m_creature);
HasTaunted = true;
}
}
@@ -118,20 +100,14 @@ struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
{
switch(rand()%2)
{
case 0:
DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_1);
break;
case 1:
DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_KILL_2);
break;
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
}
}
void JustDied(Unit* Killer)
{
DoPlaySoundToSet(m_creature,SOUND_DIE);
DoScriptText(SAY_DIE, m_creature);
}
void UpdateAI(const uint32 diff)
@@ -139,40 +115,38 @@ struct TRINITY_DLL_DECL boss_watchkeeper_gargolmarAI : public ScriptedAI
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( MortalWound_Timer < diff )
if (MortalWound_Timer < diff)
{
if( HeroicMode ) DoCast(m_creature->getVictim(),H_SPELL_MORTAL_WOUND);
else DoCast(m_creature->getVictim(),SPELL_MORTAL_WOUND);
DoCast(m_creature->getVictim(),HeroicMode ? H_SPELL_MORTAL_WOUND : SPELL_MORTAL_WOUND);
MortalWound_Timer = 5000+rand()%8000;
}else MortalWound_Timer -= diff;
if( Surge_Timer < diff )
if (Surge_Timer < diff)
{
DoYell(SAY_SURGE, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SURGE);
DoScriptText(SAY_SURGE, m_creature);
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_SURGE);
Surge_Timer = 5000+rand()%8000;
}else Surge_Timer -= diff;
if((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() < 20)
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() < 20)
{
if( Retaliation_Timer < diff )
if (Retaliation_Timer < diff)
{
DoCast(m_creature,SPELL_RETALIATION);
Retaliation_Timer = 30000;
}else Retaliation_Timer -= diff;
}
if( !YelledForHeal )
if((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() < 40)
if (!YelledForHeal)
{
DoYell(SAY_HEAL, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_HEAL);
YelledForHeal = true;
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() < 40)
{
DoScriptText(SAY_HEAL, m_creature);
YelledForHeal = true;
}
}
DoMeleeAttackIfReady();

View File

@@ -24,6 +24,32 @@ EndScriptData */
#include "precompiled.h"
#include "def_magtheridons_lair.h"
struct Yell
{
int32 id;
};
static Yell RandomTaunt[]=
{
{-1544000},
{-1544001},
{-1544002},
{-1544003},
{-1544004},
{-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
#define EMOTE_BERSERK -1544012
#define EMOTE_BLASTNOVA -1544013
#define EMOTE_BEGIN -1544014
#define MOB_MAGTHERIDON 17257
#define MOB_ROOM 17516
#define MOB_CHANNELLER 17256
@@ -57,29 +83,9 @@ EndScriptData */
#define SPELL_FIRE_BLAST 37110
//Dialog
#define SAY_AGGRO "Thank you for releasing me. Now...die!"
#define SOUND_AGGRO 10254
#define SAY_BANISH "Not again...NOT AGAIN!"
#define SOUND_BANISH 10256
#define SAY_FREED "I...am...UNLEASHED!!!"
#define SOUND_FREED 10253
#define SAY_CHAMBER_DESTROY "I will not be taken so easily. Let the walls of this prison tremble...and FALL!!!"
#define SOUND_CHAMBER_DESTROY 10257
#define SAY_PLAYER_KILLED "Did you think me weak? Soft? Who is the weak one now?!"
#define SOUND_PLAYER_KILLED 10255
#define SAY_DEATH "The Legion...will consume you...all...."
#define SOUND_DEATH 10258
#define EMOTE_BERSERK "becomes enraged!"
#define EMOTE_BLASTNOVA "begins to cast Blast Nova!"
#define EMOTE_BEGIN "%s's bonds begin to weaken!"
// count of clickers needed to interrupt blast nova
#define CLICKERS_COUNT 5
// Unkown sounds
uint32 RandomSound[] = {10247, 10248, 10249, 10250, 10251, 10252};
typedef std::map<uint64, uint64> CubeMap;
struct TRINITY_DLL_DECL mob_abyssalAI : public ScriptedAI
@@ -196,6 +202,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
uint32 BlastNova_Timer;
uint32 Blaze_Timer;
uint32 Debris_Timer;
uint32 RandChat_Timer;
bool Phase3;
bool NeedCheckCube;
@@ -214,6 +221,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
Blaze_Timer = 10000+rand()%20000;
BlastNova_Timer = 60000;
Cleave_Timer = 15000;
RandChat_Timer = 90000;
Phase3 = false;
@@ -261,8 +269,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
// if 5 clickers from other cubes apply shadow cage
if(ClickerNum >= CLICKERS_COUNT && !m_creature->HasAura(SPELL_SHADOW_CAGE, 0))
{
DoYell(SAY_BANISH, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_BANISH);
DoScriptText(SAY_BANISH, m_creature);
m_creature->CastSpell(m_creature, SPELL_SHADOW_CAGE, true);
}
else if(ClickerNum < CLICKERS_COUNT && m_creature->HasAura(SPELL_SHADOW_CAGE, 0))
@@ -273,8 +280,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
void KilledUnit(Unit* victim)
{
DoYell(SAY_PLAYER_KILLED, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_PLAYER_KILLED);
DoScriptText(SAY_PLAYER_KILLED, m_creature);
}
void JustDied(Unit* Killer)
@@ -282,8 +288,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
if(pInstance)
pInstance->SetData(DATA_MAGTHERIDON_EVENT, DONE);
DoYell(SAY_DEATH,LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_DEATH);
DoScriptText(SAY_DEATH, m_creature);
}
void MoveInLineOfSight(Unit*) {}
@@ -303,12 +308,20 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->RemoveAurasDueToSpell(SPELL_SHADOW_CAGE_C);
DoYell(SAY_FREED, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_FREED);
DoScriptText(SAY_FREED, m_creature);
}
void UpdateAI(const uint32 diff)
{
if (!InCombat)
{
if (RandChat_Timer < diff)
{
DoScriptText(RandomTaunt[rand()%6].id, m_creature);
RandChat_Timer = 90000;
}else RandChat_Timer -= diff;
}
if(!m_creature->SelectHostilTarget() && !m_creature->getVictim())
return;
@@ -317,7 +330,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
if(Berserk_Timer < diff)
{
m_creature->CastSpell(m_creature, SPELL_BERSERK, true);
DoTextEmote(EMOTE_BERSERK, NULL);
DoScriptText(EMOTE_BERSERK, m_creature);
Berserk_Timer = 60000;
}else Berserk_Timer -= diff;
@@ -332,7 +345,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
// to avoid earthquake interruption
if(!m_creature->hasUnitState(UNIT_STAT_STUNNED))
{
DoTextEmote(EMOTE_BLASTNOVA, NULL);
DoScriptText(EMOTE_BLASTNOVA, m_creature);
DoCast(m_creature, SPELL_BLASTNOVA);
BlastNova_Timer = 60000;
}
@@ -370,8 +383,7 @@ struct TRINITY_DLL_DECL boss_magtheridonAI : public ScriptedAI
&& !m_creature->hasUnitState(UNIT_STAT_STUNNED)) // shadow cage and earthquake
{
Phase3 = true;
DoYell(SAY_CHAMBER_DESTROY, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_CHAMBER_DESTROY);
DoScriptText(SAY_CHAMBER_DESTROY, m_creature);
m_creature->CastSpell(m_creature, SPELL_CAMERA_SHAKE, true);
m_creature->CastSpell(m_creature, SPELL_DEBRIS_KNOCKDOWN, true);

View File

@@ -17,7 +17,7 @@
/* ScriptData
SDName: Boss_Grand_Warlock_Nethekurse
SD%Complete: 75
SDComment: encounter not fully complete. missing part where boss kill minions.
SDComment: encounter not fully completed. missing part where boss kill minions.
SDCategory: Hellfire Citadel, Shattered Halls
EndScriptData */
@@ -32,49 +32,34 @@ EndContentData */
struct Say
{
const char* text;
uint32 sound;
int32 id;
};
#define SAY_INTRO "You wish to fight us all at once? This should be amusing!"
#define SOUND_INTRO 10262
static Say PeonAttacked[]=
{
{"You can have that one. I no longer need him.", 10263},
{"Yes, beat him mercilessly. His skull is a thick as an ogres.", 10264},
{"Don't waste your time on that one. He's weak!", 10265},
{"You want him? Very well, take him!", 10266},
{-1540001},
{-1540002},
{-1540003},
{-1540004},
};
static Say PeonDies[]=
{
{"One pitiful wretch down. Go on, take another one.", 10267},
{"Ahh, what a waste... Next!", 10268},
{"I was going to kill him anyway!", 10269},
{"Thank you for saving me the trouble! Now it's my turn to have some fun...", 10270},
{-1540005},
{-1540006},
{-1540007},
{-1540008},
};
#define SAY_TAUNT_1 "Beg for your pittyfull life!"
#define SOUND_TAUNT_1 10259
#define SAY_TAUNT_2 "Run covad, ruun!"
#define SOUND_TAUNT_2 10260
#define SAY_TAUNT_3 "Your pain amuses me."
#define SOUND_TAUNT_3 10261
#define SAY_AGGRO_1 "I'm already bored."
#define SOUND_AGGRO_1 10271
#define SAY_AGGRO_2 "Come on! ... Show me a real fight."
#define SOUND_AGGRO_2 10272
#define SAY_AGGRO_3 "I had more fun torturing the peons."
#define SOUND_AGGRO_3 10273
#define SAY_SLAY_1 "You Loose."
#define SOUND_SLAY_1 10274
#define SAY_SLAY_2 "Ohh! Just die."
#define SOUND_SLAY_2 10275
#define SAY_DIE "What a ... a shame."
#define SOUND_DIE 10276
#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
@@ -93,12 +78,13 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
ScriptedInstance* pInstance;
bool HeroicMode;
bool IntroOnce;
bool IsIntroEvent;
bool IsMainEvent;
@@ -118,7 +104,6 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
{
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
HeroicMode = m_creature->GetMap()->IsHeroic();
IsIntroEvent = false;
IntroOnce = false;
IsMainEvent = false;
@@ -137,24 +122,22 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
void DoYellForPeonAggro()
{
if( PeonEngagedCount >= 4 )
if (PeonEngagedCount >= 4)
return;
DoYell(PeonAttacked[PeonEngagedCount].text, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, PeonAttacked[PeonEngagedCount].sound);
DoScriptText(PeonAttacked[PeonEngagedCount].id, m_creature);
++PeonEngagedCount;
}
void DoYellForPeonDeath()
{
if( PeonKilledCount >= 4 )
if (PeonKilledCount >= 4)
return;
DoYell(PeonDies[PeonKilledCount].text, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, PeonDies[PeonKilledCount].sound);
DoScriptText(PeonDies[PeonKilledCount].id, m_creature);
++PeonKilledCount;
if( PeonKilledCount == 4 )
if (PeonKilledCount == 4)
{
IsIntroEvent = false;
IsMainEvent = true;
@@ -166,18 +149,9 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
{
switch(rand()%3)
{
case 0:
DoPlaySoundToSet(m_creature,SOUND_TAUNT_1);
DoYell(SAY_TAUNT_1,LANG_UNIVERSAL,NULL);
break;
case 1:
DoPlaySoundToSet(m_creature,SOUND_TAUNT_2);
DoYell(SAY_TAUNT_2,LANG_UNIVERSAL,NULL);
break;
case 2:
DoPlaySoundToSet(m_creature,SOUND_TAUNT_3);
DoYell(SAY_TAUNT_3,LANG_UNIVERSAL,NULL);
break;
case 0: DoScriptText(SAY_TAUNT_1, m_creature); break;
case 1: DoScriptText(SAY_TAUNT_2, m_creature); break;
case 2: DoScriptText(SAY_TAUNT_3, m_creature); break;
}
//TODO: kill the peons first
@@ -190,7 +164,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
void AttackStart(Unit* who)
{
if ( IsIntroEvent || !IsMainEvent )
if (IsIntroEvent || !IsMainEvent)
return;
if (m_creature->Attack(who, true))
@@ -212,27 +186,26 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
void MoveInLineOfSight(Unit *who)
{
if( !m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
if (!m_creature->getVictim() && who->isTargetableForAttack() && ( m_creature->IsHostileTo( who )) && who->isInAccessablePlaceFor(m_creature) )
{
if( !IntroOnce && m_creature->IsWithinDistInMap(who, 75) )
if (!IntroOnce && m_creature->IsWithinDistInMap(who, 75))
{
DoYell(SAY_INTRO, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_INTRO);
DoScriptText(SAY_INTRO, m_creature);
IntroOnce = true;
IsIntroEvent = true;
if( pInstance )
if (pInstance)
pInstance->SetData(TYPE_NETHEKURSE,IN_PROGRESS);
}
if(!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE )
if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE )
return;
if( IsIntroEvent || !IsMainEvent )
if (IsIntroEvent || !IsMainEvent)
return;
float attackRadius = m_creature->GetAttackDistance(who);
if( m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who) )
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who) )
{
who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
AttackStart(who);
@@ -244,18 +217,9 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
{
switch(rand()%3)
{
case 0:
DoPlaySoundToSet(m_creature,SOUND_AGGRO_1);
DoYell(SAY_AGGRO_1,LANG_UNIVERSAL,NULL);
break;
case 1:
DoPlaySoundToSet(m_creature,SOUND_AGGRO_2);
DoYell(SAY_AGGRO_2,LANG_UNIVERSAL,NULL);
break;
case 2:
DoPlaySoundToSet(m_creature,SOUND_AGGRO_3);
DoYell(SAY_AGGRO_3,LANG_UNIVERSAL,NULL);
break;
case 0: DoScriptText(SAY_AGGRO_1, m_creature); break;
case 1: DoScriptText(SAY_AGGRO_2, m_creature); break;
case 2: DoScriptText(SAY_AGGRO_3, m_creature); break;
}
}
@@ -270,65 +234,58 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
{
switch(rand()%2)
{
case 0:
DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
DoYell(SAY_SLAY_1,LANG_UNIVERSAL,NULL);
break;
case 1:
DoPlaySoundToSet(m_creature,SOUND_SLAY_2);
DoYell(SAY_SLAY_2,LANG_UNIVERSAL,NULL);
break;
case 0: DoScriptText(SAY_SLAY_1, m_creature); break;
case 1: DoScriptText(SAY_SLAY_2, m_creature); break;
}
}
void JustDied(Unit* Killer)
{
DoPlaySoundToSet(m_creature,SOUND_DIE);
DoYell(SAY_DIE,LANG_UNIVERSAL,NULL);
DoScriptText(SAY_DIE, m_creature);
if( !pInstance )
if (!pInstance)
return;
pInstance->SetData(TYPE_NETHEKURSE,DONE);
if( pInstance->GetData64(DATA_NETHEKURSE_DOOR) )
if (pInstance->GetData64(DATA_NETHEKURSE_DOOR))
{
if( GameObject *Door = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_NETHEKURSE_DOOR)) )
if (GameObject *Door = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_NETHEKURSE_DOOR)))
Door->SetGoState(0);
}
}
void UpdateAI(const uint32 diff)
{
if( IsIntroEvent )
if (IsIntroEvent)
{
if( !pInstance )
if (!pInstance)
return;
if( pInstance->GetData(TYPE_NETHEKURSE) == IN_PROGRESS )
if (pInstance->GetData(TYPE_NETHEKURSE) == IN_PROGRESS)
{
if( IntroEvent_Timer < diff )
if (IntroEvent_Timer < diff)
{
DoTauntPeons();
}else IntroEvent_Timer -= diff;
}
}
if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() )
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
if( !IsMainEvent )
if (!IsMainEvent)
return;
if( Phase )
if (Phase)
{
if( !SpinOnce )
if (!SpinOnce)
{
DoCast(m_creature->getVictim(),SPELL_DARK_SPIN);
SpinOnce = true;
}
if( Cleave_Timer < diff )
if (Cleave_Timer < diff)
{
DoCast(m_creature->getVictim(),(HeroicMode ? H_SPELL_SHADOW_SLAM : SPELL_SHADOW_CLEAVE));
Cleave_Timer = 6000+rand()%2500;
@@ -336,21 +293,21 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
}
else
{
if( ShadowFissure_Timer < diff )
if (ShadowFissure_Timer < diff)
{
if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_SHADOW_FISSURE);
ShadowFissure_Timer = 7500+rand()%7500;
}else ShadowFissure_Timer -= diff;
if( DeathCoil_Timer < diff )
if (DeathCoil_Timer < diff)
{
if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_DEATH_COIL);
DeathCoil_Timer = 15000+rand()%5000;
}else DeathCoil_Timer -= diff;
if( (m_creature->GetHealth()*100) / m_creature->GetMaxHealth() <= 20 )
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() <= 20)
Phase = true;
DoMeleeAttackIfReady();
@@ -382,16 +339,16 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI
void Aggro(Unit* who)
{
if( pInstance )
if (pInstance)
{
if( pInstance->GetData64(DATA_NETHEKURSE) )
if (pInstance->GetData64(DATA_NETHEKURSE))
{
Creature *pKurse = (Creature*)Unit::GetUnit(*m_creature,pInstance->GetData64(DATA_NETHEKURSE));
if( pKurse )
if (pKurse)
((boss_grand_warlock_nethekurseAI*)pKurse->AI())->DoYellForPeonAggro();
}
if( pInstance->GetData(TYPE_NETHEKURSE) == IN_PROGRESS )
if (pInstance->GetData(TYPE_NETHEKURSE) == IN_PROGRESS )
return;
else pInstance->SetData(TYPE_NETHEKURSE,IN_PROGRESS);
}
@@ -399,12 +356,12 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if( pInstance )
if (pInstance)
{
if( pInstance->GetData64(DATA_NETHEKURSE) )
if (pInstance->GetData64(DATA_NETHEKURSE))
{
Creature *pKurse = (Creature*)Unit::GetUnit(*m_creature,pInstance->GetData64(DATA_NETHEKURSE));
if( pKurse )
if (pKurse)
((boss_grand_warlock_nethekurseAI*)pKurse->AI())->DoYellForPeonDeath();
}
}
@@ -412,10 +369,10 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() )
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( Hemorrhage_Timer < diff )
if (Hemorrhage_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_HEMORRHAGE);
Hemorrhage_Timer = 15000;
@@ -447,7 +404,7 @@ struct TRINITY_DLL_DECL mob_lesser_shadow_fissureAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if( !Start )
if (!Start)
{
//triggered spell of consumption does not properly show it's SpellVisual, hack it a bit
m_creature->CastSpell(m_creature,SPELL_TEMPORARY_VISUAL,true);
@@ -455,7 +412,7 @@ struct TRINITY_DLL_DECL mob_lesser_shadow_fissureAI : public ScriptedAI
Start = true;
}
if( Stop_Timer < diff)
if (Stop_Timer < diff)
{
m_creature->setDeathState(JUST_DIED);
m_creature->SetHealth(0);

View File

@@ -34,63 +34,59 @@ EndContentData */
struct Yell
{
const char* text;
uint32 sound;
int32 id;
uint32 creature;
};
static Yell GoCombat[]=
{
{"Smash!", 10306, ENTRY_LEFT_HEAD},
{"If you nice me let you live.", 10308, ENTRY_LEFT_HEAD},
{"Me hungry!", 10309, ENTRY_LEFT_HEAD},
{-1540018, ENTRY_LEFT_HEAD},
{-1540019, ENTRY_LEFT_HEAD},
{-1540020, ENTRY_LEFT_HEAD},
};
static Yell GoCombatDelay[]=
{
{"Why don't you let me do the talking?", 10317, ENTRY_RIGHT_HEAD},
{"No, we will NOT let you live!", 10318, ENTRY_RIGHT_HEAD},
{"You always hungry. That why we so fat!", 10319, ENTRY_RIGHT_HEAD},
{-1540021, ENTRY_RIGHT_HEAD},
{-1540022, ENTRY_RIGHT_HEAD},
{-1540023, ENTRY_RIGHT_HEAD},
};
static Yell Threat[]=
{
{"You stay here. Me go kill someone else!", 10303, ENTRY_LEFT_HEAD},
{"What are you doing!", 10315, ENTRY_RIGHT_HEAD},
{"Me kill someone else...", 10302, ENTRY_LEFT_HEAD},
{"Me not like this one...",10300, ENTRY_LEFT_HEAD},
{-1540024, ENTRY_LEFT_HEAD},
{-1540025, ENTRY_RIGHT_HEAD},
{-1540026, ENTRY_LEFT_HEAD},
{-1540027, ENTRY_LEFT_HEAD},
};
static Yell ThreatDelay1[]=
{
{"That's not funny!", 10314, ENTRY_RIGHT_HEAD},
{"Me get bored...", 10305, ENTRY_LEFT_HEAD},
{"I'm not done yet, idiot!", 10313, ENTRY_RIGHT_HEAD},
{"Hey you numbskull!", 10312, ENTRY_RIGHT_HEAD},
{-1540028, ENTRY_RIGHT_HEAD},
{-1540029, ENTRY_LEFT_HEAD},
{-1540030, ENTRY_RIGHT_HEAD},
{-1540031, ENTRY_RIGHT_HEAD},
};
static Yell ThreatDelay2[]=
{
{"Ha ha ha.", 10304, ENTRY_LEFT_HEAD},
{"Whhy! He almost dead!", 10316, ENTRY_RIGHT_HEAD},
{"H'ey...", 10307, ENTRY_LEFT_HEAD},
{"We kill his friend!", 10301, ENTRY_LEFT_HEAD},
{-1540032, ENTRY_LEFT_HEAD},
{-1540033, ENTRY_RIGHT_HEAD},
{-1540034, ENTRY_LEFT_HEAD},
{-1540035, ENTRY_LEFT_HEAD},
};
static Yell Killing[]=
{
{"This one die easy!", 10310, ENTRY_LEFT_HEAD},
{"I'm tired. You kill next one!", 10320, ENTRY_RIGHT_HEAD},
{-1540036, ENTRY_LEFT_HEAD},
{-1540037, ENTRY_RIGHT_HEAD},
};
static Yell KillingDelay[]=
{
{"That's because I do all the hard work!", 10321, ENTRY_RIGHT_HEAD},
{"SD2 script error, should not see this.", 0, ENTRY_LEFT_HEAD},
{-1540038, ENTRY_RIGHT_HEAD},
{-1000000, ENTRY_LEFT_HEAD},
};
#define EMOTE_ENRAGE "enrages"
#define YELL_DIE_L "This all...your fault!"
#define SOUND_DIE_L 10311
#define YELL_DIE_R "I...hate...you..."
#define SOUND_DIE_R 10322
#define YELL_DIE_L -1540039
#define YELL_DIE_R -1540040
#define EMOTE_ENRAGE -1540041
#define SPELL_BLAST_WAVE 30600
#define SPELL_FEAR 30584
@@ -117,13 +113,12 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if( !DeathYell )
if (!DeathYell)
return;
if( Death_Timer < diff )
if (Death_Timer < diff)
{
DoYell(YELL_DIE_R,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_DIE_R);
DoScriptText(YELL_DIE_R, m_creature);
DeathYell = false;
}else Death_Timer -= diff;
}
@@ -139,6 +134,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
}
ScriptedInstance* pInstance;
bool HeroicMode;
uint64 LeftHead;
uint64 RightHead;
@@ -146,7 +142,6 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
int ithreat;
int ikilling;
bool HeroicMode;
bool AggroYell;
bool ThreatYell;
bool ThreatYell2;
@@ -181,26 +176,25 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
ThunderClap_Timer = 15000;
ResetThreat_Timer = 30000;
if( pInstance )
if (pInstance)
pInstance->SetData(TYPE_OMROGG, NOT_STARTED); //End boss can use this later. O'mrogg must be defeated(DONE) or he will come to aid.
}
void DoYellForThreat()
{
if( LeftHead && RightHead )
if (LeftHead && RightHead)
{
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if( !Left && !Right )
if (!Left && !Right)
return;
ithreat = rand()%4;
Unit *source = (Left->GetEntry() == Threat[ithreat].creature ? Left : Right);
source->MonsterYell(Threat[ithreat].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(source, Threat[ithreat].sound);
DoScriptText(Threat[ithreat].id, source);
Delay_Timer = 3500;
ThreatYell = true;
@@ -212,26 +206,26 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
DoSpawnCreature(ENTRY_LEFT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,1800000);
DoSpawnCreature(ENTRY_RIGHT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,1800000);
if( Unit *Left = Unit::GetUnit(*m_creature,LeftHead) )
if (Unit *Left = Unit::GetUnit(*m_creature,LeftHead))
{
iaggro = rand()%3;
Left->MonsterYell(GoCombat[iaggro].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(Left, GoCombat[iaggro].sound);
DoScriptText(GoCombat[iaggro].id, Left);
Delay_Timer = 3500;
AggroYell = true;
}
if( pInstance )
if (pInstance)
pInstance->SetData(TYPE_OMROGG, IN_PROGRESS);
}
void JustSummoned(Creature *summoned)
{
if( summoned->GetEntry() == ENTRY_LEFT_HEAD )
if (summoned->GetEntry() == ENTRY_LEFT_HEAD)
LeftHead = summoned->GetGUID();
if( summoned->GetEntry() == ENTRY_RIGHT_HEAD )
if (summoned->GetEntry() == ENTRY_RIGHT_HEAD)
RightHead = summoned->GetGUID();
//summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -241,12 +235,12 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void KilledUnit(Unit* victim)
{
if( LeftHead && RightHead )
if (LeftHead && RightHead)
{
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if( !Left && !Right )
if (!Left && !Right)
return;
ikilling = rand()%2;
@@ -256,14 +250,12 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
switch(ikilling)
{
case 0:
source->MonsterYell(Killing[ikilling].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(source, Killing[ikilling].sound);
DoScriptText(Killing[ikilling].id, source);
Delay_Timer = 3500;
KillingYell = true;
break;
case 1:
source->MonsterYell(Killing[ikilling].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(source, Killing[ikilling].sound);
DoScriptText(Killing[ikilling].id, source);
KillingYell = false;
break;
}
@@ -272,98 +264,95 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
void JustDied(Unit* Killer)
{
if( LeftHead && RightHead )
if (LeftHead && RightHead)
{
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if( !Left && !Right )
if (!Left && !Right)
return;
Left->MonsterYell(YELL_DIE_L, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(Left,SOUND_DIE_L);
DoScriptText(YELL_DIE_L, Left);
((mob_omrogg_headsAI*)((Creature*)Right)->AI())->DoDeathYell();
}
if( pInstance )
if (pInstance)
pInstance->SetData(TYPE_OMROGG, DONE);
}
void UpdateAI(const uint32 diff)
{
if( Delay_Timer < diff )
if (Delay_Timer < diff)
{
Delay_Timer = 3500;
if( !LeftHead && !RightHead )
if (!LeftHead && !RightHead)
return;
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
if( !Left && !Right )
if (!Left && !Right)
return;
if( AggroYell )
if (AggroYell)
{
Right->MonsterYell(GoCombatDelay[iaggro].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(Right, GoCombatDelay[iaggro].sound);
DoScriptText(GoCombatDelay[iaggro].id, Right);
AggroYell = false;
}
if( ThreatYell2 )
if (ThreatYell2)
{
Unit *source = (Left->GetEntry() == ThreatDelay2[ithreat].creature ? Left : Right);
source->MonsterYell(ThreatDelay2[ithreat].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(source, ThreatDelay2[ithreat].sound);
DoScriptText(ThreatDelay2[ithreat].id, source);
ThreatYell2 = false;
}
if( ThreatYell )
if (ThreatYell)
{
Unit *source = (Left->GetEntry() == ThreatDelay1[ithreat].creature ? Left : Right);
source->MonsterYell(ThreatDelay1[ithreat].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(source, ThreatDelay1[ithreat].sound);
DoScriptText(ThreatDelay1[ithreat].id, source);
ThreatYell = false;
ThreatYell2 = true;
}
if( KillingYell )
if (KillingYell)
{
Unit *source = (Left->GetEntry() == KillingDelay[ikilling].creature ? Left : Right);
source->MonsterYell(KillingDelay[ikilling].text, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(source, KillingDelay[ikilling].sound);
DoScriptText(KillingDelay[ikilling].id, source);
KillingYell = false;
}
}else Delay_Timer -= diff;
if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() )
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if( BlastCount && BlastWave_Timer <= diff )
if (BlastCount && BlastWave_Timer <= diff)
{
DoCast(m_creature,SPELL_BLAST_WAVE);
BlastWave_Timer = 5000;
++BlastCount;
if( BlastCount == 3 )
if (BlastCount == 3)
BlastCount = 0;
}else BlastWave_Timer -= diff;
if( BurningMaul_Timer < diff )
if (BurningMaul_Timer < diff)
{
DoTextEmote(EMOTE_ENRAGE,NULL);
DoScriptText(EMOTE_ENRAGE, m_creature);
DoCast(m_creature,HeroicMode ? H_SPELL_BURNING_MAUL : SPELL_BURNING_MAUL);
BurningMaul_Timer = 40000;
BlastWave_Timer = 16000;
BlastCount = 1;
}else BurningMaul_Timer -= diff;
if( ResetThreat_Timer < diff )
if (ResetThreat_Timer < diff)
{
if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0) )
if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0))
{
DoYellForThreat();
DoResetThreat();
@@ -372,13 +361,13 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
ResetThreat_Timer = 35000+rand()%10000;
}else ResetThreat_Timer -= diff;
if( Fear_Timer < diff )
if (Fear_Timer < diff)
{
DoCast(m_creature,SPELL_FEAR);
Fear_Timer = 15000+rand()%25000;
}else Fear_Timer -= diff;
if( ThunderClap_Timer < diff )
if (ThunderClap_Timer < diff)
{
DoCast(m_creature,SPELL_THUNDERCLAP);
ThunderClap_Timer = 25000+rand()%15000;