* Merged ScriptDev2 935

--HG--
branch : trunk
This commit is contained in:
Muhaha
2009-03-25 10:11:14 +01:00
parent 4154efa536
commit ea0fa1040b
4 changed files with 104 additions and 137 deletions

View File

@@ -23,44 +23,35 @@ EndScriptData */
#include "precompiled.h"
#define SAY_AGGRO -1189019
#define SAY_SPECIALAE -1189020
enum
{
SAY_AGGRO = -1189019,
SAY_SPECIALAE = -1189020,
#define SPELL_POLYMORPH 12826
#define SPELL_AOESILENCE 8988
#define SPELL_ARCANEEXPLOSION3 8438
#define SPELL_ARCANEEXPLOSION4 8439
#define SPELL_FIREAOE 9435
#define SPELL_BLINK 1953
#define SPELL_FIREBALL 21162
#define SPELL_MANASHIELD4 10191
#define SPELL_ARCANEBUBBLE 9438
SPELL_POLYMORPH = 13323,
SPELL_AOESILENCE = 8988,
SPELL_ARCANEEXPLOSION = 9433,
SPELL_FIREAOE = 9435,
SPELL_ARCANEBUBBLE = 9438,
};
struct TRINITY_DLL_DECL boss_arcanist_doanAI : public ScriptedAI
{
boss_arcanist_doanAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 FullAOE_Timer;
uint32 Polymorph_Timer;
uint32 ArcaneBubble_Timer;
uint32 AoESilence_Timer;
uint32 ArcaneExplosion3_Timer;
uint32 ArcaneExplosion4_Timer;
uint32 Blink_Timer;
uint32 Fireball_Timer;
uint32 ManaShield4_Timer;
uint32 ArcaneExplosion_Timer;
bool bCanDetonate;
bool bShielded;
void Reset()
{
FullAOE_Timer = 5000;
Polymorph_Timer = 1;
ArcaneBubble_Timer = 3000;
AoESilence_Timer = 20000;
ArcaneExplosion3_Timer = 10000;
ArcaneExplosion4_Timer = 10000;
Blink_Timer = 40000;
Fireball_Timer = 6000;
ManaShield4_Timer = 70000;
Polymorph_Timer = 20000;
AoESilence_Timer = 15000;
ArcaneExplosion_Timer = 3000;
bCanDetonate = false;
bShielded = false;
}
void Aggro(Unit *who)
@@ -73,73 +64,50 @@ struct TRINITY_DLL_DECL boss_arcanist_doanAI : public ScriptedAI
if (!UpdateVictim())
return;
//If we are <50% hp cast Arcane Bubble and start casting SPECIAL FIRE AOE
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50 && !m_creature->IsNonMeleeSpellCasted(false))
if (bShielded && bCanDetonate)
{
if (Polymorph_Timer < diff)
{
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;
DoCast(m_creature,SPELL_FIREAOE);
bCanDetonate = false;
}
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
if (AoESilence_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_AOESILENCE);
AoESilence_Timer = 30000;
AoESilence_Timer = 15000 + rand()%5000;
}else AoESilence_Timer -= diff;
//ArcaneExplosion3_Timer
if (ArcaneExplosion3_Timer < diff)
//ArcaneExplosion_Timer
if (ArcaneExplosion_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_ARCANEEXPLOSION3);
ArcaneExplosion3_Timer = 8000;
}else ArcaneExplosion3_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;
DoCast(m_creature->getVictim(),SPELL_ARCANEEXPLOSION);
ArcaneExplosion_Timer = 8000;
}else ArcaneExplosion_Timer -= diff;
DoMeleeAttackIfReady();
}

View File

