[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:
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
+5
-5
@@ -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();
|
||||
|
||||
+4
-4
@@ -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();
|
||||
|
||||
+3
-3
@@ -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 ==--
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+111
-97
@@ -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;
|
||||
}
|
||||
|
||||
+147
-84
@@ -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;
|
||||
}
|
||||
|
||||
+306
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user