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
This commit is contained in:
Kudlaty
2009-08-12 23:34:19 +02:00
parent 15c61715e2
commit c2b2611a42
10 changed files with 134 additions and 76 deletions

View File

@@ -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:

View File

@@ -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)

View File

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

View File

@@ -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();
}

View File

@@ -22,6 +22,7 @@ SDCategory: Auchindoun, Shadow Labyrinth
EndScriptData */
#include "precompiled.h"
#include "def_shadow_labyrinth.h"
#define EMOTE_SONIC_BOOM -1555036

View File

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

View File

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

View File

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

View File

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

View File

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