aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bindings/scripts/include/sc_creature.cpp2
-rw-r--r--src/bindings/scripts/scripts/npc/npcs_special.cpp24
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_pandemonius.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp15
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp1
-rw-r--r--src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp90
-rw-r--r--src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp17
-rw-r--r--src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp19
-rw-r--r--src/bindings/scripts/scripts/zone/obsidian_sanctum/boss_sartharion.cpp36
10 files changed, 134 insertions, 76 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp
index b63e88a8cec..956a76790f8 100644
--- a/src/bindings/scripts/include/sc_creature.cpp
+++ b/src/bindings/scripts/include/sc_creature.cpp
@@ -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:
diff --git a/src/bindings/scripts/scripts/npc/npcs_special.cpp b/src/bindings/scripts/scripts/npc/npcs_special.cpp
index 05ecab1f102..5b178081a37 100644
--- a/src/bindings/scripts/scripts/npc/npcs_special.cpp
+++ b/src/bindings/scripts/scripts/npc/npcs_special.cpp
@@ -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)
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_pandemonius.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_pandemonius.cpp
index 1aaf53bde7b..92a4b4e2dfd 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_pandemonius.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_pandemonius.cpp
@@ -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;
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
index 9e38ddea302..30f930ae043 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp
@@ -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();
}
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
index 472d4f30e6a..753b8a31470 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
@@ -22,6 +22,7 @@ SDCategory: Auchindoun, Shadow Labyrinth
EndScriptData */
#include "precompiled.h"
+#include "def_shadow_labyrinth.h"
#define EMOTE_SONIC_BOOM -1555036
diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp
index 00212ac1c42..09da8f07b75 100644
--- a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp
+++ b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp
@@ -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;
diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp
index 42b58cef756..3fd501e8f36 100644
--- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp
+++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp
@@ -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;
diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp
index 7fc4d3b2e64..f09a16aa171 100644
--- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp
+++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp
@@ -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;
}
diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp
index 9f79c07d2ef..d641edb36f4 100644
--- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp
+++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp
@@ -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;
}
diff --git a/src/bindings/scripts/scripts/zone/obsidian_sanctum/boss_sartharion.cpp b/src/bindings/scripts/scripts/zone/obsidian_sanctum/boss_sartharion.cpp
index 84d6d467f54..fd764e1f471 100644
--- a/src/bindings/scripts/scripts/zone/obsidian_sanctum/boss_sartharion.cpp
+++ b/src/bindings/scripts/scripts/zone/obsidian_sanctum/boss_sartharion.cpp
@@ -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;