diff options
author | maximius <none@none> | 2009-09-26 22:13:08 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-09-26 22:13:08 -0700 |
commit | 371c6fd37184fb0c0e98fc2b8b11c2a496991211 (patch) | |
tree | 5a81b5a4867e93fb40bd8f5864d2f6e2987ad999 /src | |
parent | 342b071d476f71f9467c56c46ac046eb906f7205 (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.cpp | 39 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp | 99 | ||||
-rw-r--r-- | src/game/Unit.cpp | 18 |
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: { |