[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:
slg
2008-11-04 15:21:02 -06:00
parent 89c9756b77
commit 31cebde085
9 changed files with 1959 additions and 489 deletions
+85
View File
@@ -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
@@ -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()
{
@@ -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;
@@ -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;
@@ -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;
@@ -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);