aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-09-26 22:13:08 -0700
committermaximius <none@none>2009-09-26 22:13:08 -0700
commit371c6fd37184fb0c0e98fc2b8b11c2a496991211 (patch)
tree5a81b5a4867e93fb40bd8f5864d2f6e2987ad999 /src
parent342b071d476f71f9467c56c46ac046eb906f7205 (diff)
*Gundrak: Eck the Ferocious & Gal'Darah, by Tartalo
*Implement talent Lava Flows (ranks 1-3), by win32 --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp39
-rw-r--r--src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp99
-rw-r--r--src/game/Unit.cpp18
3 files changed, 151 insertions, 5 deletions
diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp
index 241570fa0ed..c8e23a75baf 100644
--- a/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp
+++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp
@@ -26,13 +26,22 @@ struct TRINITY_DLL_DECL boss_eckAI : public ScriptedAI
}
uint32 uiBerserkTimer;
+ uint32 uiBiteTimer;
+ uint32 uiSpitTimer;
+ uint32 uiSpringTimer;
+
+ bool bBerserk;
ScriptedInstance* pInstance;
void Reset()
{
- //Source Deadly Boss Mod
- uiBerserkTimer = 120000; //2min
+ uiBerserkTimer = 60000 + rand()%30000; //60-90 secs according to wowwiki
+ uiBiteTimer = 5000;
+ uiSpitTimer = 10000;
+ uiSpringTimer = 8000;
+
+ bBerserk = false;
if (pInstance)
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
if (!UpdateVictim())
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);
- uiBerserkTimer = 120000;
+ bBerserk = true;
}else uiBerserkTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp
index 123a2b1ccc6..9bc261db7d2 100644
--- a/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp
+++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp
@@ -16,9 +16,13 @@ update creature_template set scriptname = '' where entry = '';
enum Spells
{
SPELL_ENRAGE = 55285,
+ H_SPELL_ENRAGE = 59828,
SPELL_IMPALING_CHARGE = 54956,
+ H_SPELL_IMPALING_CHARGE = 59827,
SPELL_STOMP = 55292,
+ H_SPELL_STOMP = 59826,
SPELL_PUNCTURE = 55276,
+ H_SPELL_PUNCTURE = 59826,
SPELL_STAMPEDE = 55218,
SPELL_WHIRLING_SLASH = 55249,
H_SPELL_WHIRLING_SLASH = 55825
@@ -39,6 +43,12 @@ enum Yells
SAY_TRANSFORM_2 = -1604009
};
+enum CombatPhase
+{
+ TROLL,
+ RHINO
+};
+
struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
{
boss_gal_darahAI(Creature *c) : ScriptedAI(c)
@@ -46,10 +56,30 @@ struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI
pInstance = c->GetInstanceData();
}
+ uint32 uiStampedeTimer;
+ uint32 uiWhirlingSlashTimer;
+ uint32 uiPunctureTimer;
+ uint32 uiEnrageTimer;
+ uint32 uiImpalingChargeTimer;
+ uint32 uiStompTimer;
+
+ CombatPhase Phase;
+
+ uint8 uiPhaseCounter;
+
ScriptedInstance* pInstance;
void Reset()
{
+ uiStampedeTimer = 10000;
+ uiWhirlingSlashTimer = 20000;
+ uiPunctureTimer = 10000;
+ uiEnrageTimer = 15000;
+ uiImpalingChargeTimer = 20000;
+ uiStompTimer = 25000;
+
+ Phase = TROLL;
+
if (pInstance)
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
if (!UpdateVictim())
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();
}
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 067d953e381..e0bd23b53b2 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -6557,6 +6557,24 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
target = this;
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
case 55440:
{