[svn] * Updated Serpentshrine Cavern scripts to use script_texts
* Added script_texts for (nearly) all scripts * Added documentation for script_texts * Fixed tabs in chat.cpp --HG-- branch : trunk
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
=========================================
|
||||
Texts Documentation
|
||||
=========================================
|
||||
|
||||
Scriptdev2 Revision 695 introduces a new format for using texts in EventAI and SD2 Scripts.
|
||||
This information relates to the three *_texts tables located in the ScriptDev Database.
|
||||
|
||||
Any script can at any time access and use text from any of the three text tables, as long as the entry does in fact exist.
|
||||
Custom scripters are adviced to store their text data in custom_texts.
|
||||
|
||||
The three different tables has ranges of entries allowed for that table.
|
||||
eventai_texts: entry -1 -> -999999
|
||||
script_texts: entry -1000000 -> -1999999
|
||||
custom_texts: entry -2000000 -> -2999999
|
||||
Any entry out of range for that table will display a startup error.
|
||||
|
||||
|
||||
=========================================
|
||||
Basic Structure of eventai_texts, script_texts and custom_texts
|
||||
=========================================
|
||||
Below is a the list of current fields within the texts tables.
|
||||
|
||||
Field_Name Description
|
||||
-----------------------------------------------------------
|
||||
entry This value is mearly an NEGATIVE identifier of the current text number. Required for sql queries.
|
||||
content_default This is the actual text presented in the default language (English).
|
||||
|
||||
content_loc1 This is the actual text presented in the Localization #1 Clients (Korean)
|
||||
content_loc2 This is the actual text presented in the Localization #2 Clients (French)
|
||||
content_loc3 This is the actual text presented in the Localization #3 Clients (German)
|
||||
content_loc4 This is the actual text presented in the Localization #4 Clients (Chinese)
|
||||
content_loc5 This is the actual text presented in the Localization #5 Clients (Taiwanese)
|
||||
content_loc6 This is the actual text presented in the Localization #6 Clients (Spanish)
|
||||
content_loc7 This is the actual text presented in the Localization #7 Clients (Spanish Mexico)
|
||||
content_loc8 This is the actual text presented in the Localization #8 Clients (Russian)
|
||||
|
||||
sound This value is the Sound ID that corresponds to the actual text used (Defined in SoundEntries.dbc).
|
||||
type Variables used to define type of text (Say/Yell/Textemote/Whisper).
|
||||
language This value is the Language that the text is native in (Defined in Languages.dbc).
|
||||
comment This is a comment regarding the text entry (For ACID, accepted format is to use Creature ID of NPC using it).
|
||||
|
||||
Note: Fields `content_loc1` to `content_loc8` are NULL values by default and are handled by seperate localization projects.
|
||||
|
||||
|
||||
=========================================
|
||||
Text Types (type)
|
||||
=========================================
|
||||
Below is the list of current Text types that texts tables can handle. These were previously seperate Actions in ACID.
|
||||
|
||||
# Internal Name Description
|
||||
-----------------------------------------------------------
|
||||
0 CHAT_TYPE_SAY This type sets the text to be displayed as a Say (Speech Bubble).
|
||||
1 CHAT_TYPE_YELL This type sets the text to be displayed as a Yell (Red Speech Bubble) and usually has a matching Sound ID.
|
||||
2 CHAT_TYPE_TEXT_EMOTE This type sets the text to be displayed as a text emote in orange in the chat log.
|
||||
3 CHAT_TYPE_BOSS_EMOTE This type sets the text to be displayed as a text emote in orange in the chat log (Used only for specific Bosses).
|
||||
4 CHAT_TYPE_WHISPER This type sets the text to be displayed as a whisper to the player in the chat log.
|
||||
5 CHAT_TYPE_BOSS_WHISPER This type sets the text to be displayed as a whisper to the player in the chat log (Used only for specific Bosses).
|
||||
|
||||
|
||||
=========================================
|
||||
Language Types (language)
|
||||
=========================================
|
||||
Below is the list of current Language types that are allowed.
|
||||
This is the Race Language that the text is native to (So it will display properly)
|
||||
|
||||
# Internal Name Description
|
||||
-----------------------------------------------------------
|
||||
0 UNIVERSAL Text in this language is understood by ALL Races.
|
||||
1 ORCISH Text in this language is understood ONLY by Horde Races.
|
||||
2 DARNASSIAN Text in this language is understood ONLY by the Night Elf Race.
|
||||
3 TAURAHE Text in this language is understood ONLY by the Tauren Race.
|
||||
6 DWARVISH Text in this language is understood ONLY by the Dwarf Race.
|
||||
7 COMMON Text in this language is understood ONLY by Alliance Races.
|
||||
8 DEMONIC Text in this language is understood ONLY by the Demon Race (Not Implimented).
|
||||
9 TITAN This language was used by Sargeras to speak with other Titians (Not Implemented).
|
||||
10 THALASSIAN Text in this language is understood ONLY by the Blood Elf Race.
|
||||
11 DRACONIC Text in this language is understood ONLY by the Dragon Race.
|
||||
12 KALIMAG Text will display as Kalimag (not readable by players, language of all elementals)
|
||||
13 GNOMISH Text in this language is understood ONLY by the Gnome Race.
|
||||
14 TROLL Text in this language is understood ONLY by the Troll Race.
|
||||
33 GUTTERSPEAK Text in this language is understood ONLY by the Undead Race.
|
||||
35 DRAENEI Text in this language is understood ONLY by the Draenai Race.
|
||||
36 ZOMBIE (not currently used?)
|
||||
37 GNOMISH BINARY Binary language used by Alliance when drinking Binary Brew
|
||||
38 GOBLIN BINARY Binary language used by Horce when drinking Binary Brew
|
||||
+62
-78
@@ -25,21 +25,29 @@ EndScriptData */
|
||||
#include "def_serpent_shrine.h"
|
||||
#include "../../../npc/npc_escortAI.h"
|
||||
|
||||
#define SAY_AGGRO -1548021
|
||||
#define SAY_GAIN_BLESSING -1548022
|
||||
#define SAY_GAIN_ABILITY1 -1548023
|
||||
#define SAY_GAIN_ABILITY2 -1548024
|
||||
#define SAY_GAIN_ABILITY3 -1548025
|
||||
#define SAY_SLAY1 -1548026
|
||||
#define SAY_SLAY2 -1548027
|
||||
#define SAY_SLAY3 -1548028
|
||||
#define SAY_DEATH -1548029
|
||||
|
||||
//Karathress spells
|
||||
#define SPELL_CATACLYSMIC_BOLT 38441
|
||||
#define SPELL_POWER_OF_SHARKKIS 38455
|
||||
#define SPELL_POWER_OF_TIDALVESS 38452
|
||||
#define SPELL_POWER_OF_CARIBDIS 38451
|
||||
#define SPELL_ENRAGE 45078
|
||||
#define SPELL_SEAR_NOVA 38445
|
||||
#define SPELL_CATACLYSMIC_BOLT 38441
|
||||
#define SPELL_POWER_OF_SHARKKIS 38455
|
||||
#define SPELL_POWER_OF_TIDALVESS 38452
|
||||
#define SPELL_POWER_OF_CARIBDIS 38451
|
||||
#define SPELL_ENRAGE 24318
|
||||
#define SPELL_SEAR_NOVA 38445
|
||||
#define SPELL_BLESSING_OF_THE_TIDES 38449
|
||||
|
||||
//Sharkkis spells
|
||||
#define SPELL_LEECHING_THROW 29436
|
||||
#define SPELL_THE_BEAST_WITHIN 38373
|
||||
#define SPELL_LEECHING_THROW 29436
|
||||
#define SPELL_LEECHING_THROW 29436
|
||||
#define SPELL_THE_BEAST_WITHIN 38373
|
||||
#define SPELL_MULTISHOT 38366
|
||||
#define SPELL_THE_BEAST_WITHIN 38373
|
||||
#define SPELL_SUMMON_FATHOM_LURKER 38433
|
||||
#define SPELL_SUMMON_FATHOM_SPOREBAT 38431
|
||||
#define SPELL_PET_ENRAGE 19574
|
||||
@@ -62,20 +70,6 @@ EndScriptData */
|
||||
#define SPELL_CYCLONE_CYCLONE 29538
|
||||
|
||||
//Yells and Quotes
|
||||
#define SAY_AGGRO "Guards, attention! We have visitors..."
|
||||
#define SOUND_AGGRO 11277
|
||||
#define SAY_SLAY1 "I am rid of you."
|
||||
#define SOUND_SLAY1 11282
|
||||
#define SAY_SLAY2 "Land-dwelling scum!"
|
||||
#define SOUND_SLAY2 11284
|
||||
#define SAY_GAIN_ABILITY1 "I am more powerful than ever!"
|
||||
#define SOUND_GAIN_ABILITY1 11279
|
||||
#define SAY_GAIN_ABILITY2 "Go on, kill them! I'll be the better for it!"
|
||||
#define SOUND_GAIN_ABILITY2 11280
|
||||
#define SAY_GAIN_ABILITY3 "More knowledge, more power!"
|
||||
#define SOUND_GAIN_ABILITY3 11281
|
||||
#define SAY_DEATH "Her ... excellency ... awaits!"
|
||||
#define SOUND_DEATH 11285
|
||||
#define SAY_GAIN_BLESSING_OF_TIDES "Your overconfidence will be your undoing! Guards, lend me your strength!"
|
||||
#define SOUND_GAIN_BLESSING_OF_TIDES 11278
|
||||
#define SAY_MISC "Alana be'lendor!" //don't know what use this
|
||||
@@ -157,28 +151,25 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
|
||||
void EventSharkkisDeath()
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_GAIN_ABILITY1);
|
||||
DoYell(SAY_GAIN_ABILITY1, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_GAIN_ABILITY1, m_creature);
|
||||
DoCast(m_creature, SPELL_POWER_OF_SHARKKIS);
|
||||
}
|
||||
|
||||
void EventTidalvessDeath()
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_GAIN_ABILITY2);
|
||||
DoYell(SAY_GAIN_ABILITY2, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_GAIN_ABILITY2, m_creature);
|
||||
DoCast(m_creature, SPELL_POWER_OF_TIDALVESS);
|
||||
}
|
||||
|
||||
void EventCaribdisDeath()
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_GAIN_ABILITY3);
|
||||
DoYell(SAY_GAIN_ABILITY3, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_GAIN_ABILITY3, m_creature);
|
||||
DoCast(m_creature, SPELL_POWER_OF_CARIBDIS);
|
||||
}
|
||||
|
||||
void GetAdvisors()
|
||||
{
|
||||
if(!pInstance)
|
||||
if (!pInstance)
|
||||
return;
|
||||
|
||||
Advisors[0] = pInstance->GetData64(DATA_SHARKKIS);
|
||||
@@ -188,13 +179,12 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
|
||||
void StartEvent(Unit *who)
|
||||
{
|
||||
if(!pInstance)
|
||||
if (!pInstance)
|
||||
return;
|
||||
|
||||
GetAdvisors();
|
||||
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoZoneInCombat();
|
||||
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
@@ -205,24 +195,18 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *killer)
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if( pInstance )
|
||||
pInstance->SetData(DATA_FATHOMLORDKARATHRESSEVENT, DONE);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_FATHOMLORDKARATHRESSEVENT, NOT_STARTED);
|
||||
|
||||
//support for quest 10944
|
||||
m_creature->SummonCreature(SEER_OLUM, OLUM_X, OLUM_Y, OLUM_Z, OLUM_O, TEMPSUMMON_TIMED_DESPAWN, 3600000);
|
||||
@@ -236,11 +220,11 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if(!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit* target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if(target)
|
||||
if (target)
|
||||
{
|
||||
AttackStart(target);
|
||||
GetAdvisors();
|
||||
@@ -252,20 +236,20 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if(pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
//CataclysmicBolt_Timer
|
||||
if(CataclysmicBolt_Timer < diff)
|
||||
if (CataclysmicBolt_Timer < diff)
|
||||
{
|
||||
//select a random unit other than the main tank
|
||||
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 1);
|
||||
|
||||
//if there aren't other units, cast on the tank
|
||||
if(!target)
|
||||
if (!target)
|
||||
target = m_creature->getVictim();
|
||||
|
||||
int32 dmg = target->GetMaxHealth() / 2;
|
||||
@@ -282,7 +266,7 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
}else SearNova_Timer -= diff;
|
||||
|
||||
//Enrage_Timer
|
||||
if(Enrage_Timer < diff)
|
||||
if (Enrage_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_ENRAGE);
|
||||
Enrage_Timer = 90000;
|
||||
@@ -363,20 +347,20 @@ struct TRINITY_DLL_DECL boss_fathomguard_sharkkisAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
{
|
||||
Creature *Karathress = NULL;
|
||||
Karathress = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESS)));
|
||||
|
||||
if(Karathress)
|
||||
if(!m_creature->isAlive() && Karathress)
|
||||
if (Karathress)
|
||||
((boss_fathomlord_karathressAI*)Karathress->AI())->EventSharkkisDeath();
|
||||
((boss_fathomlord_karathressAI*)Karathress->AI())->EventSharkkisDeath();
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
@@ -386,11 +370,11 @@ struct TRINITY_DLL_DECL boss_fathomguard_sharkkisAI : public ScriptedAI
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if(!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit* target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if(target)
|
||||
if (target)
|
||||
{
|
||||
AttackStart(target);
|
||||
}
|
||||
@@ -401,7 +385,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_sharkkisAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if(pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
@@ -487,18 +471,18 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
PoisonCleansing_Timer = 30000;
|
||||
Earthbind_Timer = 45000;
|
||||
|
||||
if( pInstance )
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
{
|
||||
Creature *Karathress = NULL;
|
||||
Karathress = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESS)));
|
||||
|
||||
if(Karathress)
|
||||
if (Karathress)
|
||||
if(!m_creature->isAlive() && Karathress)
|
||||
((boss_fathomlord_karathressAI*)Karathress->AI())->EventTidalvessDeath();
|
||||
}
|
||||
@@ -506,7 +490,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
@@ -517,11 +501,11 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if(!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit* target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if(target)
|
||||
if (target)
|
||||
{
|
||||
AttackStart(target);
|
||||
}
|
||||
@@ -532,7 +516,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if(pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
@@ -544,7 +528,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
}
|
||||
|
||||
//FrostShock_Timer
|
||||
if(FrostShock_Timer < diff)
|
||||
if (FrostShock_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_FROST_SHOCK);
|
||||
FrostShock_Timer = 25000+rand()%5000;
|
||||
@@ -603,18 +587,18 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
Heal_Timer = 55000;
|
||||
Cyclone_Timer = 30000+rand()%10000;
|
||||
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
{
|
||||
Creature *Karathress = NULL;
|
||||
Karathress = (Creature*)(Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESS)));
|
||||
|
||||
if(Karathress)
|
||||
if (Karathress)
|
||||
if(!m_creature->isAlive() && Karathress)
|
||||
((boss_fathomlord_karathressAI*)Karathress->AI())->EventCaribdisDeath();
|
||||
}
|
||||
@@ -622,7 +606,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID());
|
||||
pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS);
|
||||
@@ -632,11 +616,11 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Only if not incombat check if the event is started
|
||||
if(!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (!InCombat && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
Unit* target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER));
|
||||
|
||||
if(target)
|
||||
if (target)
|
||||
{
|
||||
AttackStart(target);
|
||||
}
|
||||
@@ -647,21 +631,21 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//someone evaded!
|
||||
if(pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT))
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
//WaterBoltVolley_Timer
|
||||
if(WaterBoltVolley_Timer < diff)
|
||||
if (WaterBoltVolley_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_WATER_BOLT_VOLLEY);
|
||||
WaterBoltVolley_Timer = 30000;
|
||||
}else WaterBoltVolley_Timer -= diff;
|
||||
|
||||
//TidalSurge_Timer
|
||||
if(TidalSurge_Timer < diff)
|
||||
if (TidalSurge_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_TIDAL_SURGE);
|
||||
// Hacky way to do it - won't trigger elseways
|
||||
@@ -705,8 +689,8 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
Heal_Timer = 60000;
|
||||
}else Heal_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
Unit* selectAdvisorUnit()
|
||||
{
|
||||
|
||||
+48
-77
@@ -24,6 +24,16 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_serpent_shrine.h"
|
||||
|
||||
#define SAY_AGGRO -1548000
|
||||
#define SAY_SWITCH_TO_CLEAN -1548001
|
||||
#define SAY_CLEAN_SLAY1 -1548002
|
||||
#define SAY_CLEAN_SLAY2 -1548003
|
||||
#define SAY_CLEAN_DEATH -1548004
|
||||
#define SAY_SWITCH_TO_CORRUPT -1548005
|
||||
#define SAY_CORRUPT_SLAY1 -1548006
|
||||
#define SAY_CORRUPT_SLAY2 -1548007
|
||||
#define SAY_CORRUPT_DEATH -1548008
|
||||
|
||||
#define SWITCH_RADIUS 18
|
||||
|
||||
#define MODEL_CORRUPT 20609
|
||||
@@ -51,26 +61,6 @@ EndScriptData */
|
||||
#define ENTRY_PURE_SPAWN 22035
|
||||
#define ENTRY_TAINTED_SPAWN 22036
|
||||
|
||||
#define SAY_AGGRO "I cannot allow you to interfere!"
|
||||
#define SAY_SWITCH_TO_CLEAN "Better, much better."
|
||||
#define SAY_CLEAN_SLAY1 "They have forced me to this..."
|
||||
#define SAY_CLEAN_SLAY2 "I have no choice."
|
||||
#define SAY_CLEAN_DEATH "I am... released..."
|
||||
#define SAY_SWITCH_TO_CORRUPT "Aaghh, the poison..."
|
||||
#define SAY_CORRUPT_SLAY1 "I will purge you from this place."
|
||||
#define SAY_CORRUPT_SLAY2 "You are no better than they!"
|
||||
#define SAY_CORRUPT_DEATH "You are the disease, not I"
|
||||
|
||||
#define SOUND_AGGRO 11289
|
||||
#define SOUND_SWITCH_TO_CLEAN 11290
|
||||
#define SOUND_CLEAN_SLAY1 11291
|
||||
#define SOUND_CLEAN_SLAY2 11292
|
||||
#define SOUND_CLEAN_DEATH 11293
|
||||
#define SOUND_SWITCH_TO_CORRUPT 11297
|
||||
#define SOUND_CORRUPT_SLAY1 11298
|
||||
#define SOUND_CORRUPT_SLAY2 11299
|
||||
#define SOUND_CORRUPT_DEATH 11300
|
||||
|
||||
#define HYDROSS_X -239.439
|
||||
#define HYDROSS_Y -363.481
|
||||
|
||||
@@ -121,54 +111,43 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CLEAN);
|
||||
|
||||
if( pInstance )
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if( pInstance )
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
if(CorruptedForm)
|
||||
if (CorruptedForm)
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_CORRUPT_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CORRUPT_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_CORRUPT_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CORRUPT_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_CORRUPT_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_CORRUPT_SLAY2, m_creature); break;
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_CLEAN_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CLEAN_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_CLEAN_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CLEAN_SLAY2);
|
||||
break;
|
||||
}
|
||||
case 0: DoScriptText(SAY_CLEAN_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_CLEAN_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
if( summoned->GetEntry() == ENTRY_PURE_SPAWN )
|
||||
if (summoned->GetEntry() == ENTRY_PURE_SPAWN)
|
||||
summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
|
||||
if( summoned->GetEntry() == ENTRY_TAINTED_SPAWN )
|
||||
if (summoned->GetEntry() == ENTRY_TAINTED_SPAWN)
|
||||
summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
|
||||
|
||||
summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true);
|
||||
@@ -176,18 +155,12 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
if( CorruptedForm )
|
||||
{
|
||||
DoYell(SAY_CORRUPT_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CORRUPT_DEATH);
|
||||
}
|
||||
if (CorruptedForm)
|
||||
DoScriptText(SAY_CORRUPT_DEATH, m_creature);
|
||||
else
|
||||
{
|
||||
DoYell(SAY_CLEAN_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CLEAN_DEATH);
|
||||
}
|
||||
DoScriptText(SAY_CLEAN_DEATH, m_creature);
|
||||
|
||||
if( pInstance )
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
@@ -198,12 +171,12 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
// corrupted form
|
||||
if( CorruptedForm )
|
||||
if (CorruptedForm)
|
||||
{
|
||||
//MarkOfCorruption_Timer
|
||||
if( MarkOfCorruption_Timer < diff )
|
||||
if (MarkOfCorruption_Timer < diff)
|
||||
{
|
||||
if( MarkOfCorruption_Count <= 5 )
|
||||
if (MarkOfCorruption_Count <= 5)
|
||||
{
|
||||
uint32 mark_spell;
|
||||
|
||||
@@ -219,7 +192,7 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
|
||||
DoCast(m_creature->getVictim(), mark_spell);
|
||||
|
||||
if( MarkOfCorruption_Count < 5 )
|
||||
if (MarkOfCorruption_Count < 5)
|
||||
MarkOfCorruption_Count++;
|
||||
}
|
||||
|
||||
@@ -227,27 +200,26 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
}else MarkOfCorruption_Timer -= diff;
|
||||
|
||||
//VileSludge_Timer
|
||||
if( VileSludge_Timer < diff )
|
||||
if (VileSludge_Timer < diff)
|
||||
{
|
||||
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if( target )
|
||||
if (target)
|
||||
DoCast(target, SPELL_VILE_SLUDGE);
|
||||
|
||||
VileSludge_Timer = 15000;
|
||||
}else VileSludge_Timer -= diff;
|
||||
|
||||
//PosCheck_Timer
|
||||
if( PosCheck_Timer < diff )
|
||||
if (PosCheck_Timer < diff)
|
||||
{
|
||||
if( m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) < SWITCH_RADIUS )
|
||||
if (m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) < SWITCH_RADIUS)
|
||||
{
|
||||
// switch to clean form
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CLEAN);
|
||||
CorruptedForm = false;
|
||||
MarkOfHydross_Count = 0;
|
||||
|
||||
DoYell(SAY_SWITCH_TO_CLEAN, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SWITCH_TO_CLEAN);
|
||||
DoScriptText(SAY_SWITCH_TO_CLEAN, m_creature);
|
||||
DoResetThreat();
|
||||
|
||||
// spawn 4 adds
|
||||
@@ -268,9 +240,9 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
else
|
||||
{
|
||||
//MarkOfHydross_Timer
|
||||
if( MarkOfHydross_Timer < diff )
|
||||
if (MarkOfHydross_Timer < diff)
|
||||
{
|
||||
if( MarkOfHydross_Count <= 5 )
|
||||
if (MarkOfHydross_Count <= 5)
|
||||
{
|
||||
uint32 mark_spell;
|
||||
|
||||
@@ -286,7 +258,7 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
|
||||
DoCast(m_creature->getVictim(), mark_spell);
|
||||
|
||||
if( MarkOfHydross_Count < 5 )
|
||||
if (MarkOfHydross_Count < 5)
|
||||
MarkOfHydross_Count++;
|
||||
}
|
||||
|
||||
@@ -294,27 +266,26 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
}else MarkOfHydross_Timer -= diff;
|
||||
|
||||
//WaterTomb_Timer
|
||||
if( WaterTomb_Timer < diff )
|
||||
if (WaterTomb_Timer < diff)
|
||||
{
|
||||
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if( target )
|
||||
if (target)
|
||||
DoCast(target, SPELL_WATER_TOMB);
|
||||
|
||||
WaterTomb_Timer = 7000;
|
||||
}else WaterTomb_Timer -= diff;
|
||||
|
||||
//PosCheck_Timer
|
||||
if( PosCheck_Timer < diff )
|
||||
if (PosCheck_Timer < diff)
|
||||
{
|
||||
if( m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) >= SWITCH_RADIUS )
|
||||
if (m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) >= SWITCH_RADIUS)
|
||||
{
|
||||
// switch to corrupted form
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CORRUPT);
|
||||
MarkOfCorruption_Count = 0;
|
||||
CorruptedForm = true;
|
||||
|
||||
DoYell(SAY_SWITCH_TO_CORRUPT, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SWITCH_TO_CORRUPT);
|
||||
DoScriptText(SAY_SWITCH_TO_CORRUPT, m_creature);
|
||||
DoResetThreat();
|
||||
|
||||
// spawn 4 adds
|
||||
@@ -333,7 +304,7 @@ struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
|
||||
}
|
||||
|
||||
//EnrageTimer
|
||||
if( EnrageTimer < diff )
|
||||
if (EnrageTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_ENRAGE);
|
||||
EnrageTimer = 60000;
|
||||
|
||||
+54
-107
@@ -27,59 +27,46 @@ EndScriptData */
|
||||
#include "Item.h"
|
||||
#include "Spell.h"
|
||||
|
||||
#define SPELL_MULTI_SHOT 38310
|
||||
#define SPELL_SHOCK_BLAST 38509
|
||||
#define SPELL_ENTANGLE 38316
|
||||
#define SPELL_STATIC_CHARGE_TRIGGER 38280
|
||||
#define SPELL_FORKED_LIGHTNING 40088
|
||||
#define SPELL_SHOOT 40873
|
||||
#define SPELL_POISON_BOLT 40095
|
||||
#define SPELL_TOXIC_SPORES 38575
|
||||
#define SPELL_MAGIC_BARRIER 38112
|
||||
#define SAY_INTRO -1548042
|
||||
#define SAY_AGGRO1 -1548043
|
||||
#define SAY_AGGRO2 -1548044
|
||||
#define SAY_AGGRO3 -1548045
|
||||
#define SAY_AGGRO4 -1548046
|
||||
#define SAY_PHASE1 -1548047
|
||||
#define SAY_PHASE2 -1548048
|
||||
#define SAY_PHASE3 -1548049
|
||||
#define SAY_BOWSHOT1 -1548050
|
||||
#define SAY_BOWSHOT2 -1548051
|
||||
#define SAY_SLAY1 -1548052
|
||||
#define SAY_SLAY2 -1548053
|
||||
#define SAY_SLAY3 -1548054
|
||||
#define SAY_DEATH -1548055
|
||||
|
||||
#define SAY_INTRO "Water is life. It has become a rare commodity here in Outland. A commodity that we alone shall control. We are the Highborne, and the time has come at last for us to retake our rightful place in the world!"
|
||||
#define SAY_AGGRO1 "I'll split you from stem to stern! "
|
||||
#define SAY_AGGRO2 "Victory to Lord Illidan!"
|
||||
#define SAY_AGGRO3 "I spit on you, surface filth!"
|
||||
#define SAY_AGGRO4 "Death to the outsiders!"
|
||||
#define SAY_PHASE1 "I did not wish to lower myself by engaging your kind, but you leave me little choice!"
|
||||
#define SAY_PHASE2 "The time is now! Leave none standing!"
|
||||
#define SAY_PHASE3 "You may want to take cover."
|
||||
#define SAY_BOWSHOT1 "Straight to the heart!"
|
||||
#define SAY_BOWSHOT2 "Seek your mark!"
|
||||
#define SAY_SLAY1 "Your time ends now!"
|
||||
#define SAY_SLAY2 "You have failed!"
|
||||
#define SAY_DEATH "Lord Illidan, I... I am... sorry."
|
||||
#define SPELL_MULTI_SHOT 38310
|
||||
#define SPELL_SHOCK_BLAST 38509
|
||||
#define SPELL_ENTANGLE 38316
|
||||
#define SPELL_STATIC_CHARGE_TRIGGER 38280
|
||||
#define SPELL_FORKED_LIGHTNING 40088
|
||||
#define SPELL_SHOOT 40873
|
||||
#define SPELL_POISON_BOLT 40095
|
||||
#define SPELL_TOXIC_SPORES 38575
|
||||
#define SPELL_MAGIC_BARRIER 38112
|
||||
|
||||
#define SOUND_INTRO 11531
|
||||
#define SOUND_AGGRO1 11532
|
||||
#define SOUND_AGGRO2 11533
|
||||
#define SOUND_AGGRO3 11534
|
||||
#define SOUND_AGGRO4 11535
|
||||
#define SOUND_PHASE1 11538
|
||||
#define SOUND_PHASE2 11539
|
||||
#define SOUND_PHASE3 11540
|
||||
#define SOUND_BOWSHOT1 11536
|
||||
#define SOUND_BOWSHOT2 11537
|
||||
#define SOUND_SLAY1 11541
|
||||
#define SOUND_SLAY2 11542
|
||||
#define SOUND_DEATH 11544
|
||||
#define MIDDLE_X 30.134
|
||||
#define MIDDLE_Y -923.65
|
||||
#define MIDDLE_Z 42.9
|
||||
|
||||
#define MIDDLE_X 30.134
|
||||
#define MIDDLE_Y -923.65
|
||||
#define MIDDLE_Z 42.9
|
||||
#define SPOREBAT_X 30.977156
|
||||
#define SPOREBAT_Y -925.297761
|
||||
#define SPOREBAT_Z 77.176567
|
||||
#define SPOREBAT_O 5.223932
|
||||
|
||||
#define SPOREBAT_X 30.977156
|
||||
#define SPOREBAT_Y -925.297761
|
||||
#define SPOREBAT_Z 77.176567
|
||||
#define SPOREBAT_O 5.223932
|
||||
|
||||
#define SHIED_GENERATOR_CHANNEL 19870
|
||||
#define ENCHANTED_ELEMENTAL 21958
|
||||
#define TAINTED_ELEMENTAL 22009
|
||||
#define COILFANG_STRIDER 22056
|
||||
#define COILFANG_ELITE 22055
|
||||
#define TOXIC_SPOREBAT 22140
|
||||
#define SHIED_GENERATOR_CHANNEL 19870
|
||||
#define ENCHANTED_ELEMENTAL 21958
|
||||
#define TAINTED_ELEMENTAL 22009
|
||||
#define COILFANG_STRIDER 22056
|
||||
#define COILFANG_ELITE 22055
|
||||
#define TOXIC_SPOREBAT 22140
|
||||
|
||||
float ElementPos[8][4] =
|
||||
{
|
||||
@@ -213,8 +200,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
DoYell(SAY_INTRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_INTRO);
|
||||
DoScriptText(SAY_INTRO, m_creature);
|
||||
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
|
||||
AggroTargetGUID = who->GetGUID();
|
||||
Intro = true;
|
||||
@@ -224,24 +210,17 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
switch(rand()%2)
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_LADYVASHJEVENT, DONE);
|
||||
@@ -251,22 +230,10 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%4)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO1);
|
||||
DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO2);
|
||||
DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 2:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO3);
|
||||
DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 3:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO4);
|
||||
DoYell(SAY_AGGRO4, LANG_UNIVERSAL, NULL);
|
||||
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;
|
||||
case 3: DoScriptText(SAY_AGGRO4, m_creature); break;
|
||||
}
|
||||
|
||||
Phase = 1;
|
||||
@@ -297,14 +264,8 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_BOWSHOT1);
|
||||
DoYell(SAY_BOWSHOT1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_BOWSHOT2);
|
||||
DoYell(SAY_BOWSHOT2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_BOWSHOT1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_BOWSHOT2, m_creature); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -331,22 +292,10 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
switch(rand()%4)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO1);
|
||||
DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO2);
|
||||
DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 2:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO3);
|
||||
DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 3:
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO4);
|
||||
DoYell(SAY_AGGRO4, LANG_UNIVERSAL, NULL);
|
||||
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;
|
||||
case 3: DoScriptText(SAY_AGGRO4, m_creature); break;
|
||||
}
|
||||
Phase = 1;
|
||||
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
|
||||
@@ -438,8 +387,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
ShieldGeneratorChannel[i] = pCreature->GetGUID();
|
||||
}
|
||||
|
||||
DoPlaySoundToSet(m_creature, SOUND_PHASE2);
|
||||
DoYell(SAY_PHASE2, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_PHASE2, m_creature);
|
||||
}
|
||||
}
|
||||
//Phase 3
|
||||
@@ -590,8 +538,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
m_creature->RemoveAurasDueToSpell(SPELL_MAGIC_BARRIER);
|
||||
|
||||
DoPlaySoundToSet(m_creature, SOUND_PHASE3);
|
||||
DoYell(SAY_PHASE3, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_PHASE3, m_creature);
|
||||
|
||||
Phase = 3;
|
||||
|
||||
|
||||
+63
-104
@@ -24,36 +24,23 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_serpent_shrine.h"
|
||||
|
||||
#define SAY_AGGRO -1548009
|
||||
#define SAY_SWITCH_TO_DEMON -1548010
|
||||
#define SAY_INNER_DEMONS -1548011
|
||||
#define SAY_DEMON_SLAY1 -1548012
|
||||
#define SAY_DEMON_SLAY2 -1548013
|
||||
#define SAY_DEMON_SLAY3 -1548014
|
||||
#define SAY_NIGHTELF_SLAY1 -1548015
|
||||
#define SAY_NIGHTELF_SLAY2 -1548016
|
||||
#define SAY_NIGHTELF_SLAY3 -1548017
|
||||
#define SAY_FINAL_FORM -1548018
|
||||
#define SAY_FREE -1548019
|
||||
#define SAY_DEATH -1548020
|
||||
|
||||
#define SPELL_WHIRLWIND 40653
|
||||
#define SPELL_CHAOS_BLAST 37675
|
||||
//#define SPELL_INSIDIOUS_WHISPER 37676 // useless - dummy effect that can't be implemented
|
||||
|
||||
#define SAY_AGGRO "Finally my banishment ends!"
|
||||
#define SAY_SWITCH_TO_DEMON "Be gone trifling elf. I'm in control now."
|
||||
#define SAY_INNER_DEMONS "We all have our demons..."
|
||||
#define SAY_DEMON_SLAY1 "I have no equal."
|
||||
#define SAY_DEMON_SLAY2 "Perish, mortal."
|
||||
#define SAY_DEMON_SLAY3 "Yes, YES! Ahahah!"
|
||||
#define SAY_NIGHTELF_SLAY1 "Kill! KILL!"
|
||||
#define SAY_NIGHTELF_SLAY2 "That's right! Yes!"
|
||||
#define SAY_NIGHTELF_SLAY3 "Who's the master now?"
|
||||
#define SAY_FINAL_FORM "No! NO! What have you done?! I am the master, do you hear me? I... aaghh... Can't... contain him..."
|
||||
#define SAY_FREE "At last I am liberated. It has been too long since I have tasted true freedom!"
|
||||
#define SAY_DEATH "You cannot kill me! Fools, I'll be back! I'll... aarghh..."
|
||||
|
||||
#define SOUND_AGGRO 11312
|
||||
#define SOUND_SWITCH_TO_DEMON 11304
|
||||
#define SOUND_INNER_DEMONS 11305
|
||||
#define SOUND_DEMON_SLAY1 11306
|
||||
#define SOUND_DEMON_SLAY2 11307
|
||||
#define SOUND_DEMON_SLAY3 11308
|
||||
#define SOUND_NIGHTELF_SLAY1 11314
|
||||
#define SOUND_NIGHTELF_SLAY2 11315
|
||||
#define SOUND_NIGHTELF_SLAY3 11316
|
||||
#define SOUND_FINAL_FORM 11313
|
||||
#define SOUND_FREE 11309
|
||||
#define SOUND_DEATH 11317
|
||||
|
||||
#define MODEL_DEMON 14555
|
||||
#define MODEL_NIGHTELF 20514
|
||||
|
||||
@@ -64,7 +51,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
|
||||
{
|
||||
boss_leotheras_the_blindAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL;
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Demon = 0;
|
||||
Reset();
|
||||
}
|
||||
@@ -91,75 +78,59 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
|
||||
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, 0);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, 1);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
if(victim->GetTypeId() != TYPEID_PLAYER)
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if(DemonForm)
|
||||
if (DemonForm)
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_DEMON_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEMON_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_DEMON_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEMON_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_DEMON_SLAY3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEMON_SLAY3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_DEMON_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_DEMON_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_DEMON_SLAY3, m_creature); break;
|
||||
}
|
||||
else
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_NIGHTELF_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_NIGHTELF_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_NIGHTELF_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_NIGHTELF_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_NIGHTELF_SLAY3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_NIGHTELF_SLAY3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0: DoScriptText(SAY_NIGHTELF_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_NIGHTELF_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_NIGHTELF_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
//despawn copy
|
||||
if(Demon)
|
||||
if (Demon)
|
||||
{
|
||||
Unit *pUnit = NULL;
|
||||
pUnit = Unit::GetUnit((*m_creature), Demon);
|
||||
|
||||
if(pUnit)
|
||||
if (pUnit)
|
||||
pUnit->DealDamage(pUnit, pUnit->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, 0);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_LEOTHERASTHEBLINDEVENT, DONE);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
@@ -173,41 +144,41 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
|
||||
return;
|
||||
|
||||
if(!DemonForm)
|
||||
if (!DemonForm)
|
||||
{
|
||||
//Whirlwind_Timer
|
||||
if(Whirlwind_Timer < diff)
|
||||
if (Whirlwind_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_WHIRLWIND);
|
||||
Whirlwind_Timer = 25000;
|
||||
}else Whirlwind_Timer -= diff;
|
||||
|
||||
//Switch_Timer
|
||||
if(!IsFinalForm)
|
||||
if(Switch_Timer < diff)
|
||||
if (!IsFinalForm)
|
||||
{
|
||||
//switch to demon form
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_DEMON);
|
||||
DoYell(SAY_SWITCH_TO_DEMON, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SWITCH_TO_DEMON);
|
||||
DemonForm = true;
|
||||
|
||||
Switch_Timer = 60000;
|
||||
}else Switch_Timer -= diff;
|
||||
if (Switch_Timer < diff)
|
||||
{
|
||||
//switch to demon form
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_DEMON);
|
||||
DoScriptText(SAY_SWITCH_TO_DEMON, m_creature);
|
||||
DemonForm = true;
|
||||
Switch_Timer = 60000;
|
||||
}else Switch_Timer -= diff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
else
|
||||
{
|
||||
//ChaosBlast_Timer
|
||||
if(ChaosBlast_Timer < diff)
|
||||
if (ChaosBlast_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_CHAOS_BLAST);
|
||||
ChaosBlast_Timer = 1500;
|
||||
}else ChaosBlast_Timer -= diff;
|
||||
|
||||
//Switch_Timer
|
||||
if(Switch_Timer < diff)
|
||||
if (Switch_Timer < diff)
|
||||
{
|
||||
//switch to nightelf form
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
|
||||
@@ -217,13 +188,13 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
|
||||
}else Switch_Timer -= diff;
|
||||
}
|
||||
|
||||
if(!IsFinalForm && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 15)
|
||||
if (!IsFinalForm && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 15)
|
||||
{
|
||||
//at this point he divides himself in two parts
|
||||
Creature *Copy = NULL;
|
||||
Copy = DoSpawnCreature(DEMON_FORM, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
|
||||
if(Copy)
|
||||
if (Copy)
|
||||
{
|
||||
Demon = Copy->GetGUID();
|
||||
Copy->AI()->AttackStart(m_creature->getVictim());
|
||||
@@ -233,9 +204,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
|
||||
IsFinalForm = true;
|
||||
DemonForm = false;
|
||||
|
||||
DoYell(SAY_FINAL_FORM, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_FINAL_FORM);
|
||||
|
||||
DoScriptText(SAY_FINAL_FORM, m_creature);
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
|
||||
}
|
||||
}
|
||||
@@ -258,29 +227,19 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blind_demonformAI : public ScriptedAI
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
DoYell(SAY_FREE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_FREE);
|
||||
DoScriptText(SAY_FREE, m_creature);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
if(victim->GetTypeId() != TYPEID_PLAYER)
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_DEMON_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEMON_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_DEMON_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEMON_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_DEMON_SLAY3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEMON_SLAY3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_DEMON_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_DEMON_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_DEMON_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +261,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blind_demonformAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//ChaosBlast_Timer
|
||||
if(ChaosBlast_Timer < diff)
|
||||
if (ChaosBlast_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_CHAOS_BLAST);
|
||||
ChaosBlast_Timer = 1500;
|
||||
|
||||
+75
-120
@@ -24,50 +24,39 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_serpent_shrine.h"
|
||||
|
||||
#define SPELL_TIDAL_WAVE 37730
|
||||
#define SPELL_WATERY_GRAVE 38049
|
||||
#define SPELL_EARTHQUAKE 37764
|
||||
#define SAY_AGGRO -1548030
|
||||
#define SAY_SUMMON1 -1548031
|
||||
#define SAY_SUMMON2 -1548032
|
||||
#define SAY_SUMMON_BUBL1 -1548033
|
||||
#define SAY_SUMMON_BUBL2 -1548034
|
||||
#define SAY_SLAY1 -1548035
|
||||
#define SAY_SLAY2 -1548036
|
||||
#define SAY_SLAY3 -1548037
|
||||
#define SAY_DEATH -1548038
|
||||
#define EMOTE_WATERY_GRAVE -1548039
|
||||
#define EMOTE_EARTHQUAKE -1548040
|
||||
#define EMOTE_WATERY_GLOBULES -1548041
|
||||
|
||||
#define SPELL_TIDAL_WAVE 37730
|
||||
#define SPELL_WATERY_GRAVE 38049
|
||||
#define SPELL_EARTHQUAKE 37764
|
||||
#define SPELL_WATERY_GRAVE_EXPLOSION 37852
|
||||
|
||||
#define SAY_AGGRO "Flood of the deep, take you!"
|
||||
#define SAY_SUMMON1 "By the Tides, kill them at once!"
|
||||
#define SAY_SUMMON2 "Destroy them my subjects!"
|
||||
#define SAY_SLAY1 "It is done!"
|
||||
#define SAY_SLAY2 "Strugging only makes it worse."
|
||||
#define SAY_SLAY3 "Only the strong survive."
|
||||
#define SAY_SUMMON_BUBL1 "There is nowhere to hide!"
|
||||
#define SAY_SUMMON_BUBL2 "Soon it will be finished!"
|
||||
#define SAY_DEATH "Great... currents of... Ageon."
|
||||
#define WATERY_GRAVE_X1 334.64
|
||||
#define WATERY_GRAVE_Y1 -728.89
|
||||
#define WATERY_GRAVE_Z1 -14.42
|
||||
#define WATERY_GRAVE_X2 365.51
|
||||
#define WATERY_GRAVE_Y2 -737.14
|
||||
#define WATERY_GRAVE_Z2 -14.44
|
||||
#define WATERY_GRAVE_X3 366.19
|
||||
#define WATERY_GRAVE_Y3 -709.59
|
||||
#define WATERY_GRAVE_Z3 -14.36
|
||||
#define WATERY_GRAVE_X4 372.93
|
||||
#define WATERY_GRAVE_Y4 -690.96
|
||||
#define WATERY_GRAVE_Z4 -14.44
|
||||
|
||||
#define SOUND_AGGRO 11321
|
||||
#define SOUND_SUMMON1 11322
|
||||
#define SOUND_SUMMON2 11323
|
||||
#define SOUND_SLAY1 11326
|
||||
#define SOUND_SLAY2 11327
|
||||
#define SOUND_SLAY3 11328
|
||||
#define SOUND_SUMMON_BUBL1 11324
|
||||
#define SOUND_SUMMON_BUBL2 11325
|
||||
#define SOUND_DEATH 11329
|
||||
|
||||
#define WATERY_GRAVE_X1 334.64
|
||||
#define WATERY_GRAVE_Y1 -728.89
|
||||
#define WATERY_GRAVE_Z1 -14.42
|
||||
#define WATERY_GRAVE_X2 365.51
|
||||
#define WATERY_GRAVE_Y2 -737.14
|
||||
#define WATERY_GRAVE_Z2 -14.44
|
||||
#define WATERY_GRAVE_X3 366.19
|
||||
#define WATERY_GRAVE_Y3 -709.59
|
||||
#define WATERY_GRAVE_Z3 -14.36
|
||||
#define WATERY_GRAVE_X4 372.93
|
||||
#define WATERY_GRAVE_Y4 -690.96
|
||||
#define WATERY_GRAVE_Z4 -14.44
|
||||
|
||||
#define EMOTE_WATERY_GRAVE "sends his enemies to their watery graves!"
|
||||
#define EMOTE_EARTHQUAKE "The violent earthquake has alerted nearby murlocs!"
|
||||
#define EMOTE_WATERY_GLOBULES "summons Watery Globules!"
|
||||
|
||||
#define WATER_GLOBULE 21913
|
||||
#define TIDEWALKER_LURKER 21920
|
||||
#define WATER_GLOBULE 21913
|
||||
#define TIDEWALKER_LURKER 21920
|
||||
|
||||
//Morogrim Tidewalker AI
|
||||
struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
@@ -98,16 +87,15 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
Earthquake = false;
|
||||
Phase2 = false;
|
||||
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void StartEvent()
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
@@ -115,29 +103,17 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY3);
|
||||
DoYell(SAY_SLAY3, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
@@ -150,28 +126,25 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
switch(pos)
|
||||
{
|
||||
case 0:
|
||||
x = WATERY_GRAVE_X1;
|
||||
y = WATERY_GRAVE_Y1;
|
||||
z = WATERY_GRAVE_Z1;
|
||||
break;
|
||||
|
||||
x = WATERY_GRAVE_X1;
|
||||
y = WATERY_GRAVE_Y1;
|
||||
z = WATERY_GRAVE_Z1;
|
||||
break;
|
||||
case 1:
|
||||
x = WATERY_GRAVE_X2;
|
||||
y = WATERY_GRAVE_Y2;
|
||||
z = WATERY_GRAVE_Z2;
|
||||
break;
|
||||
|
||||
x = WATERY_GRAVE_X2;
|
||||
y = WATERY_GRAVE_Y2;
|
||||
z = WATERY_GRAVE_Z2;
|
||||
break;
|
||||
case 2:
|
||||
x = WATERY_GRAVE_X3;
|
||||
y = WATERY_GRAVE_Y3;
|
||||
z = WATERY_GRAVE_Z3;
|
||||
break;
|
||||
|
||||
x = WATERY_GRAVE_X3;
|
||||
y = WATERY_GRAVE_Y3;
|
||||
z = WATERY_GRAVE_Z3;
|
||||
break;
|
||||
case 3:
|
||||
x = WATERY_GRAVE_X4;
|
||||
y = WATERY_GRAVE_Y4;
|
||||
z = WATERY_GRAVE_Z4;
|
||||
break;
|
||||
x = WATERY_GRAVE_X4;
|
||||
y = WATERY_GRAVE_Y4;
|
||||
z = WATERY_GRAVE_Z4;
|
||||
break;
|
||||
}
|
||||
|
||||
DoTeleportPlayer(player, x, y, z+1, player->GetOrientation());
|
||||
@@ -183,11 +156,11 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
Creature *Summoned;
|
||||
|
||||
Summoned = m_creature->SummonCreature(TIDEWALKER_LURKER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
if(Summoned)
|
||||
if (Summoned)
|
||||
{
|
||||
Unit *target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if(target)
|
||||
if (target)
|
||||
Summoned->AI()->AttackStart(target);
|
||||
}
|
||||
}
|
||||
@@ -197,11 +170,11 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
Creature *Globule;
|
||||
|
||||
Globule = m_creature->SummonCreature(WATER_GLOBULE, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 30000); //they despawn after 30 seconds
|
||||
if(Globule)
|
||||
if (Globule)
|
||||
{
|
||||
Unit *target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if(target)
|
||||
if (target)
|
||||
Globule->AI()->AttackStart(target);
|
||||
}
|
||||
}
|
||||
@@ -213,9 +186,9 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//Earthquake_Timer
|
||||
if(Earthquake_Timer < diff)
|
||||
if (Earthquake_Timer < diff)
|
||||
{
|
||||
if(!Earthquake)
|
||||
if (!Earthquake)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_EARTHQUAKE);
|
||||
Earthquake = true;
|
||||
@@ -225,15 +198,8 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON1);
|
||||
DoYell(SAY_SUMMON1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON2);
|
||||
DoYell(SAY_SUMMON2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
|
||||
}
|
||||
|
||||
//north
|
||||
@@ -252,7 +218,7 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
SummonMurloc(296.82, -726.33, -10.82);
|
||||
SummonMurloc(293.64, -726.64, -9.81);
|
||||
|
||||
DoTextEmote(EMOTE_EARTHQUAKE, NULL);
|
||||
DoScriptText(EMOTE_EARTHQUAKE, m_creature);
|
||||
|
||||
Earthquake = false;
|
||||
Earthquake_Timer = 40000+rand()%5000;
|
||||
@@ -260,62 +226,51 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
}else Earthquake_Timer -= diff;
|
||||
|
||||
//TidalWave_Timer
|
||||
if(TidalWave_Timer < diff)
|
||||
if (TidalWave_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_TIDAL_WAVE);
|
||||
TidalWave_Timer = 20000;
|
||||
}else TidalWave_Timer -= diff;
|
||||
|
||||
if(!Phase2)
|
||||
if (!Phase2)
|
||||
{
|
||||
//WateryGrave_Timer
|
||||
if(WateryGrave_Timer < diff)
|
||||
if (WateryGrave_Timer < diff)
|
||||
{
|
||||
//Teleport 4 players under the waterfalls
|
||||
Unit *target;
|
||||
for(uint8 i = 0; i < 4; i++)
|
||||
{
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 1);
|
||||
if(target && (target->GetTypeId() == TYPEID_PLAYER) && !target->HasAura(SPELL_WATERY_GRAVE, 0) && target->IsWithinDistInMap(m_creature, 50))
|
||||
if (target && (target->GetTypeId() == TYPEID_PLAYER) && !target->HasAura(SPELL_WATERY_GRAVE, 0) && target->IsWithinDistInMap(m_creature, 50))
|
||||
ApplyWateryGrave(target, i);
|
||||
}
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON_BUBL1);
|
||||
DoYell(SAY_SUMMON_BUBL1, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON_BUBL2);
|
||||
DoYell(SAY_SUMMON_BUBL2, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SUMMON_BUBL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SUMMON_BUBL2, m_creature); break;
|
||||
}
|
||||
|
||||
DoTextEmote(EMOTE_WATERY_GRAVE, NULL);
|
||||
|
||||
DoScriptText(EMOTE_WATERY_GRAVE, m_creature);
|
||||
WateryGrave_Timer = 30000;
|
||||
}else WateryGrave_Timer -= diff;
|
||||
|
||||
//Start Phase2
|
||||
if((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25)
|
||||
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25)
|
||||
Phase2 = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//WateryGlobules_Timer
|
||||
if(WateryGlobules_Timer < diff)
|
||||
if (WateryGlobules_Timer < diff)
|
||||
{
|
||||
SummonWaterGlobule(WATERY_GRAVE_X1, WATERY_GRAVE_Y1, WATERY_GRAVE_Z1);
|
||||
SummonWaterGlobule(WATERY_GRAVE_X2, WATERY_GRAVE_Y2, WATERY_GRAVE_Z2);
|
||||
SummonWaterGlobule(WATERY_GRAVE_X3, WATERY_GRAVE_Y3, WATERY_GRAVE_Z3);
|
||||
SummonWaterGlobule(WATERY_GRAVE_X4, WATERY_GRAVE_Y4, WATERY_GRAVE_Z4);
|
||||
|
||||
DoTextEmote(EMOTE_WATERY_GLOBULES, NULL);
|
||||
DoScriptText(EMOTE_WATERY_GLOBULES, m_creature);
|
||||
|
||||
WateryGlobules_Timer = 25000;
|
||||
}else WateryGlobules_Timer -= diff;
|
||||
@@ -362,9 +317,9 @@ struct TRINITY_DLL_DECL mob_water_globuleAI : public ScriptedAI
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
|
||||
return;
|
||||
|
||||
if(Check_Timer < diff)
|
||||
if (Check_Timer < diff)
|
||||
{
|
||||
if(m_creature->IsWithinDistInMap(m_creature->getVictim(), 5))
|
||||
if (m_creature->IsWithinDistInMap(m_creature->getVictim(), 5))
|
||||
{
|
||||
uint32 damage = 4000+rand()%2000;
|
||||
m_creature->DealDamage(m_creature->getVictim(), damage, NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_FROST, NULL, false);
|
||||
|
||||
Reference in New Issue
Block a user