aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorslg <none@none>2008-11-13 17:12:54 -0600
committerslg <none@none>2008-11-13 17:12:54 -0600
commit2c3130d415e1eed2cdd193424594fe560c6afa61 (patch)
tree18340310b97d6b60dec1965763e6388dbcd9b98d
parent55d58ea878c32215ba11aeb30a2993f2768353f3 (diff)
[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
-rw-r--r--sql/updates/147_world.sql2
-rw-r--r--sql/updates/231_world_scripts.sql3
-rw-r--r--sql/world_scripts_full.sql3
-rw-r--r--src/bindings/scripts/Makefile.am3
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp4
-rw-r--r--src/bindings/scripts/VC71/71ScriptDev2.vcproj12
-rw-r--r--src/bindings/scripts/VC80/80ScriptDev2.vcproj12
-rw-r--r--src/bindings/scripts/VC90/90ScriptDev2.vcproj12
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp10
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp8
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp6
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp1
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp8
-rw-r--r--src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp10
-rw-r--r--src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp69
-rw-r--r--src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp141
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp94
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp216
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp235
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp306
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h6
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp90
-rw-r--r--src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp55
24 files changed, 936 insertions, 374 deletions
diff --git a/sql/updates/147_world.sql b/sql/updates/147_world.sql
index 088a06567a7..8062d1812cf 100644
--- a/sql/updates/147_world.sql
+++ b/sql/updates/147_world.sql
@@ -9,6 +9,6 @@ DELETE FROM spell_target_position WHERE `id` IN (46019, 46020);
INSERT INTO spell_target_position () VALUES (46019, 580, 1704.34, 928.17, -74.558, 0);
INSERT INTO spell_target_position () VALUES (46020, 580, 1704.34, 928.17, 53.079, 0);
---Magtheridon Earthquake
+-- Magtheridon Earthquake
DELETE FROM spell_script_target WHERE `entry` IN (30657);
INSERT INTO spell_script_target VALUES ('30657', '1', '24136'); \ No newline at end of file
diff --git a/sql/updates/231_world_scripts.sql b/sql/updates/231_world_scripts.sql
new file mode 100644
index 00000000000..b1aa56296bf
--- /dev/null
+++ b/sql/updates/231_world_scripts.sql
@@ -0,0 +1,3 @@
+UPDATE `creature_template` SET `ScriptName`='boss_pathaleon_the_calculator' WHERE `entry`=19220;
+UPDATE `creature_template` SET `ScriptName`='mob_nether_wraith' WHERE `entry`=21062;
+UPDATE `instance_template` SET `script`='instance_mechanar' WHERE `map`=554; \ No newline at end of file
diff --git a/sql/world_scripts_full.sql b/sql/world_scripts_full.sql
index 980a5578b7f..179669611fe 100644
--- a/sql/world_scripts_full.sql
+++ b/sql/world_scripts_full.sql
@@ -721,6 +721,9 @@ UPDATE `creature_template` SET `ScriptName`='npc_stone_watcher_of_norgannon' WHE
UPDATE `creature_template` SET `ScriptName`='boss_gatewatcher_iron_hand' WHERE `entry`=19710;
UPDATE `creature_template` SET `ScriptName`='boss_nethermancer_sepethrea' WHERE `entry`=19221;
UPDATE `creature_template` SET `ScriptName`='mob_ragin_flames' WHERE `entry`=20481;
+UPDATE `creature_template` SET `ScriptName`='boss_pathaleon_the_calculator' WHERE `entry`=19220;
+UPDATE `creature_template` SET `ScriptName`='mob_nether_wraith' WHERE `entry`=21062;
+UPDATE `instance_template` SET `script`='instance_mechanar' WHERE `map`=554;
/* THE BOTANICA */
UPDATE `creature_template` SET `ScriptName`='boss_high_botanist_freywinn' WHERE `entry`=17975;
diff --git a/src/bindings/scripts/Makefile.am b/src/bindings/scripts/Makefile.am
index c09eed02d66..19b28005497 100644
--- a/src/bindings/scripts/Makefile.am
+++ b/src/bindings/scripts/Makefile.am
@@ -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 \
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index 3b553af3ee6..840cdc4be60 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -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();
diff --git a/src/bindings/scripts/VC71/71ScriptDev2.vcproj b/src/bindings/scripts/VC71/71ScriptDev2.vcproj
index 8608945014e..f0f7131b1f6 100644
--- a/src/bindings/scripts/VC71/71ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC71/71ScriptDev2.vcproj
@@ -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
diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
index dfd8dd44e7b..fdb376e833f 100644
--- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
@@ -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
diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
index 80e5cb2481f..b4f467d0470 100644
--- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
@@ -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
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp
index 039e888fac9..a886a0d4902 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp
@@ -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();
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp
index 3caf80680b8..f51a28d61b3 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp
@@ -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();
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp
index e5b31c75456..85c6657bebb 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp
@@ -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
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp
index 38be763ee90..b6da72e84dc 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp
@@ -22,6 +22,7 @@ SDCategory: Coilfang Resevoir, Underbog
EndScriptData */
#include "../../../creature/simple_ai.h"
+#include "precompiled.h"
/*
--== Ghaz'an ==--
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
index 3f49a53cb73..bc5799ffe7e 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
@@ -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
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp
index c1e6057104e..ec85747032d 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp
@@ -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)
diff --git a/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp b/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp
index 3352713462a..7774f65411d 100644
--- a/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp
+++ b/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp
@@ -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;
}
diff --git a/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp b/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp
index e25f274c66a..dfae0432d12 100644
--- a/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp
+++ b/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp
@@ -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;
diff --git a/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp b/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp
index c425964dea5..89536b15ac2 100644
--- a/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp
+++ b/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp
@@ -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)
{
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp
index 046c4fe86f3..5f7c87adff4 100644
--- a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp
@@ -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;
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp
index 235bd733a9b..90ec4076d21 100644
--- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp
@@ -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
-
-#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
-
-
+// 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
+// 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;
}
- }
+ }
- void JustDied(Unit* Killer)
- {
- DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL);
- DoPlaySoundToSet(m_creature, SOUND_DEATH_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)
- {
- if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
- return;
+ void UpdateAI(const uint32 diff)
+ {
+ //Return since we have no target
+ 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;
- }
-
- Jackhammer_Timer = 45000;
- }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;
+ 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;
+ }
+ //Cast again on time
+ Jackhammer_Timer = 30000;
+ }else Jackhammer_Timer -= diff;
+
+ //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;
}
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp
index ea8defffba3..866f641922c 100644
--- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp
@@ -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 KilledUnit(Unit* victim)
+ }
+
+ void Aggro(Unit *who)
+ {
+ for(int i = 0; i < 1;i++) //Summon two Guards
+ {
+ DoCast(m_creature->getVictim(),SPELL_SUMMON_RAGIN_FLAMES);
+ }
+ }
+
+ // 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;
-
- //Frost Attack
- if(frost_attack_Timer < diff)
- {
+
+ //Return since we have no target
+ if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
+ return;
+
+ //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);
- inferno_Timer = 10000;
+ DoCast(m_creature->getVictim(),SPELL_INFERNO);
- Unit* target = NULL;
- target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ m_creature->TauntApply(m_creature->getVictim());
- m_creature->GetMotionMaster()->MoveChase(target);
+ inferno_Timer = 10000;
}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;
}
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp
new file mode 100644
index 00000000000..06c57082357
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp
@@ -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;
+}
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h
new file mode 100644
index 00000000000..2f657d85453
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h
@@ -0,0 +1,6 @@
+#ifndef DEF_MECHANAR_H
+#define DEF_MECHANAR_H
+
+#define DATA_SEPETHREA_DEATH 1
+#define DATA_SEPETHREAISDEAD 2
+#endif
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp
new file mode 100644
index 00000000000..c58ab523b90
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp
@@ -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;
+}
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp
index f57f1f3509c..3315e49732c 100644
--- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp
+++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp
@@ -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;