* 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
@@ -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))
{ {
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 (Polymorph_Timer < diff)
{ {
Unit* target = NULL; if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1))
DoCast(target,SPELL_POLYMORPH);
target = SelectUnit(SELECT_TARGET_RANDOM,0); Polymorph_Timer = 20000;
if (target)DoCast(target,SPELL_POLYMORPH);
Polymorph_Timer = 40000;
}else Polymorph_Timer -= diff; }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;
}
//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;
Map::PlayerList const &PlayerList = map->GetPlayers();
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
{
if (Player* i_pl = i->getSource())
{
//Play random sound to the zone //Play random sound to the zone
i_pl->SendPlaySound(RANDOM_SOUND_WHISPER, true); Map::PlayerList const &PlayerList = map->GetPlayers();
if (!PlayerList.isEmpty())
{
for(Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr)
{
if (Player* pPlr = itr->getSource())
pPlr->PlayDirectSound(RANDOM_SOUND_WHISPER,pPlr);
} }
} }