diff options
author | Kudlaty <none@none> | 2009-08-12 23:34:19 +0200 |
---|---|---|
committer | Kudlaty <none@none> | 2009-08-12 23:34:19 +0200 |
commit | c2b2611a42e16d67883416a7f334ec30b3531fff (patch) | |
tree | db90fd610b4266ecb4c0ae87bba423e133318693 /src | |
parent | 15c61715e21af7537d38f3083b11be8458c219d7 (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
Diffstat (limited to 'src')
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; |