aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKudlaty <none@none>2009-08-12 23:34:19 +0200
committerKudlaty <none@none>2009-08-12 23:34:19 +0200
commitc2b2611a42e16d67883416a7f334ec30b3531fff (patch)
treedb90fd610b4266ecb4c0ae87bba423e133318693
parent15c61715e21af7537d38f3083b11be8458c219d7 (diff)
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
-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;