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