mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
[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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user