diff options
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:                  {  | 