@@ -23,34 +23,35 @@ EndScriptData */
#include "precompiled.h"
#define SAY_AGGRO -1189016
#define SAY_HEALTH -1189017
#define SAY_KILL -1189018
enum
{
SAY_AGGRO = -1189016,
SAY_HEALTH = -1189017,
SAY_KILL = -1189018,
#define SPELL_FROSTNOVA2 865
#define SPELL_FLAMESHOCK3 8053
#define SPELL_SHADOWBOLT5 1106
#define SPELL_FLAMESPIKE 8814
#define SPELL_FIRENOVA 16079
SPELL_FLAMESHOCK = 8053,
SPELL_SHADOWBOLT = 1106,
SPELL_FLAMESPIKE = 8814,
SPELL_FIRENOVA = 16079,
};
struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
{
boss_bloodmage_thalnosAI(Creature *c) : ScriptedAI(c) {Reset();}
bool HpYell;
uint32 FrostNova2_Timer;
uint32 FlameShock3_Timer;
uint32 ShadowBolt5_Timer;
uint32 FlameShock_Timer;
uint32 ShadowBolt_Timer;
uint32 FlameSpike_Timer;
uint32 FireNova_Timer;
void Reset()
{
FrostNova2_Timer = 10000;
FlameShock3_Timer = 15000;
ShadowBolt5_Timer = 20000;
FlameSpike_Timer = 20000;
FireNova_Timer = 10000;
HpYell = false;
FlameShock_Timer = 10000;
ShadowBolt_Timer = 2000;
FlameSpike_Timer = 8000;
FireNova_Timer = 40000;
}
void Aggro(Unit *who)
@@ -75,26 +76,12 @@ struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
HpYell = true;
}
//FrostNova2_Timer
if (FrostNova2_Timer < diff)
//FlameShock_Timer
if (FlameShock_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_FROSTNOVA2);
FrostNova2_Timer = 10000;
}else FrostNova2_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;
DoCast(m_creature->getVictim(),SPELL_FLAMESHOCK);
FlameShock_Timer = 10000 + rand()%5000;
}else FlameShock_Timer -= diff;
//FlameSpike_Timer
if (FlameSpike_Timer < diff)
@@ -107,9 +94,16 @@ struct TRINITY_DLL_DECL boss_bloodmage_thalnosAI : public ScriptedAI
if (FireNova_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_FIRENOVA);
FireNova_Timer = 20000;
FireNova_Timer = 40000;
}else FireNova_Timer -= diff;
//ShadowBolt_Timer
if (ShadowBolt_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SHADOWBOLT);
ShadowBolt_Timer = 2000;
}else ShadowBolt_Timer -= diff;
DoMeleeAttackIfReady();
}
};

View File

@@ -24,13 +24,16 @@ EndScriptData */
#include "precompiled.h"
#include "def_scarlet_monastery.h"
#define SAY_AGGRO -1189011
#define SAY_HEALTH1 -1189012
#define SAY_HEALTH2 -1189013
#define SAY_KILL -1189014
#define SAY_TRIGGER_VORREL -1189015
enum
{
SAY_AGGRO = -1189011,
SAY_HEALTH1 = -1189012,
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
{
@@ -44,11 +47,11 @@ struct TRINITY_DLL_DECL boss_interrogator_vishasAI : public ScriptedAI
bool Yell30;
bool Yell60;
uint32 PowerWordShield_Timer;
uint32 ShadowWordPain_Timer;
void Reset()
{
PowerWordShield_Timer = 60000;
ShadowWordPain_Timer = 5000;
}
void Aggro(Unit *who)
@@ -89,12 +92,12 @@ struct TRINITY_DLL_DECL boss_interrogator_vishasAI : public ScriptedAI
Yell30 = true;
}
//PowerWordShield_Timer
if (PowerWordShield_Timer < diff)
//ShadowWordPain_Timer
if (ShadowWordPain_Timer < diff)
{
DoCast(m_creature,SPELL_POWERWORDSHIELD);
PowerWordShield_Timer = 60000;
}else PowerWordShield_Timer -= diff;
DoCast(m_creature->getVictim(),SPELL_SHADOWWORDPAIN);
ShadowWordPain_Timer = 5000 + rand()%10000;;
}else ShadowWordPain_Timer -= diff;
DoMeleeAttackIfReady();
}

View File

@@ -570,13 +570,15 @@ struct TRINITY_DLL_DECL cthunAI : public Scripted_NoMovementAI
Map *map = m_creature->GetMap();
if(!map->IsDungeon()) return;
//Play random sound to the zone
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
i_pl->SendPlaySound(RANDOM_SOUND_WHISPER, true);
if (Player* pPlr = itr->getSource())
pPlr->PlayDirectSound(RANDOM_SOUND_WHISPER,pPlr);
}
}