void UpdateAI(const uint32 diff)
            {
                if (!pInstance || pInstance->GetData(DATA_VALITHRIA_DREAMWALKER_EVENT) != IN_PROGRESS)
                    return;

                if (m_uiSummonTimer <= diff)
                {
                    uint8 location = RAID_MODE(1,3,1,3);
                    for (uint8 i = 0; i <= location; ++i)
                    {
                        HeroicSummon(i);
                    }
                    m_uiSummonTimer = 20000;
                } else m_uiSummonTimer -= diff;

                if (m_uiPortalTimer <= diff)
                {
                    DoScriptText(SAY_OPEN_PORTAL, pValithria);
                    for(uint8 p = 0; p < 6; ++p)
                    {
                        DoCast(RAID_MODE(SPELL_PORTAL_N_PRE,SPELL_PORTAL_N_PRE,SPELL_PORTAL_H_PRE,SPELL_PORTAL_H_PRE));
                    }
                    m_uiPortalTimer = 50000;
                } else m_uiPortalTimer -= diff;
            }
Ejemplo n.º 2
0
            void UpdateAI(const uint32 diff)
            {
                ResetEvent();

                if (pInstance && pInstance->GetData(DATA_VALITHRIA_DREAMWALKER_EVENT) == IN_PROGRESS)
                {
                    DoStartNoMovement(me->getVictim());

                    if (m_uiSummonTimer <= diff)
                    {
                        uint8 location = RAID_MODE(1,3,1,3);
                        for (uint8 i = 0; i < location; ++i)
                        {
                            HeroicSummon(i);
                        }
                        m_uiSummonTimer = 20000;
                    } else m_uiSummonTimer -= diff;

                    if (m_uiPortalTimer <= diff)
                    {
                        DoScriptText(SAY_OPEN_PORTAL, me);

                        me->SummonCreature(CREATURE_PORTAL, me->GetPositionX()+15, me->GetPositionY()+15, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 15000);
                        me->SummonCreature(CREATURE_PORTAL, me->GetPositionX()+10, me->GetPositionY()+25, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 15000);
                        me->SummonCreature(CREATURE_PORTAL, me->GetPositionX()+15, me->GetPositionY()-25, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 15000);
                        m_uiPortalTimer = 30000;
                    } else m_uiPortalTimer -= diff;

                    if (!bAboveHP && (HealthAbovePct(74)))
                    {
                        DoScriptText(SAY_ABOVE_75, me);
                        bAboveHP = true;
                    }

                    if (!bBelowHP && (HealthBelowPct(26)))
                    {
                        DoScriptText(SAY_BELOW_25, me);
                        bBelowHP = true;
                    }

                    if ((HealthAbovePct(99)) && !bEnd)
                    {
                        DoScriptText(SAY_END, me);
                        me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
                        me->SetReactState(REACT_PASSIVE);
                        me->RemoveAurasDueToSpell(SPELL_CORRUPTION);

                        bEnd = true;
                    }

                    if(bEnd)
                    {
                        if (m_uiEndTimer <= diff)
                        {
                            switch(m_uiStage)
                            {
                                case 1:
                                    DoScriptText(SAY_BERSERK , me);
                                    DoCast(me, SPELL_RAGE);
                                    me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
                                    ++m_uiStage;
                                    m_uiEndTimer = 6000;
                                    break;
                                case 2:
                                    {
                                        combat_trigger->ForcedDespawn();
                                        DoCast(me, SPELL_DREAM_SLIP, true);
                                        ++m_uiStage;
                                        m_uiEndTimer = 1000;
                                    }
                                    break;
                                case 3:
                                    if (pInstance)
                                        pInstance->SetData(DATA_VALITHRIA_DREAMWALKER_EVENT, DONE);
                                    me->ForcedDespawn();
                                    m_uiEndTimer = 1000;
                                    bEnd = false;
                                    ++m_uiStage;
                                    break;
                            }
                        } else m_uiEndTimer -= diff;
                    }
                }
            }