mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
* Merged ScriptDev2 935
--HG-- branch : trunk
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user