diff options
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; |