* Merged ScriptDev2 935
--HG-- branch : trunk
This commit is contained in:
@@ -23,44 +23,35 @@ EndScriptData */
|
|||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
#define SAY_AGGRO -1189019
|
enum
|
||||||
#define SAY_SPECIALAE -1189020
|
{
|
||||||
|
SAY_AGGRO = -1189019,
|
||||||
|
SAY_SPECIALAE = -1189020,
|
||||||
|
|
||||||
#define SPELL_POLYMORPH 12826
|
SPELL_POLYMORPH = 13323,
|
||||||
#define SPELL_AOESILENCE 8988
|
SPELL_AOESILENCE = 8988,
|
||||||
#define SPELL_ARCANEEXPLOSION3 8438
|
SPELL_ARCANEEXPLOSION = 9433,
|
||||||
#define SPELL_ARCANEEXPLOSION4 8439
|
SPELL_FIREAOE = 9435,
|
||||||
#define SPELL_FIREAOE 9435
|
SPELL_ARCANEBUBBLE = 9438,
|
||||||
#define SPELL_BLINK 1953
|
};
|
||||||
#define SPELL_FIREBALL 21162
|
|
||||||
#define SPELL_MANASHIELD4 10191
|
|
||||||
#define SPELL_ARCANEBUBBLE 9438
|
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_arcanist_doanAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_arcanist_doanAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_arcanist_doanAI(Creature *c) : ScriptedAI(c) {Reset();}
|
boss_arcanist_doanAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
uint32 FullAOE_Timer;
|
|
||||||
uint32 Polymorph_Timer;
|
uint32 Polymorph_Timer;
|
||||||
uint32 ArcaneBubble_Timer;
|
|
||||||
uint32 AoESilence_Timer;
|
uint32 AoESilence_Timer;
|
||||||
uint32 ArcaneExplosion3_Timer;
|
uint32 ArcaneExplosion_Timer;
|
||||||
uint32 ArcaneExplosion4_Timer;
|
bool bCanDetonate;
|
||||||
uint32 Blink_Timer;
|
bool bShielded;
|
||||||
uint32 Fireball_Timer;
|
|
||||||
uint32 ManaShield4_Timer;
|
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
FullAOE_Timer = 5000;
|
Polymorph_Timer = 20000;
|
||||||
Polymorph_Timer = 1;
|
AoESilence_Timer = 15000;
|
||||||
ArcaneBubble_Timer = 3000;
|
ArcaneExplosion_Timer = 3000;
|
||||||
AoESilence_Timer = 20000;
|
bCanDetonate = false;
|
||||||
ArcaneExplosion3_Timer = 10000;
|
bShielded = false;
|
||||||
ArcaneExplosion4_Timer = 10000;
|
|
||||||
Blink_Timer = 40000;
|
|
||||||
Fireball_Timer = 6000;
|
|
||||||
ManaShield4_Timer = 70000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
@@ -73,73 +64,50 @@ struct TRINITY_DLL_DECL boss_arcanist_doanAI : public ScriptedAI
|
|||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//If we are <50% hp cast Arcane Bubble and start casting SPECIAL FIRE AOE
|
if (bShielded && bCanDetonate)
|
||||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50 && !m_creature->IsNonMeleeSpellCasted(false))
|
|
||||||
{
|
{
|
||||||
if (Polymorph_Timer < diff)
|
DoCast(m_creature,SPELL_FIREAOE);
|
||||||
{
|
bCanDetonate = false;
|
||||||
Unit* target = NULL;
|
|
||||||
|
|
||||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
|
||||||
if (target)DoCast(target,SPELL_POLYMORPH);
|
|
||||||
Polymorph_Timer = 40000;
|
|
||||||
}else Polymorph_Timer -= diff;
|
|
||||||
|
|
||||||
if (ArcaneBubble_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature,SPELL_ARCANEBUBBLE);
|
|
||||||
ArcaneBubble_Timer = 40000;
|
|
||||||
}else ArcaneBubble_Timer -= diff;
|
|
||||||
|
|
||||||
if (FullAOE_Timer < diff)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_SPECIALAE, m_creature);
|
|
||||||
DoCast(m_creature->getVictim(),SPELL_FIREAOE);
|
|
||||||
FullAOE_Timer = 40000;
|
|
||||||
}else FullAOE_Timer -= diff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_creature->HasAura(SPELL_ARCANEBUBBLE))
|
||||||
|
return;
|
||||||
|
|
||||||
|
//If we are <50% hp cast Arcane Bubble
|
||||||
|
if (!bShielded && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50)
|
||||||
|
{
|
||||||
|
//wait if we already casting
|
||||||
|
if (m_creature->IsNonMeleeSpellCasted(false))
|
||||||
|
return;
|
||||||
|
|
||||||
|
DoScriptText(SAY_SPECIALAE, m_creature);
|
||||||
|
DoCast(m_creature,SPELL_ARCANEBUBBLE);
|
||||||
|
|
||||||
|
bCanDetonate = true;
|
||||||
|
bShielded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Polymorph_Timer < diff)
|
||||||
|
{
|
||||||
|
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
|
||||||
|
DoCast(target,SPELL_POLYMORPH);
|
||||||
|
|
||||||
|
Polymorph_Timer = 20000;
|
||||||
|
}else Polymorph_Timer -= diff;
|
||||||
|
|
||||||
//AoESilence_Timer
|
//AoESilence_Timer
|
||||||
if (AoESilence_Timer < diff)
|
if (AoESilence_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_AOESILENCE);
|
DoCast(m_creature->getVictim(),SPELL_AOESILENCE);
|
||||||
AoESilence_Timer = 30000;
|
AoESilence_Timer = 15000 + rand()%5000;
|
||||||
}else AoESilence_Timer -= diff;
|
}else AoESilence_Timer -= diff;
|
||||||
|
|
||||||
//ArcaneExplosion3_Timer
|
//ArcaneExplosion_Timer
|
||||||
if (ArcaneExplosion3_Timer < diff)
|
if (ArcaneExplosion_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_ARCANEEXPLOSION3);
|
DoCast(m_creature->getVictim(),SPELL_ARCANEEXPLOSION);
|
||||||
ArcaneExplosion3_Timer = 8000;
|
ArcaneExplosion_Timer = 8000;
|
||||||
}else ArcaneExplosion3_Timer -= diff;
|
}else ArcaneExplosion_Timer -= diff;
|
||||||
|
|
||||||
//ArcaneExplosion4_Timer
|
|
||||||
if (ArcaneExplosion4_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(),SPELL_ARCANEEXPLOSION4);
|
|
||||||
ArcaneExplosion4_Timer = 10000;
|
|
||||||
}else ArcaneExplosion4_Timer -= diff;
|
|
||||||
|
|
||||||
//Blink_Timer
|
|
||||||
if (Blink_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature,SPELL_BLINK);
|
|
||||||
Blink_Timer = 30000;
|
|
||||||
}else Blink_Timer -= diff;
|
|
||||||
|
|
||||||
//Fireball_Timer
|
|
||||||
if (Fireball_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(),SPELL_FIREBALL);
|
|
||||||
Fireball_Timer = 12000;
|
|
||||||
}else Fireball_Timer -= diff;
|
|
||||||
|
|
||||||
//ManaShiled4_Timer
|
|
||||||
if (ManaShield4_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature,SPELL_MANASHIELD4);
|
|
||||||
ManaShield4_Timer = 70000;
|
|
||||||
}else ManaShield4_Timer -= diff;
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,34 +23,35 @@ EndScriptData */
|
|||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
#define SAY_AGGRO -1189016
|
enum
|
||||||
#define SAY_HEALTH -1189017
|
{
|
||||||
#define SAY_KILL -1189018
|
SAY_AGGRO = -1189016,
|
||||||
|
SAY_HEALTH = -1189017,
|
||||||
|
SAY_KILL = -1189018,
|
||||||
|
|
||||||
#define SPELL_FROSTNOVA2 865
|
SPELL_FLAMESHOCK = 8053,
|
||||||
#define SPELL_FLAMESHOCK3 8053
|
SPELL_SHADOWBOLT = 1106,
|
||||||
#define SPELL_SHADOWBOLT5 1106
|
SPELL_FLAMESPIKE = 8814,
|
||||||
#define SPELL_FLAMESPIKE 8814
|
SPELL_FIRENOVA = 16079,
|
||||||
#define SPELL_FIRENOVA 16079
|
};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_bloodmage_thalnosAI(Creature *c) : ScriptedAI(c) {Reset();}
|
boss_bloodmage_thalnosAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
bool HpYell;
|
bool HpYell;
|
||||||
uint32 FrostNova2_Timer;
|
uint32 FlameShock_Timer;
|
||||||
uint32 FlameShock3_Timer;
|
uint32 ShadowBolt_Timer;
|
||||||
uint32 ShadowBolt5_Timer;
|
|
||||||
uint32 FlameSpike_Timer;
|
uint32 FlameSpike_Timer;
|
||||||
uint32 FireNova_Timer;
|
uint32 FireNova_Timer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
FrostNova2_Timer = 10000;
|
HpYell = false;
|
||||||
FlameShock3_Timer = 15000;
|
FlameShock_Timer = 10000;
|
||||||
ShadowBolt5_Timer = 20000;
|
ShadowBolt_Timer = 2000;
|
||||||
FlameSpike_Timer = 20000;
|
FlameSpike_Timer = 8000;
|
||||||
FireNova_Timer = 10000;
|
FireNova_Timer = 40000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
@@ -75,26 +76,12 @@ struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
|
|||||||
HpYell = true;
|
HpYell = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FrostNova2_Timer
|
//FlameShock_Timer
|
||||||
if (FrostNova2_Timer < diff)
|
if (FlameShock_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_FROSTNOVA2);
|
DoCast(m_creature->getVictim(),SPELL_FLAMESHOCK);
|
||||||
FrostNova2_Timer = 10000;
|
FlameShock_Timer = 10000 + rand()%5000;
|
||||||
}else FrostNova2_Timer -= diff;
|
}else FlameShock_Timer -= diff;
|
||||||
|
|
||||||
//FlameShock3_Timer
|
|
||||||
if (FlameShock3_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(),SPELL_FLAMESHOCK3);
|
|
||||||
FlameShock3_Timer = 15000;
|
|
||||||
}else FlameShock3_Timer -= diff;
|
|
||||||
|
|
||||||
//ShadowBolt5_Timer
|
|
||||||
if (ShadowBolt5_Timer < diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(),SPELL_SHADOWBOLT5);
|
|
||||||
ShadowBolt5_Timer = 20000;
|
|
||||||
}else ShadowBolt5_Timer -= diff;
|
|
||||||
|
|
||||||
//FlameSpike_Timer
|
//FlameSpike_Timer
|
||||||
if (FlameSpike_Timer < diff)
|
if (FlameSpike_Timer < diff)
|
||||||
@@ -107,9 +94,16 @@ struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
|
|||||||
if (FireNova_Timer < diff)
|
if (FireNova_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_FIRENOVA);
|
DoCast(m_creature->getVictim(),SPELL_FIRENOVA);
|
||||||
FireNova_Timer = 20000;
|
FireNova_Timer = 40000;
|
||||||
}else FireNova_Timer -= diff;
|
}else FireNova_Timer -= diff;
|
||||||
|
|
||||||
|
//ShadowBolt_Timer
|
||||||
|
if (ShadowBolt_Timer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(),SPELL_SHADOWBOLT);
|
||||||
|
ShadowBolt_Timer = 2000;
|
||||||
|
}else ShadowBolt_Timer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,13 +24,16 @@ EndScriptData */
|
|||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
#include "def_scarlet_monastery.h"
|
#include "def_scarlet_monastery.h"
|
||||||
|
|
||||||
#define SAY_AGGRO -1189011
|
enum
|
||||||
#define SAY_HEALTH1 -1189012
|
{
|
||||||
#define SAY_HEALTH2 -1189013
|
SAY_AGGRO = -1189011,
|
||||||
#define SAY_KILL -1189014
|
SAY_HEALTH1 = -1189012,
|
||||||
#define SAY_TRIGGER_VORREL -1189015
|
SAY_HEALTH2 = -1189013,
|
||||||
|
SAY_KILL = -1189014,
|
||||||
|
SAY_TRIGGER_VORREL = -1189015,
|
||||||
|
|
||||||
#define SPELL_POWERWORDSHIELD 2767
|
SPELL_SHADOWWORDPAIN = 2767,
|
||||||
|
};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_interrogator_vishasAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_interrogator_vishasAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
@@ -44,11 +47,11 @@ struct TRINITY_DLL_DECL boss_interrogator_vishasAI : public ScriptedAI
|
|||||||
|
|
||||||
bool Yell30;
|
bool Yell30;
|
||||||
bool Yell60;
|
bool Yell60;
|
||||||
uint32 PowerWordShield_Timer;
|
uint32 ShadowWordPain_Timer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
PowerWordShield_Timer = 60000;
|
ShadowWordPain_Timer = 5000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
@@ -89,12 +92,12 @@ struct TRINITY_DLL_DECL boss_interrogator_vishasAI : public ScriptedAI
|
|||||||
Yell30 = true;
|
Yell30 = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//PowerWordShield_Timer
|
//ShadowWordPain_Timer
|
||||||
if (PowerWordShield_Timer < diff)
|
if (ShadowWordPain_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature,SPELL_POWERWORDSHIELD);
|
DoCast(m_creature->getVictim(),SPELL_SHADOWWORDPAIN);
|
||||||
PowerWordShield_Timer = 60000;
|
ShadowWordPain_Timer = 5000 + rand()%10000;;
|
||||||
}else PowerWordShield_Timer -= diff;
|
}else ShadowWordPain_Timer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -570,13 +570,15 @@ struct TRINITY_DLL_DECL cthunAI : public Scripted_NoMovementAI
|
|||||||
Map *map = m_creature->GetMap();
|
Map *map = m_creature->GetMap();
|
||||||
if(!map->IsDungeon()) return;
|
if(!map->IsDungeon()) return;
|
||||||
|
|
||||||
|
//Play random sound to the zone
|
||||||
Map::PlayerList const &PlayerList = map->GetPlayers();
|
Map::PlayerList const &PlayerList = map->GetPlayers();
|
||||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
|
||||||
|
if (!PlayerList.isEmpty())
|
||||||
{
|
{
|
||||||
if (Player* i_pl = i->getSource())
|
for(Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
|
||||||
{
|
{
|
||||||
//Play random sound to the zone
|
if (Player* pPlr = itr->getSource())
|
||||||
i_pl->SendPlaySound(RANDOM_SOUND_WHISPER, true);
|
pPlr->PlayDirectSound(RANDOM_SOUND_WHISPER,pPlr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user