[svn] * Merged SD2 Rev. 706 & 707

- Added: Pathaleon the Calculator script. Also added a Mechanar Instance script.
 - Added: Fixed and improved version of High King Maulgar. (Timers, Spells, Adds...)
 - Fixed: Nethermancer Sepethrea encounter. Spawning Adds, timers, spells...
 - Fixed: Lot of timers and spells like for: Doomlord Kazzak, Doomwalker, Gruul, and more.

* Fixed 147_world.sql

--HG--
branch : trunk
This commit is contained in:
slg
2008-11-13 17:12:54 -06:00
parent 55d58ea878
commit 2c3130d415
24 changed files with 930 additions and 368 deletions
+3
View File
@@ -348,6 +348,9 @@ scripts/zone/tempest_keep/the_eye/the_eye.cpp \
scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp \
scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp \
scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp \
scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp \
scripts/zone/tempest_keep/the_mechanar/def_mechanar.h \
scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp \
scripts/zone/temple_of_ahnqiraj/boss_bug_trio.cpp \
scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp \
scripts/zone/temple_of_ahnqiraj/boss_fankriss.cpp \
+4
View File
@@ -513,6 +513,8 @@ extern void AddSC_the_eye();
//--The Mechanar
extern void AddSC_boss_gatewatcher_iron_hand();
extern void AddSC_boss_nethermancer_sepethrea();
extern void AddSC_boss_pathaleon_the_calculator();
extern void AddSC_instance_mechanar();
//Temple of ahn'qiraj
extern void AddSC_boss_cthun();
@@ -1696,6 +1698,8 @@ void ScriptsInit()
//--The Mechanar
AddSC_boss_gatewatcher_iron_hand();
AddSC_boss_nethermancer_sepethrea();
AddSC_boss_pathaleon_the_calculator();
AddSC_instance_mechanar();
//Temple of ahn'qiraj
AddSC_boss_cthun();
@@ -1568,6 +1568,18 @@
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_nethermancer_sepethrea.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_pathaleon_the_calculator.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
>
</File>
</Filter>
</Filter>
<Filter
@@ -1813,6 +1813,18 @@
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_nethermancer_sepethrea.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_pathaleon_the_calculator.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
>
</File>
</Filter>
</Filter>
<Filter
@@ -1799,6 +1799,18 @@
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_nethermancer_sepethrea.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_pathaleon_the_calculator.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
>
</File>
<File
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
>
</File>
</Filter>
</Filter>
<Filter
@@ -162,9 +162,9 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI
soulholder = 0;
soulclass = 0;
Fear_timer = 20000;
Fear_timer = 15000 + rand()% 5000;
Ribbon_of_Souls_timer = 5000;
StolenSoul_Timer = 30000;
StolenSoul_Timer = 25000 + rand()% 10000;
HasTaunted = false;
Avatar_summoned = false;
@@ -250,7 +250,7 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI
DoCast(m_creature, SPELL_SUMMON_AVATAR);
Avatar_summoned = true;
StolenSoul_Timer = 45000;
StolenSoul_Timer = 15000 + rand()% 15000;
}
if (StolenSoul_Timer < diff)
@@ -275,7 +275,7 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI
DoCast(target,SPELL_STOLEN_SOUL);
DoSpawnCreature(ENTRY_STOLEN_SOUL,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
StolenSoul_Timer = 45000;
StolenSoul_Timer = 20000 + rand()% 10000;
} else StolenSoul_Timer = 1000;
}
}else StolenSoul_Timer -= diff;
@@ -291,7 +291,7 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI
if (Fear_timer < diff)
{
DoCast(m_creature,SPELL_SOUL_SCREAM);
Fear_timer = 25000 + rand()% 10000;
Fear_timer = 15000 + rand()% 15000;
}else Fear_timer -= diff;
DoMeleeAttackIfReady();
@@ -59,7 +59,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
void Reset()
{
LightningCloud_Timer = 28000;
LightningCloud_Timer = 15000;
LungBurst_Timer = 7000;
EnvelopingWinds_Timer = 9000;
@@ -111,7 +111,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
if (HeroicMode)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_LIGHTNING_CLOUD);
LightningCloud_Timer = 28000;
LightningCloud_Timer = 15000+rand()%10000;
}else LightningCloud_Timer -=diff;
//LungBurst_Timer
@@ -119,7 +119,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target, SPELL_LUNG_BURST);
LungBurst_Timer = 10000+rand()%5000;
LungBurst_Timer = 7000+rand()%5000;
}else LungBurst_Timer -=diff;
//EnvelopingWinds_Timer
@@ -164,7 +164,7 @@ struct TRINITY_DLL_DECL mob_coilfang_waterelementalAI : public ScriptedAI
if (WaterBoltVolley_Timer < diff)
{
DoCast(m_creature, HeroicMode ? H_SPELL_WATER_BOLT_VOLLEY : SPELL_WATER_BOLT_VOLLEY);
WaterBoltVolley_Timer = 10000+rand()%5000;
WaterBoltVolley_Timer = 7000+rand()%5000;
}else WaterBoltVolley_Timer -= diff;
DoMeleeAttackIfReady();
@@ -105,7 +105,7 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
void Reset()
{
Reflection_Timer = 10000;
Impale_Timer = 30000;
Impale_Timer = 7000+rand()%7000;
Rage_Timer = 45000;
CanRage = false;
@@ -186,14 +186,14 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
DoCast(m_creature,SPELL_WARLORDS_RAGE);
((mob_naga_distillerAI*)distiller->AI())->StartRageGen(m_creature);
}
Rage_Timer = 45000;
Rage_Timer = 3000+rand()%15000;
}else Rage_Timer -= diff;
//Reflection_Timer
if (Reflection_Timer < diff)
{
DoCast(m_creature, SPELL_SPELL_REFLECTION);
Reflection_Timer = 20000+rand()%5000;
Reflection_Timer = 15000+rand()%10000;
}else Reflection_Timer -= diff;
//Impale_Timer
@@ -22,6 +22,7 @@ SDCategory: Coilfang Resevoir, Underbog
EndScriptData */
#include "../../../creature/simple_ai.h"
#include "precompiled.h"
/*
--== Ghaz'an ==--
@@ -41,10 +41,10 @@ EndContentData */
#define SPELL_CORRUPTION 30938
#define SPELL_FIRE_NOVA 33775
#define SPELL_FIRE_NOVA 33132
#define H_SPELL_FIRE_NOVA 37371
#define SPELL_SHADOW_BOLT_VOLLEY 17228
#define SPELL_SHADOW_BOLT_VOLLEY 28599
#define H_SPELL_SHADOW_BOLT_VOLLEY 40070
#define SPELL_BURNING_NOVA 30940
@@ -46,10 +46,10 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
void Reset()
{
AcidSpray_Timer = 10000;
ExplodingBreaker_Timer = 4000;
AcidSpray_Timer = 15000;
ExplodingBreaker_Timer = 6000;
Domination_Timer = 120000;
Knockdown_Timer = 6000;
Knockdown_Timer = 10000;
}
void Aggro(Unit *who)
@@ -84,7 +84,7 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
if (AcidSpray_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_ACID_SPRAY);
AcidSpray_Timer = 16000+rand()%8000;
AcidSpray_Timer = 15000+rand()%8000;
}else AcidSpray_Timer -=diff;
if (ExplodingBreaker_Timer < diff)
@@ -92,11 +92,15 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
SummonWhelpsTimer = 45000;
BellowingRoarTimer = 30000;
WingBuffetTimer = 17000;
m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
m_creature->ApplySpellImmune(1, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);
}
void Aggro(Unit* who)
{
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
DoZoneInCombat();
}
void KilledUnit(Unit *victim)
@@ -147,7 +151,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
if(CleaveTimer < diff)
{
DoCast(m_creature->getVictim(), SPELL_CLEAVE);
CleaveTimer = 10000;
CleaveTimer = 7000;
}else CleaveTimer -= diff;
if(WingBuffetTimer < diff)
@@ -186,7 +190,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
if(EngulfingFlamesTimer < diff)
{
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_ENGULFINGFLAMES);
EngulfingFlamesTimer = 10000;
EngulfingFlamesTimer = 8000;
}else EngulfingFlamesTimer -= diff;
if(SummonWhelpsTimer < diff)
@@ -199,7 +203,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
if(Whelp)
Whelp->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0));
}
SummonWhelpsTimer = 45000;
SummonWhelpsTimer = 30000;
}else SummonWhelpsTimer -= diff;
}
@@ -1,23 +1,23 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_jandicebarov
SD%Complete: 100
SDComment:
SDComment:
SDCategory: Scholomance
EndScriptData */
@@ -60,15 +60,15 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
Rand = rand()%10;
switch (rand()%2)
{
case 0: RandX = 0 - Rand; break;
case 1: RandX = 0 + Rand; break;
case 0: RandX = 0 - Rand; break;
case 1: RandX = 0 + Rand; break;
}
Rand = 0;
Rand = rand()%10;
switch (rand()%2)
{
case 0: RandY = 0 - Rand; break;
case 1: RandY = 0 + Rand; break;
case 0: RandY = 0 - Rand; break;
case 1: RandY = 0 + Rand; break;
}
Rand = 0;
Summoned = DoSpawnCreature(11439, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
@@ -80,11 +80,10 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
{
if (Invisible && Invisible_Timer < diff)
{
//Become visible again
//Become visible again
m_creature->setFaction(14);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//Jandice Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11073);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11073); //Jandice Model
Invisible = false;
} else if (Invisible)
{
@@ -100,19 +99,23 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
//CurseOfBlood_Timer
if (CurseOfBlood_Timer < diff)
{
//Cast
DoCast(m_creature->getVictim(),SPELL_CURSEOFBLOOD);
//45 seconds
CurseOfBlood_Timer = 30000;
}else CurseOfBlood_Timer -= diff;
//Illusion_Timer
if (!Invisible && Illusion_Timer < diff)
{
//Inturrupt any spell casting
m_creature->InterruptNonMeleeSpells(false);
m_creature->setFaction(35);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// Invisible Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686); // Invisible Model
m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(),-99);
//Summon 10 Illusions attacking random gamers
Unit* target = NULL;
@@ -124,15 +127,17 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
Invisible = true;
Invisible_Timer = 3000;
//25 seconds until we should cast this agian
Illusion_Timer = 25000;
}else Illusion_Timer -= diff;
// //Illusion_Timer
// if (Illusion_Timer < diff)
// {
// //Cast
// DoCast(m_creature->getVictim(),SPELL_ILLUSION);
//
//
// //3 Illusion will be summoned
// if (Illusioncounter < 3)
// {
@@ -140,10 +145,11 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
// Illusioncounter++;
// }
// else {
// //15 seconds until we should cast this again
// Illusion_Timer = 15000;
// Illusioncounter=0;
// }
//
//
// }else Illusion_Timer -= diff;
DoMeleeAttackIfReady();
@@ -160,7 +166,8 @@ struct TRINITY_DLL_DECL mob_illusionofjandicebarovAI : public ScriptedAI
void Reset()
{
Cleave_Timer = 4000;
Cleave_Timer = 2000 + rand()%6000;
m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
void Aggro(Unit *who)
@@ -169,19 +176,24 @@ struct TRINITY_DLL_DECL mob_illusionofjandicebarovAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
//Cleave_Timer
if (Cleave_Timer < diff)
{
//Cast
DoCast(m_creature->getVictim(),SPELL_CLEAVE);
//5-8 seconds
Cleave_Timer = 5000 + rand()%3000;
}else Cleave_Timer -= diff;
DoMeleeAttackIfReady();
}
};
};
CreatureAI* GetAI_boss_jandicebarov(Creature *_Creature)
{
@@ -193,6 +205,7 @@ CreatureAI* GetAI_mob_illusionofjandicebarov(Creature *_Creature)
return new mob_illusionofjandicebarovAI (_Creature);
}
void AddSC_boss_jandicebarov()
{
Script *newscript;
@@ -1,23 +1,23 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_Doomwalker
SD%Complete: 100
SDComment:
SDComment:
SDCategory: Shadowmoon Valley
EndScriptData */
@@ -25,7 +25,7 @@ EndScriptData */
//--------------------------------------
//Spells
#define SPELL_SUNDER_ARMOR 30901
#define SPELL_SUNDER_ARMOR 33661
#define SPELL_CHAIN_LIGHTNING 33665
@@ -35,7 +35,7 @@ EndScriptData */
#define SAY_OVERRUN_2 "Engage maximum speed."
#define SOUND_OVERRUN_2 11348
#define SPELL_ENRAGE 34624
#define SPELL_ENRAGE 33653
#define SPELL_MARK_DEATH 37128
@@ -44,17 +44,20 @@ EndScriptData */
#define SOUND_EARTHQUAKE_1 11345
#define SAY_EARTHQUAKE_2 "Magnitude set. Release."
#define SOUND_EARTHQUAKE_2 11346
//---------------------------------------
//Aggro
#define SAY_AGGRO "Do not proceed. You will be eliminated!"
#define SOUND_AGGRO 11344
//---------------------------------------
//Slay
#define SAY_SLAY_1 "Threat level zero."
#define SOUND_SLAY_1 11349
#define SAY_SLAY_2 "Directive accomplished."
#define SOUND_SLAY_2 11350
#define SAY_SLAY_3 "Target exterminated."
#define SOUND_SLAY_3 11351
//---------------------------------------
//Death
#define SAY_DEATH "System failure in five... four..."
#define SOUND_DEATH 11352
@@ -62,10 +65,11 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI
{
boss_doomwalkerAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 Chain_Timer;
uint32 Enrage_Timer;
uint32 Enrage_Timer;
uint32 Overrun_Timer;
uint32 Quake_Timer;
uint32 Quake_Timer;
uint32 Armor_Timer;
bool InEnrage;
@@ -73,12 +77,12 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI
void Reset()
{
Enrage_Timer = 0;
Armor_Timer = 10000;
Chain_Timer = 20000;
Quake_Timer = 60000;
Overrun_Timer = 120000;
Armor_Timer = 5000 + rand()%8000;
Chain_Timer = 10000 + rand()%20000;
Quake_Timer = 25000 + rand()%10000;
Overrun_Timer = 30000 + rand()%15000;
InEnrage = false;
InEnrage = false;
}
void KilledUnit(Unit* Victim)
@@ -88,18 +92,18 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI
switch(rand()%3)
{
case 0:
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_2);
break;
case 2:
DoYell(SAY_SLAY_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_3);
break;
case 0:
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_2);
break;
case 2:
DoYell(SAY_SLAY_3, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_3);
break;
}
}
@@ -111,20 +115,21 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI
void Aggro(Unit *who)
{
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
if (m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))
{
//when hp <= 20% gain enrage
if (((m_creature->GetHealth()*100)/ m_creature->GetMaxHealth()) <= 20)
{
//Spell Enrage
if (((m_creature->GetHealth()*100)/ m_creature->GetMaxHealth()) <= 20)//when hp <= 20% gain enrage
{
if(Enrage_Timer < diff)
{
DoCast(m_creature,SPELL_ENRAGE);
@@ -135,20 +140,20 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI
//Spell Overrun
if (Overrun_Timer < diff)
{
{
switch(rand()%2)
{
case 0:
DoYell(SAY_OVERRUN_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_OVERRUN_1);
break;
case 1:
DoYell(SAY_OVERRUN_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_OVERRUN_2);
break;
case 0:
DoYell(SAY_OVERRUN_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_OVERRUN_1);
break;
case 1:
DoYell(SAY_OVERRUN_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_OVERRUN_2);
break;
}
DoCast(m_creature->getVictim(),SPELL_OVERRUN);
Overrun_Timer = (30 + rand()% 40) * 1000; //30-70sec cooldown
Overrun_Timer = 25000 + rand()%15000;
}else Overrun_Timer -= diff;
@@ -160,41 +165,41 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI
switch(rand()%2)
{
case 0:
DoYell(SAY_EARTHQUAKE_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_1);
break;
case 1:
DoYell(SAY_EARTHQUAKE_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_2);
break;
case 0:
DoYell(SAY_EARTHQUAKE_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_1);
break;
case 1:
DoYell(SAY_EARTHQUAKE_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_2);
break;
}
if(InEnrage)
{
m_creature->RemoveAura(SPELL_ENRAGE, 0);//remove enrage before casting earthquake because enrage + earthquake = 16000dmg over 8sec and all dead
}
DoCast(m_creature,SPELL_EARTHQUAKE);
Quake_Timer = (70 + rand()% 30) * 1000; //70-100sec cooldown
Quake_Timer = 30000 + rand()%25000;
}else Quake_Timer -= diff;
//Spell Chain Lightning
if (Chain_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_CHAIN_LIGHTNING);
Chain_Timer = (50 + rand()% 50) * 1000; //50-100sec cooldown
Chain_Timer = 15000 + rand()%25000;
}else Chain_Timer -= diff;
//Spell Sunder Armor
//Spell Sunder Armor
if (Armor_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SUNDER_ARMOR);
Armor_Timer = (15 + rand()% 7) * 1000; //15-23sec cooldown about 70 proc to stack
Armor_Timer = 15000 + rand()%15000;
}else Armor_Timer -= diff;
DoMeleeAttackIfReady();
}
}
};
};
CreatureAI* GetAI_boss_doomwalker(Creature *_Creature)
{
@@ -1,18 +1,18 @@
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_Warp_Splinter
@@ -69,7 +69,7 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI
#define WAR_STOMP 34716
#define SUMMON_TREANTS 34727 // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon)
#define ARCANE_VOLLEY 35059 //37078, 34785 //must additional script them (because Splinter eats them after 20 sec ^)
#define ARCANE_VOLLEY 36705 //37078, 34785 //must additional script them (because Splinter eats them after 20 sec ^)
#define SPELL_HEAL_FATHER 6262
#define CREATURE_TREANT 19949
@@ -92,7 +92,7 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI
#define TREANT_SPAWN_DIST 50 //50 yards from Warp Splinter's spawn point
float treant_pos[6][3] =
float treant_pos[6][3] =
{
{24.301233, 427.221100, -27.060635},
{16.795492, 359.678802, -27.355425},
@@ -121,12 +121,15 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
float Treant_Spawn_Pos_X;
float Treant_Spawn_Pos_Y;
bool InCombat;
void Reset()
{
War_Stomp_Timer = 60000;
InCombat = false;
War_Stomp_Timer = 25000 + rand()%15000;
Summon_Treants_Timer = 45000;
Arcane_Volley_Timer = 140000;
Arcane_Volley_Timer = 8000 + rand()%12000;
CheckTreantLOS_Timer = 1000;
TreantLife_Timer = 999999;
@@ -140,6 +143,7 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
{
DoYell(SAY_COMBAT_START,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_COMBAT_START);
InCombat = true;
}
// On Killed Unit
@@ -147,17 +151,18 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
{
switch(rand()%2)
{
case 0:
DoYell(SAY_SLAY_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_2);
break;
case 0:
DoYell(SAY_SLAY_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_SLAY_2);
break;
}
}
// On Death
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);
@@ -167,7 +172,7 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
void SummonTreants()
{
for(int i = 0; i < 6; ++i)
{
{
float angle = (M_PI / 3) * i;
float X = Treant_Spawn_Pos_X + TREANT_SPAWN_DIST * cos(angle);
@@ -185,17 +190,16 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
((mob_treantAI*)pTreant->AI())->WarpGuid = m_creature->GetGUID();
}
}
switch(rand()%2)
{
case 0:
DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_SUMMON_1);
break;
case 1:
DoYell(SAY_SUMMON_2,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_SUMMON_2);
break;
{
case 0:
DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_SUMMON_1);
break;
case 1:
DoYell(SAY_SUMMON_2,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,SOUND_SUMMON_2);
break;
}
}
@@ -223,22 +227,29 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
//Check for War Stomp
if(War_Stomp_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),WAR_STOMP);
War_Stomp_Timer = 60000;
//Cast again on time
War_Stomp_Timer = 25000 + rand()%15000;
}
else War_Stomp_Timer -= diff;
//Check for Arcane Volley
if(Arcane_Volley_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),ARCANE_VOLLEY);
Arcane_Volley_Timer = 40000+((rand()%20)*1000);
//Cast again on time
Arcane_Volley_Timer = 20000 + rand()%15000;
}
else Arcane_Volley_Timer -= diff;
@@ -246,7 +257,9 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
if(Summon_Treants_Timer < diff)
{
SummonTreants();
Summon_Treants_Timer = 45000;
//Cast again on time
Summon_Treants_Timer = 45000;
}
else Summon_Treants_Timer -= diff;
@@ -254,6 +267,7 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI
if( CheckTreantLOS_Timer < diff)
{
EatTreant();
CheckTreantLOS_Timer = 1000;
}
else CheckTreantLOS_Timer -= diff;
@@ -1,147 +1,161 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss Gatewatcher Ironhand
SD%Complete: 100
SDComment:
SDComment:
SDCategory: Tempest Keep, The Mechanar
EndScriptData */
#include "precompiled.h"
#define SPELL_SHADOW_POWER 35322
#define SPELL_JACKHAMMER 35326
#define SPELL_STREAM_OF_MACHINE_FLUID 35311
// Spells to be casted
#define SPELL_SHADOW_POWER 35322
#define SPELL_JACKHAMMER 35326
#define SPELL_STREAM_OF_MACHINE_FLUID 35311
#define SAY_SPELL_JACKHAMMER_1 "With the precise angle and velocity... "
#define SOUND_SPELL_JACKHAMMER_1 11112
#define SAY_SPELL_JACKHAMMER_2 "Low tech yet quiet effective!"
#define SOUND_SPELL_JACKHAMMER_2 11113
#define SAY_AGGRO_1 "You have approximately five seconds to live."
#define SOUND_SAY_AGGRO_1 11109
#define SAY_SLAY_1 "A foregone conclusion."
#define SOUND_SLAY_1 11110
#define SAY_SLAY_2 "The processing will continue a schedule!"
#define SOUND_SLAY_2 11111
#define SAY_DEATH_1 "My calculations did not... "
#define SOUND_DEATH_1 11114
#define SAY_SPELL_JACKHAMMER_1 "With the precise angle and velocity... "
#define SOUND_SPELL_JACKHAMMER_1 11112
#define SAY_SPELL_JACKHAMMER_2 "Low tech yet quiet effective!"
#define SOUND_SPELL_JACKHAMMER_2 11113
// On Aggro
#define SAY_AGGRO_1 "You have approximately five seconds to live."
#define SOUND_SAY_AGGRO_1 11109
//On Kill Unit
#define SAY_SLAY_1 "A foregone conclusion."
#define SOUND_SLAY_1 11110
#define SAY_SLAY_2 "The processing will continue a schedule!"
#define SOUND_SLAY_2 11111
// On Death
#define SAY_DEATH_1 "My calculations did not... "
#define SOUND_DEATH_1 11114
// Gatewatcher Iron-Hand AI
struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI
{
boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) { Reset(); }
{
boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) { Reset(); }
uint32 Shadow_Power_Timer;
uint32 Shadow_Power_Timer;
uint32 Jackhammer_Timer;
uint32 Stream_of_Machine_Fluid_Timer;
uint32 Stream_of_Machine_Fluid_Timer;
void Reset()
{
Shadow_Power_Timer = 25000;
void Reset()
{
Shadow_Power_Timer = 25000;
Jackhammer_Timer = 45000;
Stream_of_Machine_Fluid_Timer = 55000;
}
void Aggro(Unit *who)
{
}
}
void Aggro(Unit *who)
{
}
void KilledUnit(Unit* victim)
// On Killed Unit
void KilledUnit(Unit* victim)
{
if (rand()%2)
return;
switch(rand()%2)
{
case 0:
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_2);
break;
case 0:
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
break;
case 1:
DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_2);
break;
}
}
// On Death
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_DEATH_1);
}
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_DEATH_1);
}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
//Shadow Power
if(Shadow_Power_Timer < diff)
{
//Check for Shadow Power
if(Shadow_Power_Timer < diff)
{
//time to cast
DoCast(m_creature,SPELL_SHADOW_POWER);
Shadow_Power_Timer = 25000;
}else Shadow_Power_Timer -= diff;
//Jack Hammer
if(Jackhammer_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_JACKHAMMER);
//Cast again on time
Shadow_Power_Timer = 20000 + rand()%8000;
}else Shadow_Power_Timer -= diff;
//Check for Jack Hammer
if(Jackhammer_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_JACKHAMMER);
if (rand()%2)
return;
switch(rand()%2)
{
case 0:
DoYell(SAY_SPELL_JACKHAMMER_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_1);
break;
case 1:
DoYell(SAY_SPELL_JACKHAMMER_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_2);
break;
}
case 0:
DoYell(SAY_SPELL_JACKHAMMER_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_1);
break;
Jackhammer_Timer = 45000;
}else Jackhammer_Timer -= diff;
case 1:
DoYell(SAY_SPELL_JACKHAMMER_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_2);
break;
}
//Cast again on time
Jackhammer_Timer = 30000;
}else Jackhammer_Timer -= diff;
//Stream of Machine Fluid
if(Stream_of_Machine_Fluid_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_STREAM_OF_MACHINE_FLUID);
Stream_of_Machine_Fluid_Timer = 55000;
//Check for Stream of Machine Fluid
if(Stream_of_Machine_Fluid_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_STREAM_OF_MACHINE_FLUID);
//Cast again on time
Stream_of_Machine_Fluid_Timer = 35000 + rand()%15000;
}else Stream_of_Machine_Fluid_Timer -= diff;
DoMeleeAttackIfReady();
}
};
}
};
CreatureAI* GetAI_boss_gatewatcher_iron_hand(Creature *_Creature)
{
{
return new boss_gatewatcher_iron_handAI (_Creature);
}
}
void AddSC_boss_gatewatcher_iron_hand()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_gatewatcher_iron_hand";
newscript->GetAI = GetAI_boss_gatewatcher_iron_hand;
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_gatewatcher_iron_hand";
newscript->GetAI = GetAI_boss_gatewatcher_iron_hand;
m_scripts[nrscripts++] = newscript;
}
@@ -1,30 +1,32 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss Nethermancer Sepethrea
SD%Complete: 100
SDComment:
SDComment:
SDCategory: Tempest Keep, The Mechanar
EndScriptData */
#include "precompiled.h"
#include "def_mechanar.h"
// Spells to be casted
#define SPELL_SUMMON_RAGIN_FLAMES 35275
#define SPELL_INFERNO 19695
#define SPELL_INFERNO 35268
#define SPELL_FIRE_TAIL 35278
#define SPELL_FROST_ATTACK 35263
@@ -37,19 +39,21 @@ EndScriptData */
#define SOUND_SPELL_DRAGONS_BREATH_1 11189
#define SAY_SPELL_DRAGONS_BREATH_2 "Anar'endal dracon!"
#define SOUND_SPELL_DRAGONS_BREATH_2 11190
// On Aggro
#define SAY_AGGRO "Don't value your life very much, do you?"
#define SOUND_SAY_AGGRO 11186
//On Kill Unit
#define SAY_SLAY "And don't come back!"
#define SOUND_SLAY 11187
// On Death
#define SAY_DEATH "Anu... bala belore...alon."
#define SOUND_DEATH 11192
struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
{
boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) { Reset(); }
boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 frost_attack_Timer;
uint32 arcane_blast_Timer;
@@ -57,109 +61,154 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI
uint32 knockback_Timer;
uint32 solarburn_Timer;
void Reset()
void Reset()
{
frost_attack_Timer = 10000;
arcane_blast_Timer = 15000;
dragons_breath_Timer = 20000;
knockback_Timer = 25000;
frost_attack_Timer = 7000 + rand()%3000;
arcane_blast_Timer = 12000 + rand()%6000;
dragons_breath_Timer = 18000 + rand()%4000;
knockback_Timer = 22000 + rand()%6000;
solarburn_Timer = 30000;
}
}
void Aggro(Unit *who)
{
}
void Aggro(Unit *who)
{
for(int i = 0; i < 1;i++) //Summon two Guards
{
DoCast(m_creature->getVictim(),SPELL_SUMMON_RAGIN_FLAMES);
}
}
void KilledUnit(Unit* victim)
// On Killed Unit
void KilledUnit(Unit* victim)
{
DoYell(SAY_SLAY, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY);
}
void JustDied(Unit* Killer)
{
// On Death
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_DEATH);
DoPlaySoundToSet(m_creature, SOUND_DEATH);
ScriptedInstance *pInstance = ((ScriptedInstance*)m_creature->GetInstanceData());
if(pInstance)
pInstance->SetData(DATA_SEPETHREA_DEATH, 0);
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
//Return since we have no target
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
//Frost Attack
if(frost_attack_Timer < diff)
{
//Check for Frost Attack
if(frost_attack_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_FROST_ATTACK);
frost_attack_Timer = 10000;
//Cast again on time
frost_attack_Timer = 7000 + rand()%30000;
}else frost_attack_Timer -= diff;
//Arcane Blast
if(arcane_blast_Timer < diff)
{
//Check for Arcane Blast
if(arcane_blast_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_ARCANE_BLAST);
arcane_blast_Timer = 15000;
//Cast again on time
arcane_blast_Timer = 15000;
}else arcane_blast_Timer -= diff;
//Dragons Breath
if(dragons_breath_Timer < diff)
{
//Check for Dragons Breath
if(dragons_breath_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_DRAGONS_BREATH);
dragons_breath_Timer = 20000;
if (rand()%2)
return;
switch(rand()%2)
{
if (rand()%2)
return;
switch(rand()%2)
{
case 0:
DoYell(SAY_SPELL_DRAGONS_BREATH_1, LANG_UNIVERSAL, NULL);
DoYell(SAY_SPELL_DRAGONS_BREATH_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SPELL_DRAGONS_BREATH_1);
break;
case 1:
DoYell(SAY_SPELL_DRAGONS_BREATH_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SPELL_DRAGONS_BREATH_2);
break;
}
}
}else dragons_breath_Timer -= diff;
//Cast again on time
dragons_breath_Timer = 12000 + rand()%10000;
}else dragons_breath_Timer -= diff;
//Check for Knockback
if(knockback_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_KNOCKBACK);
//Cast again on time
knockback_Timer = 15000 + rand()%10000;
//Knockback
if(knockback_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_KNOCKBACK);
knockback_Timer = 25000;
}else knockback_Timer -= diff;
//Solarburn
if(solarburn_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SOLARBURN);
solarburn_Timer = 30000;
//Check for Solarburn
if(solarburn_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_SOLARBURN);
//Cast again on time
solarburn_Timer = 30000;
}else solarburn_Timer -= diff;
DoMeleeAttackIfReady();
}
}
};
CreatureAI* GetAI_boss_nethermancer_sepethrea(Creature *_Creature)
{
{
return new boss_nethermancer_sepethreaAI (_Creature);
}
struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI
{
mob_ragin_flamesAI(Creature *c) : ScriptedAI(c) {Reset();}
mob_ragin_flamesAI(Creature *c) : ScriptedAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
Reset();
}
ScriptedInstance *pInstance;
uint32 inferno_Timer;
uint32 flame_timer;
uint32 Check_Timer;
bool onlyonce;
void Reset()
{
{
inferno_Timer = 10000;
flame_timer = 200;
flame_timer = 500;
Check_Timer = 2000;
onlyonce = false;
m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
}
void Aggro(Unit* who)
@@ -184,40 +233,54 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI
if(inferno_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_INFERNO);
DoCast(m_creature->getVictim(),SPELL_INFERNO);
m_creature->TauntApply(m_creature->getVictim());
inferno_Timer = 10000;
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,0);
m_creature->GetMotionMaster()->MoveChase(target);
}else inferno_Timer -= diff;
if(flame_timer < diff)
{
DoCast(m_creature,SPELL_FIRE_TAIL);
flame_timer = 200;
flame_timer = 500;
}else flame_timer -=diff;
//Check_Timer
if(Check_Timer < diff)
{
if(pInstance)
{
if(pInstance->GetData(DATA_SEPETHREAISDEAD))
{
//remove
m_creature->setDeathState(JUST_DIED);
m_creature->RemoveCorpse();
}
}
Check_Timer = 1000;
}else Check_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_mob_ragin_flames(Creature *_Creature)
{
return new mob_ragin_flamesAI (_Creature);
}
void AddSC_boss_nethermancer_sepethrea()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_nethermancer_sepethrea";
newscript->GetAI = GetAI_boss_nethermancer_sepethrea;
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_nethermancer_sepethrea";
newscript->GetAI = GetAI_boss_nethermancer_sepethrea;
m_scripts[nrscripts++] = newscript;
newscript = new Script;
newscript->Name="mob_ragin_flames";
newscript->GetAI = GetAI_mob_ragin_flames;
newscript = new Script;
newscript->Name="mob_ragin_flames";
newscript->GetAI = GetAI_mob_ragin_flames;
m_scripts[nrscripts++] = newscript;
}
@@ -0,0 +1,306 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss Pathaleon the Calculator
SD%Complete: 50
SDComment: Event missing. Script for himself 99% blizzlike.
SDCategory: Tempest Keep, The Mechanar
EndScriptData */
#include "precompiled.h"
// Spells to be casted
#define SPELL_SUMMON_NETHER_WRAITH 35287 //Spell not working. Summon is working but Pets dont attack and wrong HP.
#define SPELL_MANA_TAP 36021
#define SPELL_ARCANE_TORRENT 36022
#define SPELL_DOMINATION 35280
#define H_SPELL_ARCANE_EXPLOSION 34791 //Spell not right.
#define SPELL_ENRAGE 36992
// Add Spells
#define SPELL_DETONATION 35058
#define SPELL_ARCANE_MISSILES 35034
// On Domination
#define SAY_SPELL_DOMINATION_1 "I'm looking for a team player... "
#define SOUND_SPELL_DOMINATION_1 11197
#define SAY_SPELL_DOMINATION_2 "You work for me now!"
#define SOUND_SPELL_DOMINATION_2 11198
// On Summon
#define SAY_SUMMON_1 "Time to supplement my work force."
#define SOUND_SAY_SUMMON_1 11196
// On Enrage
#define SAY_ENRAGE_1 "A minor inconvenience."
#define SOUND_SAY_ENRAGE_1 11199
// On Aggro
#define SAY_AGGRO_1 "We are on a strict timetable. You will not interfere!"
#define SOUND_SAY_AGGRO_1 11193
//On Kill Unit
#define SAY_SLAY_1 "Looks like you lose"
#define SOUND_SLAY_1 11195
// On Death
#define SAY_DEATH_1 "The project will... continue."
#define SOUND_DEATH_1 11200
struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI
{
boss_pathaleon_the_calculatorAI(Creature *c) : ScriptedAI(c)
{
HeroicMode = m_creature->GetMap()->IsHeroic();
Reset();
}
uint32 Summon_Timer;
uint32 ManaTap_Timer;
uint32 ArcaneTorrent_Timer;
uint32 Domination_Timer;
uint32 ArcaneExplosion_Timer;
bool HeroicMode;
bool Enraged;
uint32 Counter;
Creature* Wraith;
void Reset()
{
Summon_Timer = 30000;
ManaTap_Timer = 12000 + rand()%8000;
ArcaneTorrent_Timer = 16000 + rand()%9000;
Domination_Timer = 25000 + rand()%15000;
ArcaneExplosion_Timer = 8000 + rand()%5000;
Enraged = false;
Counter = 0;
}
void Aggro(Unit *who)
{
DoYell(SAY_AGGRO_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_SAY_AGGRO_1);
}
// On Killed Unit
void KilledUnit(Unit* victim)
{
DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
}
// On Death
void JustDied(Unit* Killer)
{
DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_DEATH_1);
}
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
if(Summon_Timer < diff)
{
Unit* target = NULL;
for(int i = 0; i < 3;i++)
{
target = SelectUnit(SELECT_TARGET_RANDOM,0);
Wraith = m_creature->SummonCreature(21062,m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
if (target)
Wraith->AI()->AttackStart(target);
}
DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature, SOUND_SAY_SUMMON_1);
Summon_Timer = 30000 + rand()%15000;
}else Summon_Timer -= diff;
if(ManaTap_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_MANA_TAP);
//Cast again on time
ManaTap_Timer = 14000 + rand()%8000;
}else ManaTap_Timer -= diff;
if(ArcaneTorrent_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),SPELL_ARCANE_TORRENT);
//Cast again on time
ArcaneTorrent_Timer = 12000 + rand()%6000;
}else ArcaneTorrent_Timer -= diff;
if(Domination_Timer < diff)
{
//time to cast
switch(rand()%2)
{
case 0:
DoYell(SAY_SPELL_DOMINATION_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SPELL_DOMINATION_1);
break;
case 1:
DoYell(SAY_SPELL_DOMINATION_2, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature, SOUND_SPELL_DOMINATION_2);
break;
}
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,1);
if (target) DoCast(target,SPELL_DOMINATION);
//Cast again on time
Domination_Timer = 25000 + rand()%5000;
}else Domination_Timer -= diff;
//Only casting if Heroic Mode is used
if (HeroicMode)
{
if(ArcaneExplosion_Timer < diff)
{
//time to cast
DoCast(m_creature->getVictim(),H_SPELL_ARCANE_EXPLOSION);
//Cast again on time
ArcaneExplosion_Timer = 10000 + rand()%4000;
}else ArcaneExplosion_Timer -= diff;
}
if (!Enraged && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 21)
{
DoCast(m_creature, SPELL_ENRAGE);
DoYell(SAY_ENRAGE_1, LANG_UNIVERSAL, NULL);
DoPlaySoundToSet(m_creature,SOUND_SAY_ENRAGE_1);
Enraged = true;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_pathaleon_the_calculator(Creature *_Creature)
{
return new boss_pathaleon_the_calculatorAI (_Creature);
}
struct TRINITY_DLL_DECL mob_nether_wraithAI : public ScriptedAI
{
mob_nether_wraithAI(Creature *c) : ScriptedAI(c) {Reset();}
ScriptedInstance *pInstance;
uint32 ArcaneMissiles_Timer;
uint32 Detonation_Timer;
uint32 Die_Timer;
bool Detonation;
void Reset()
{
ArcaneMissiles_Timer = 1000 + rand()%3000;
Detonation_Timer = 20000;
Die_Timer = 2200;
Detonation = false;
}
void Aggro(Unit* who)
{
}
void UpdateAI(const uint32 diff)
{
Unit* target = NULL;
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if(ArcaneMissiles_Timer < diff)
{
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,1);
if (!target)
target = m_creature->getVictim();
if (target)
{
DoCast(target,SPELL_ARCANE_MISSILES);
}
ArcaneMissiles_Timer = 5000 + rand()%5000;
}else ArcaneMissiles_Timer -=diff;
if (!Detonation)
{
if(Detonation_Timer < diff)
{
//time to cast
DoCast(m_creature,SPELL_DETONATION);
Detonation = true;
}else Detonation_Timer -= diff;
}
if (Detonation)
{
if (Die_Timer < diff)
{
m_creature->setDeathState(JUST_DIED);
m_creature->RemoveCorpse();
}else Die_Timer -= diff;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_mob_nether_wraith(Creature *_Creature)
{
return new mob_nether_wraithAI (_Creature);
}
void AddSC_boss_pathaleon_the_calculator()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_pathaleon_the_calculator";
newscript->GetAI = GetAI_boss_pathaleon_the_calculator;
m_scripts[nrscripts++] = newscript;
newscript = new Script;
newscript->Name="mob_nether_wraith";
newscript->GetAI = GetAI_mob_nether_wraith;
m_scripts[nrscripts++] = newscript;
}
@@ -0,0 +1,6 @@
#ifndef DEF_MECHANAR_H
#define DEF_MECHANAR_H
#define DATA_SEPETHREA_DEATH 1
#define DATA_SEPETHREAISDEAD 2
#endif
@@ -0,0 +1,90 @@
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Instance_Mechanar
SD%Complete: 100
SDComment:
SDCategory: Mechanar
EndScriptData */
#include "precompiled.h"
#include "def_mechanar.h"
struct TRINITY_DLL_DECL instance_mechanar : public ScriptedInstance
{
instance_mechanar(Map *Map) : ScriptedInstance(Map) {Initialize();};
bool IsBossDied[1];
void OnCreatureCreate (Creature *creature, uint32 creature_entry)
{
}
void Initialize()
{
IsBossDied[0] = false;
}
bool IsEncounterInProgress() const
{
//not active
return false;
}
uint32 GetData(uint32 type)
{
switch(type)
{
case DATA_SEPETHREAISDEAD:
if(IsBossDied[0])
return 1;
break;
}
return 0;
}
uint64 GetData64 (uint32 identifier)
{
return 0;
}
void SetData(uint32 type, uint32 data)
{
switch(type)
{
case DATA_SEPETHREA_DEATH:
IsBossDied[0] = true;
break;
}
}
};
InstanceData* GetInstanceData_instance_mechanar(Map* map)
{
return new instance_mechanar(map);
}
void AddSC_instance_mechanar()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_mechanar";
newscript->GetInstanceData = GetInstanceData_instance_mechanar;
m_scripts[nrscripts++] = newscript;
}
@@ -6,31 +6,32 @@
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_Sartura
SDName: boss_sartura
SD%Complete: 99
SDComment:
SDComment:
SDCategory: Temple of Ahn'Qiraj
EndScriptData */
#include "precompiled.h"
#define SPELL_WHIRLWIND 26083
#define SPELL_ENRAGE 28747 //Not sure if right ID.
#define SPELL_ENRAGE 28747 //Not sure if right ID.
#define SPELL_ENRAGEHARD 28798
//Guard Spell
#define SPELL_WHIRLWINDADD 26038
#define SPELL_KNOCKBACK 26027
struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
{
boss_sarturaAI(Creature *c) : ScriptedAI(c) {Reset();}
@@ -58,8 +59,9 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
WhirlWind = false;
AggroReset = false;
Enraged = false;
Enraged = false;
EnragedHard = false;
}
void Aggro(Unit *who)
@@ -77,9 +79,7 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
if (WhirlWindRandom_Timer < diff)
{
//Attack random Gamers
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,1);
if (target)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
AttackStart(target);
WhirlWindRandom_Timer = 3000 + rand()%4000;
@@ -104,13 +104,11 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
if (AggroReset_Timer < diff)
{
//Attack random Gamers
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,1);
if (target)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
m_creature->TauntApply(target);
AggroReset = true;
AggroReset_Timer = 2000 + rand()%3000;
AggroReset = true;
AggroReset_Timer = 2000 + rand()%3000;
}else AggroReset_Timer -= diff;
if (AggroReset)
@@ -119,7 +117,8 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
{
AggroReset = false;
AggroResetEnd_Timer = 5000;
}AggroResetEnd_Timer -= diff;
AggroReset_Timer = 35000 + rand()%10000;
} else AggroResetEnd_Timer -= diff;
}
//If she is 20% enrage
@@ -130,7 +129,7 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
DoCast(m_creature, SPELL_ENRAGE);
Enraged = true;
}
}
}
//After 10 minutes hard enrage
if (!EnragedHard)
@@ -139,13 +138,14 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI
{
DoCast(m_creature, SPELL_ENRAGEHARD);
EnragedHard = true;
}EnrageHard_Timer -= diff;
} else EnrageHard_Timer -= diff;
}
DoMeleeAttackIfReady();
}
}
};
};
struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
{
@@ -157,7 +157,7 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
uint32 AggroReset_Timer;
uint32 AggroResetEnd_Timer;
uint32 KnockBack_Timer;
bool WhirlWind;
bool AggroReset;
@@ -169,9 +169,10 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
AggroReset_Timer = 45000 + rand()%10000;
AggroResetEnd_Timer = 5000;
KnockBack_Timer = 10000;
WhirlWind = false;
AggroReset = false;
}
void Aggro(Unit *who)
@@ -197,9 +198,7 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
if (WhirlWindRandom_Timer < diff)
{
//Attack random Gamers
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,1);
if (target)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
m_creature->TauntApply(target);
WhirlWindRandom_Timer = 3000 + rand()%4000;
@@ -213,12 +212,10 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
if (!WhirlWind)
{
if(AggroReset_Timer < diff)
if (AggroReset_Timer < diff)
{
//Attack random Gamers
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,1);
if (target)
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
AttackStart(target);
AggroReset = true;
@@ -238,7 +235,8 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI
{
AggroReset = false;
AggroResetEnd_Timer = 5000;
}AggroResetEnd_Timer -= diff;
AggroReset_Timer = 30000 + rand()%10000;
} else AggroResetEnd_Timer -= diff;
}
DoMeleeAttackIfReady();
@@ -258,7 +256,6 @@ CreatureAI* GetAI_mob_sartura_royal_guard(Creature *_Creature)
void AddSC_boss_sartura()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_sartura";
newscript->GetAI = GetAI_boss_sartura;