mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-24 10:56:38 +01:00
Merge [SD2]
r1192 Adding and correct spell used for hard enrage after 15 minutes, and also correct initial ability if any of dragons are alive at initial aggro. Added placeholder for soft enrage at 10%HP left.
r1193 Fixed typo in EnterEvadeIfOutOfCombatArea()
r1194 Implement basic parts of tomb of seven event in BRD. - skip (already scripted)
r1195 Some cleanup to parts of the seven event script.
r1196 Reset event for triage-quests in better way and also clear lists.
r1197 Clean up and add long time incomplete script for first boss in SWP. - skip
r1198 Correct typo in filename in previous commit, sorry :) - skip
r1199 Added script for areatrigger 4853, to be used to start pre-event, second boss in SWP. - skip
r2000 Check alive-state before hatching all eggs. Patch by kolomati2
Correct typo in variable. - skip
r2001 Correct one spellId and remove non-existing. By Tassader. - skip
r2002 Added support for quest 12739(and 12742 to 12750). Patch by ckegg - skip (already scripted)
r2003 Corrected copyright notices in misc makefile.am - skip
r2004 Added: Missing heroic spells for Vexallus. Heroic version is complete now.
Added: Missing heroic spells for Murmur. Heroic version is also complete.
Fixed: As always some timers.
--HG--
branch : trunk
This commit is contained in:
@@ -611,7 +611,7 @@ bool ScriptedAI::EnterEvadeIfOutOfCombatArea(const uint32 uiDiff)
|
||||
return false;
|
||||
break;
|
||||
case 28860: // sartharion (calculate box)
|
||||
if (fX > 3218.86f && fX < 3275.69f && fY > 572.40f && fY < 484.68f)
|
||||
if (fX > 3218.86f && fX < 3275.69f && fY < 572.40f && fY > 484.68f)
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -503,7 +503,12 @@ struct TRINITY_DLL_DECL npc_doctorAI : public ScriptedAI
|
||||
PatientDiedCount = 0;
|
||||
PatientSavedCount = 0;
|
||||
|
||||
Patients.clear();
|
||||
Coordinates.clear();
|
||||
|
||||
Event = false;
|
||||
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
|
||||
void BeginEvent(Player* player);
|
||||
@@ -606,7 +611,6 @@ struct TRINITY_DLL_DECL npc_injured_patientAI : public ScriptedAI
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -672,7 +676,8 @@ void npc_doctorAI::PatientDied(Location* Point)
|
||||
Player* player = Unit::GetPlayer(Playerguid);
|
||||
if(player && ((player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)))
|
||||
{
|
||||
PatientDiedCount++;
|
||||
++PatientDiedCount;
|
||||
|
||||
if (PatientDiedCount > 5 && Event)
|
||||
{
|
||||
if(player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE)
|
||||
@@ -680,13 +685,15 @@ void npc_doctorAI::PatientDied(Location* Point)
|
||||
else if(player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)
|
||||
player->FailQuest(6622);
|
||||
|
||||
Event = false;
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Reset();
|
||||
return;
|
||||
}
|
||||
|
||||
Coordinates.push_back(Point);
|
||||
}
|
||||
else
|
||||
// If no player or player abandon quest in progress
|
||||
Reset();
|
||||
}
|
||||
|
||||
void npc_doctorAI::PatientSaved(Creature* soldier, Player* player, Location* Point)
|
||||
@@ -695,7 +702,8 @@ void npc_doctorAI::PatientSaved(Creature* soldier, Player* player, Location* Poi
|
||||
{
|
||||
if ((player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE))
|
||||
{
|
||||
PatientSavedCount++;
|
||||
++PatientSavedCount;
|
||||
|
||||
if (PatientSavedCount == 15)
|
||||
{
|
||||
if (!Patients.empty())
|
||||
@@ -713,9 +721,8 @@ void npc_doctorAI::PatientSaved(Creature* soldier, Player* player, Location* Poi
|
||||
else if (player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)
|
||||
player->AreaExploredOrEventHappens(6622);
|
||||
|
||||
Event = false;
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Reset();
|
||||
return;
|
||||
}
|
||||
|
||||
Coordinates.push_back(Point);
|
||||
@@ -727,9 +734,8 @@ void npc_doctorAI::UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (Event && SummonPatientCount >= 20)
|
||||
{
|
||||
Event = false;
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Reset();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Event)
|
||||
|
||||
@@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_pandemoniusAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
VoidBlast_Timer = 30000;
|
||||
VoidBlast_Timer = 8000+rand()%15000;
|
||||
DarkShell_Timer = 20000;
|
||||
VoidBlast_Counter = 0;
|
||||
}
|
||||
@@ -99,7 +99,7 @@ struct TRINITY_DLL_DECL boss_pandemoniusAI : public ScriptedAI
|
||||
|
||||
if( VoidBlast_Counter == 5 )
|
||||
{
|
||||
VoidBlast_Timer = 25000+rand()%10000;
|
||||
VoidBlast_Timer = 15000+rand()%10000;
|
||||
VoidBlast_Counter = 0;
|
||||
}
|
||||
}else VoidBlast_Timer -= diff;
|
||||
|
||||
@@ -40,7 +40,7 @@ EndScriptData */
|
||||
#define SPELL_BANISH 30231
|
||||
#define SPELL_CORROSIVE_ACID 33551
|
||||
#define SPELL_FEAR 33547
|
||||
#define SPELL_ENRAGE 0 //need to find proper spell
|
||||
#define SPELL_ENRAGE 34970
|
||||
|
||||
struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
|
||||
{
|
||||
@@ -59,15 +59,17 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
|
||||
uint32 Enrage_Timer;
|
||||
bool Intro;
|
||||
bool IsBanished;
|
||||
bool Enraged;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
EventCheck_Timer = 5000;
|
||||
CorrosiveAcid_Timer = 25000;
|
||||
Fear_Timer = 40000;
|
||||
CorrosiveAcid_Timer = 5000 + rand()%5000;
|
||||
Fear_Timer = 25000 + rand()%5000;
|
||||
Enrage_Timer = 180000;
|
||||
Intro = false;
|
||||
IsBanished = false;
|
||||
Enraged = false;
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
@@ -183,13 +185,14 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
|
||||
Fear_Timer = 20000 + rand()%15000;
|
||||
}else Fear_Timer -= diff;
|
||||
|
||||
/*if (HeroicMode)
|
||||
if (HeroicMode)
|
||||
{
|
||||
if (Enrage_Timer < diff)
|
||||
if (!Enraged && Enrage_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_ENRAGE);
|
||||
Enraged = true;
|
||||
}else Enrage_Timer -= diff;
|
||||
}*/
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ SDCategory: Auchindoun, Shadow Labyrinth
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_shadow_labyrinth.h"
|
||||
|
||||
#define EMOTE_SONIC_BOOM -1555036
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Tomb_Of_Seven
|
||||
SD%Complete: 50
|
||||
SD%Complete: 90
|
||||
SDComment: Learning Smelt Dark Iron if tribute quest rewarded. Missing event.
|
||||
SDCategory: Blackrock Depths
|
||||
EndScriptData */
|
||||
@@ -26,14 +26,17 @@ EndScriptData */
|
||||
|
||||
enum
|
||||
{
|
||||
SPELL_SUNDERARMOR = 24317,
|
||||
SPELL_SUNDERARMOR = 11971,
|
||||
SPELL_SHIELDBLOCK = 12169,
|
||||
SPELL_STRIKE = 15580
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
|
||||
{
|
||||
boss_angerrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_angerrelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 SunderArmor_Timer;
|
||||
@@ -109,12 +112,15 @@ enum
|
||||
{
|
||||
SPELL_SINISTERSTRIKE = 15581,
|
||||
SPELL_BACKSTAB = 15582,
|
||||
SPELL_GOUGE = 13579
|
||||
SPELL_GOUGE = 12540
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
|
||||
{
|
||||
boss_doperelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_doperelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 SinisterStrike_Timer;
|
||||
@@ -188,14 +194,17 @@ CreatureAI* GetAI_boss_doperel(Creature *_Creature)
|
||||
|
||||
enum
|
||||
{
|
||||
SPELL_SHADOWBOLT = 17483, //Not sure if right ID
|
||||
SPELL_MANABURN = 10876,
|
||||
SPELL_SHADOWSHIELD = 22417
|
||||
SPELL_SHADOWBOLT = 15232,
|
||||
SPELL_MANABURN = 14033,
|
||||
SPELL_SHADOWSHIELD = 12040
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
|
||||
{
|
||||
boss_haterelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_haterelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 ShadowBolt_Timer;
|
||||
@@ -242,9 +251,8 @@ struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
|
||||
//ShadowBolt_Timer
|
||||
if (ShadowBolt_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target) DoCast(target,SPELL_SHADOWBOLT);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_SHADOWBOLT);
|
||||
ShadowBolt_Timer = 7000;
|
||||
}else ShadowBolt_Timer -= diff;
|
||||
|
||||
@@ -285,12 +293,15 @@ enum
|
||||
SPELL_MINDBLAST = 15587,
|
||||
SPELL_HEAL = 15586,
|
||||
SPELL_PRAYEROFHEALING = 15585,
|
||||
SPELL_SHIELD = 10901
|
||||
SPELL_SHIELD = 11974
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
|
||||
{
|
||||
boss_vilerelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_vilerelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 MindBlast_Timer;
|
||||
@@ -373,21 +384,24 @@ CreatureAI* GetAI_boss_vilerel(Creature *_Creature)
|
||||
|
||||
enum
|
||||
{
|
||||
SPELL_FROSTBOLT = 16799,
|
||||
SPELL_FROSTARMOR = 15784, //This is actually a buff he gives himself
|
||||
SPELL_BLIZZARD = 19099,
|
||||
SPELL_FROSTNOVA = 15063,
|
||||
SPELL_FROSTWARD = 15004
|
||||
SPELL_FROSTBOLT = 12675,
|
||||
SPELL_FROSTARMOR = 12544, //This is actually a buff he gives himself
|
||||
SPELL_CONEOFCOLD = 15244,
|
||||
SPELL_FROSTNOVA = 12674,
|
||||
SPELL_FROSTWARD = 15044
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
|
||||
{
|
||||
boss_seethrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_seethrelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 FrostArmor_Timer;
|
||||
uint32 Frostbolt_Timer;
|
||||
uint32 Blizzard_Timer;
|
||||
uint32 ConeofCold_Timer;
|
||||
uint32 FrostNova_Timer;
|
||||
uint32 FrostWard_Timer;
|
||||
|
||||
@@ -395,7 +409,7 @@ struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
|
||||
{
|
||||
FrostArmor_Timer = 2000;
|
||||
Frostbolt_Timer = 6000;
|
||||
Blizzard_Timer = 18000;
|
||||
ConeofCold_Timer = 18000;
|
||||
FrostNova_Timer = 12000;
|
||||
FrostWard_Timer = 25000;
|
||||
|
||||
@@ -444,14 +458,14 @@ struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
|
||||
Frostbolt_Timer = 15000;
|
||||
}else Frostbolt_Timer -= diff;
|
||||
|
||||
//Blizzard_Timer
|
||||
if (Blizzard_Timer < diff)
|
||||
//ConeofCold_Timer
|
||||
if (ConeofCold_Timer < diff)
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_BLIZZARD);
|
||||
DoCast(target,SPELL_CONEOFCOLD);
|
||||
|
||||
Blizzard_Timer = 22000;
|
||||
}else Blizzard_Timer -= diff;
|
||||
ConeofCold_Timer = 22000;
|
||||
}else ConeofCold_Timer -= diff;
|
||||
|
||||
//FrostNova_Timer
|
||||
if (FrostNova_Timer < diff)
|
||||
@@ -479,13 +493,16 @@ CreatureAI* GetAI_boss_seethrel(Creature *_Creature)
|
||||
enum
|
||||
{
|
||||
SPELL_HAMSTRING = 9080,
|
||||
SPELL_CLEAVE = 15579,
|
||||
SPELL_MORTALSTRIKE = 15708
|
||||
SPELL_CLEAVE = 40504,
|
||||
SPELL_MORTALSTRIKE = 13737
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
|
||||
{
|
||||
boss_gloomrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_gloomrelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 Hamstring_Timer;
|
||||
@@ -605,16 +622,19 @@ bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 send
|
||||
|
||||
enum
|
||||
{
|
||||
SPELL_SHADOWBOLTVOLLEY = 17228,
|
||||
SPELL_IMMOLATE = 15505,
|
||||
SPELL_CURSEOFWEAKNESS = 17227,
|
||||
SPELL_DEMONARMOR = 11735,
|
||||
SPELL_SHADOWBOLTVOLLEY = 15245,
|
||||
SPELL_IMMOLATE = 12742,
|
||||
SPELL_CURSEOFWEAKNESS = 12493,
|
||||
SPELL_DEMONARMOR = 13787,
|
||||
SPELL_SUMMON_VOIDWALKERS = 15092
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
|
||||
{
|
||||
boss_doomrelAI(Creature *c) : ScriptedAI(c) {pInstance = c->GetInstanceData();}
|
||||
boss_doomrelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
uint32 ShadowVolley_Timer;
|
||||
|
||||
@@ -274,6 +274,8 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
{
|
||||
if (PyroblastTimer < diff)
|
||||
{
|
||||
m_creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
|
||||
DoCast(m_creature, SPELL_SHOCK_BARRIER, true);
|
||||
DoCast(m_creature->getVictim(), SPELL_PYROBLAST);
|
||||
PyroblastTimer = 60000;
|
||||
@@ -289,8 +291,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
if (PhoenixTimer < diff)
|
||||
{
|
||||
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,1);
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1);
|
||||
|
||||
uint32 random = rand()%2 + 1;
|
||||
float x = KaelLocations[random][0];
|
||||
@@ -313,6 +314,8 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
{
|
||||
m_creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
|
||||
DoCast(target, SPELL_FLAMESTRIKE3, true);
|
||||
DoScriptText(SAY_FLAMESTRIKE, m_creature);
|
||||
}
|
||||
@@ -465,7 +468,7 @@ struct TRINITY_DLL_DECL mob_felkael_phoenixAI : public ScriptedAI
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->CastSpell(m_creature,SPELL_PHOENIX_BURN,true);
|
||||
BurnTimer = 2000;
|
||||
Death_Timer = 2700;
|
||||
Death_Timer = 3000;
|
||||
Rebirth = false;
|
||||
FakeDeath = false;
|
||||
}
|
||||
@@ -552,7 +555,6 @@ struct TRINITY_DLL_DECL mob_felkael_phoenixAI : public ScriptedAI
|
||||
BurnTimer += 2000;
|
||||
} BurnTimer -= diff;
|
||||
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
@@ -617,13 +619,12 @@ struct TRINITY_DLL_DECL mob_arcane_sphereAI : public ScriptedAI
|
||||
|
||||
if (ChangeTargetTimer < diff)
|
||||
{
|
||||
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
{
|
||||
m_creature->AddThreat(target, 1.0f);
|
||||
m_creature->TauntApply(target);
|
||||
AttackStart(target);
|
||||
}
|
||||
|
||||
ChangeTargetTimer = 5000 + rand()%10000;
|
||||
}else ChangeTargetTimer -= diff;
|
||||
|
||||
@@ -254,7 +254,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
{
|
||||
if (DrainManaTimer < diff)
|
||||
{
|
||||
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_DRAIN_MANA);
|
||||
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 1), SPELL_DRAIN_MANA);
|
||||
DrainManaTimer = 10000;
|
||||
}else DrainManaTimer -= diff;
|
||||
}
|
||||
|
||||
@@ -41,8 +41,10 @@ enum
|
||||
|
||||
//Vexallus spell info
|
||||
SPELL_CHAIN_LIGHTNING = 44318,
|
||||
SPELL_H_CHAIN_LIGHTNING = 46380, //heroic spell
|
||||
SPELL_OVERLOAD = 44353,
|
||||
SPELL_ARCANE_SHOCK = 44319,
|
||||
SPELL_H_ARCANE_SHOCK = 46381, //heroic spell
|
||||
|
||||
SPELL_SUMMON_PURE_ENERGY = 44322, //mod scale -10
|
||||
H_SPELL_SUMMON_PURE_ENERGY1 = 46154, //mod scale -5
|
||||
@@ -74,9 +76,9 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
ChainLightningTimer = 10000;
|
||||
ArcaneShockTimer = 8000;
|
||||
OverloadTimer = 2200;
|
||||
ChainLightningTimer = 8000;
|
||||
ArcaneShockTimer = 5000;
|
||||
OverloadTimer = 1200;
|
||||
IntervalHealthAmount = 1;
|
||||
Enraged = false;
|
||||
|
||||
@@ -152,16 +154,16 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
if (ChainLightningTimer < diff)
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_CHAIN_LIGHTNING);
|
||||
DoCast(target, Heroic ? SPELL_H_CHAIN_LIGHTNING : SPELL_CHAIN_LIGHTNING);
|
||||
|
||||
ChainLightningTimer = 10000;
|
||||
ChainLightningTimer = 8000;
|
||||
}else ChainLightningTimer -= diff;
|
||||
|
||||
if (ArcaneShockTimer < diff)
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
if(target)
|
||||
DoCast(target, SPELL_ARCANE_SHOCK);
|
||||
DoCast(target, Heroic ? SPELL_H_ARCANE_SHOCK : SPELL_ARCANE_SHOCK);
|
||||
|
||||
ArcaneShockTimer = 8000;
|
||||
}else ArcaneShockTimer -= diff;
|
||||
@@ -170,10 +172,9 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
{
|
||||
if (OverloadTimer < diff)
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_OVERLOAD);
|
||||
DoCast(m_creature->getVictim(), SPELL_OVERLOAD);
|
||||
|
||||
OverloadTimer = 2200;
|
||||
OverloadTimer = 2000;
|
||||
}else OverloadTimer -= diff;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,6 +60,9 @@ enum
|
||||
SPELL_LAVA_STRIKE = 57571, // (Real spell casted should be 57578) 57571 then trigger visual missile, then summon Lava Blaze on impact(spell 57572)
|
||||
SPELL_TWILIGHT_REVENGE = 60639,
|
||||
|
||||
SPELL_PYROBUFFET = 56916, // currently used for hard enrage after 15 minutes
|
||||
SPELL_PYROBUFFET_RANGE = 58907, // possibly used when player get too far away from dummy creatures (2x creature entry 30494)
|
||||
|
||||
SPELL_TWILIGHT_SHIFT_ENTER = 57620, // enter phase. Player get this when click GO
|
||||
SPELL_TWILIGHT_SHIFT_REMOVAL = 61187, // leave phase
|
||||
SPELL_TWILIGHT_SHIFT_REMOVAL_ALL = 61190, // leave phase (probably version to make all leave)
|
||||
@@ -169,7 +172,10 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
|
||||
bool m_bIsHeroic;
|
||||
|
||||
bool m_bIsBerserk;
|
||||
bool m_bIsSoftEnraged;
|
||||
|
||||
uint32 m_uiEnrageTimer;
|
||||
bool m_bIsHardEnraged;
|
||||
|
||||
uint32 m_uiTenebronTimer;
|
||||
uint32 m_uiShadronTimer;
|
||||
@@ -188,7 +194,10 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
|
||||
void Reset()
|
||||
{
|
||||
m_bIsBerserk = false;
|
||||
m_bIsSoftEnraged = false;
|
||||
|
||||
m_uiEnrageTimer = MINUTE*15*IN_MILISECONDS;
|
||||
m_bIsHardEnraged = false;
|
||||
|
||||
m_uiTenebronTimer = 30000;
|
||||
m_uiShadronTimer = 75000;
|
||||
@@ -250,8 +259,12 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
|
||||
Unit* pShad = Unit::GetUnit(*m_creature,m_pInstance->GetData64(DATA_SHADRON));
|
||||
Unit* pVesp = Unit::GetUnit(*m_creature,m_pInstance->GetData64(DATA_VESPERON));
|
||||
|
||||
//if at least one of the dragons are alive and are being called
|
||||
bool bCanUseWill = false;
|
||||
|
||||
if (pTene && pTene->isAlive() && !pTene->getVictim())
|
||||
{
|
||||
bCanUseWill = true;
|
||||
pTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aTene[0].m_fX, m_aTene[0].m_fY, m_aTene[0].m_fZ);
|
||||
|
||||
if (!pTene->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
||||
@@ -260,6 +273,7 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
|
||||
|
||||
if (pShad && pShad->isAlive() && !pShad->getVictim())
|
||||
{
|
||||
bCanUseWill = true;
|
||||
pShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aShad[0].m_fX, m_aShad[0].m_fY, m_aShad[0].m_fZ);
|
||||
|
||||
if (!pShad->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
||||
@@ -268,11 +282,15 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
|
||||
|
||||
if (pVesp && pVesp->isAlive() && !pVesp->getVictim())
|
||||
{
|
||||
bCanUseWill = true;
|
||||
pVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aVesp[0].m_fX, m_aVesp[0].m_fY, m_aVesp[0].m_fZ);
|
||||
|
||||
if (!pVesp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
||||
pVesp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
|
||||
if (bCanUseWill)
|
||||
DoCast(m_creature, SPELL_WILL_OF_SARTHARION);
|
||||
}
|
||||
|
||||
void CallDragon(uint32 uiDataId)
|
||||
@@ -337,20 +355,28 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (!m_bIsBerserk && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 10)
|
||||
//spell will target dragons, if they are still alive at 35%
|
||||
if (!m_bIsBerserk && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 35)
|
||||
{
|
||||
DoScriptText(SAY_SARTHARION_BERSERK,m_creature);
|
||||
DoCast(m_creature,SPELL_BERSERK);
|
||||
m_bIsBerserk = true;
|
||||
}
|
||||
|
||||
// enrage
|
||||
if (m_uiEnrageTimer)
|
||||
//soft enrage
|
||||
if (!m_bIsSoftEnraged && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 10)
|
||||
{
|
||||
// TODO
|
||||
m_bIsSoftEnraged = true;
|
||||
}
|
||||
|
||||
// hard enrage
|
||||
if (!m_bIsHardEnraged)
|
||||
{
|
||||
if (m_uiEnrageTimer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_WILL_OF_SARTHARION);
|
||||
m_uiEnrageTimer = 0;
|
||||
DoCast(m_creature, SPELL_PYROBUFFET, true);
|
||||
m_bIsHardEnraged = true;
|
||||
}
|
||||
else
|
||||
m_uiEnrageTimer -= uiDiff;
|
||||
|
||||
Reference in New Issue
Block a user