*Gundrak: Eck the Ferocious & Gal'Darah, by Tartalo
*Implement talent Lava Flows (ranks 1-3), by win32 --HG-- branch : trunk
This commit is contained in:
@@ -26,13 +26,22 @@ struct TRINITY_DLL_DECL boss_eckAI : public ScriptedAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32 uiBerserkTimer;
|
uint32 uiBerserkTimer;
|
||||||
|
uint32 uiBiteTimer;
|
||||||
|
uint32 uiSpitTimer;
|
||||||
|
uint32 uiSpringTimer;
|
||||||
|
|
||||||
|
bool bBerserk;
|
||||||
|
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
//Source Deadly Boss Mod
|
uiBerserkTimer = 60000 + rand()%30000; //60-90 secs according to wowwiki
|
||||||
uiBerserkTimer = 120000; //2min
|
uiBiteTimer = 5000;
|
||||||
|
uiSpitTimer = 10000;
|
||||||
|
uiSpringTimer = 8000;
|
||||||
|
|
||||||
|
bBerserk = false;
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED);
|
pInstance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED);
|
||||||
@@ -49,11 +58,31 @@ struct TRINITY_DLL_DECL boss_eckAI : public ScriptedAI
|
|||||||
//Return since we have no target
|
//Return since we have no target
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (uiBerserkTimer < diff)
|
if (uiBiteTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(),SPELL_ECK_BITE);
|
||||||
|
uiBiteTimer = 8000 + rand()%4000;
|
||||||
|
} else uiBiteTimer -= diff;
|
||||||
|
if (uiSpitTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(),SPELL_ECK_SPIT);
|
||||||
|
uiSpitTimer = 6000 + rand()%8000;
|
||||||
|
} else uiSpitTimer -= diff;
|
||||||
|
if (uiSpringTimer < diff)
|
||||||
|
{
|
||||||
|
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||||
|
while (pTarget && (pTarget->GetTypeId() != TYPEID_PLAYER || pTarget == m_creature->getVictim()))
|
||||||
|
pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||||
|
if (pTarget)
|
||||||
|
DoCast(pTarget,RAND(SPELL_ECK_SPRING_1,SPELL_ECK_SPRING_2));
|
||||||
|
uiSpringTimer = 5000 + rand()%10000;
|
||||||
|
} else uiSpringTimer -= diff;
|
||||||
|
//Berserk on timer or 20% of health
|
||||||
|
if (!bBerserk && (uiBerserkTimer < diff || m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 20))
|
||||||
{
|
{
|
||||||
DoCast(m_creature,SPELL_ECK_BERSERK);
|
DoCast(m_creature,SPELL_ECK_BERSERK);
|
||||||
uiBerserkTimer = 120000;
|
bBerserk = true;
|
||||||
}else uiBerserkTimer -= diff;
|
}else uiBerserkTimer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
|
|||||||
@@ -16,9 +16,13 @@ update creature_template set scriptname = '' where entry = '';
|
|||||||
enum Spells
|
enum Spells
|
||||||
{
|
{
|
||||||
SPELL_ENRAGE = 55285,
|
SPELL_ENRAGE = 55285,
|
||||||
|
H_SPELL_ENRAGE = 59828,
|
||||||
SPELL_IMPALING_CHARGE = 54956,
|
SPELL_IMPALING_CHARGE = 54956,
|
||||||
|
H_SPELL_IMPALING_CHARGE = 59827,
|
||||||
SPELL_STOMP = 55292,
|
SPELL_STOMP = 55292,
|
||||||
|
H_SPELL_STOMP = 59826,
|
||||||
SPELL_PUNCTURE = 55276,
|
SPELL_PUNCTURE = 55276,
|
||||||
|
H_SPELL_PUNCTURE = 59826,
|
||||||
SPELL_STAMPEDE = 55218,
|
SPELL_STAMPEDE = 55218,
|
||||||
SPELL_WHIRLING_SLASH = 55249,
|
SPELL_WHIRLING_SLASH = 55249,
|
||||||
H_SPELL_WHIRLING_SLASH = 55825
|
H_SPELL_WHIRLING_SLASH = 55825
|
||||||
@@ -39,6 +43,12 @@ enum Yells
|
|||||||
SAY_TRANSFORM_2 = -1604009
|
SAY_TRANSFORM_2 = -1604009
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum CombatPhase
|
||||||
|
{
|
||||||
|
TROLL,
|
||||||
|
RHINO
|
||||||
|
};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_gal_darahAI(Creature *c) : ScriptedAI(c)
|
boss_gal_darahAI(Creature *c) : ScriptedAI(c)
|
||||||
@@ -46,10 +56,30 @@ struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
|
|||||||
pInstance = c->GetInstanceData();
|
pInstance = c->GetInstanceData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32 uiStampedeTimer;
|
||||||
|
uint32 uiWhirlingSlashTimer;
|
||||||
|
uint32 uiPunctureTimer;
|
||||||
|
uint32 uiEnrageTimer;
|
||||||
|
uint32 uiImpalingChargeTimer;
|
||||||
|
uint32 uiStompTimer;
|
||||||
|
|
||||||
|
CombatPhase Phase;
|
||||||
|
|
||||||
|
uint8 uiPhaseCounter;
|
||||||
|
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
|
uiStampedeTimer = 10000;
|
||||||
|
uiWhirlingSlashTimer = 20000;
|
||||||
|
uiPunctureTimer = 10000;
|
||||||
|
uiEnrageTimer = 15000;
|
||||||
|
uiImpalingChargeTimer = 20000;
|
||||||
|
uiStompTimer = 25000;
|
||||||
|
|
||||||
|
Phase = TROLL;
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_GAL_DARAH_EVENT, NOT_STARTED);
|
pInstance->SetData(DATA_GAL_DARAH_EVENT, NOT_STARTED);
|
||||||
}
|
}
|
||||||
@@ -67,6 +97,75 @@ struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
|
|||||||
//Return since we have no target
|
//Return since we have no target
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
switch (Phase)
|
||||||
|
{
|
||||||
|
case TROLL:
|
||||||
|
if (uiPhaseCounter == 2)
|
||||||
|
{
|
||||||
|
//FIX: implement transformation
|
||||||
|
Phase = RHINO;
|
||||||
|
uiPhaseCounter = 0;
|
||||||
|
DoScriptText(SAY_TRANSFORM_1,m_creature);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (uiStampedeTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature,SPELL_STAMPEDE);
|
||||||
|
DoScriptText(RAND(SAY_SUMMON_RHINO_1,SAY_SUMMON_RHINO_2,SAY_SUMMON_RHINO_3),m_creature);
|
||||||
|
uiStampedeTimer = 15000;
|
||||||
|
} else uiStampedeTimer -= diff;
|
||||||
|
|
||||||
|
if (uiWhirlingSlashTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_WHIRLING_SLASH : SPELL_WHIRLING_SLASH);
|
||||||
|
uiWhirlingSlashTimer = 20000;
|
||||||
|
++uiPhaseCounter;
|
||||||
|
} else uiWhirlingSlashTimer -= diff;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RHINO:
|
||||||
|
if (uiPhaseCounter == 2)
|
||||||
|
{
|
||||||
|
//FIX: implement transformation
|
||||||
|
Phase = TROLL;
|
||||||
|
uiPhaseCounter = 0;
|
||||||
|
DoScriptText(SAY_TRANSFORM_2,m_creature);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (uiPunctureTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_PUNCTURE : SPELL_PUNCTURE);
|
||||||
|
uiPunctureTimer = 8000;
|
||||||
|
} else uiPunctureTimer -= diff;
|
||||||
|
|
||||||
|
if (uiEnrageTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_ENRAGE : SPELL_ENRAGE);
|
||||||
|
uiEnrageTimer = 20000;
|
||||||
|
} else uiEnrageTimer -= diff;
|
||||||
|
|
||||||
|
if(uiStompTimer < diff)
|
||||||
|
{
|
||||||
|
DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_STOMP : SPELL_STOMP);
|
||||||
|
uiStompTimer = 20000;
|
||||||
|
} else uiStompTimer -= diff;
|
||||||
|
|
||||||
|
if (uiImpalingChargeTimer < diff)
|
||||||
|
{
|
||||||
|
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||||
|
while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
|
||||||
|
pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||||
|
if (pTarget)
|
||||||
|
DoCast(pTarget,HeroicMode ? H_SPELL_IMPALING_CHARGE : SPELL_IMPALING_CHARGE);
|
||||||
|
uiImpalingChargeTimer = 30000;
|
||||||
|
++uiPhaseCounter;
|
||||||
|
} else uiImpalingChargeTimer -= diff;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6557,6 +6557,24 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
|
|||||||
target = this;
|
target = this;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Lava Flows (Rank 1)
|
||||||
|
case 51480:
|
||||||
|
{
|
||||||
|
triggered_spell_id = 64694;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Lava Flows (Rank 2)
|
||||||
|
case 51481:
|
||||||
|
{
|
||||||
|
triggered_spell_id = 65263;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Lava Flows (Rank 3)
|
||||||
|
case 51482:
|
||||||
|
{
|
||||||
|
triggered_spell_id = 65264;
|
||||||
|
break;
|
||||||
|
}
|
||||||
// Glyph of Healing Wave
|
// Glyph of Healing Wave
|
||||||
case 55440:
|
case 55440:
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user