void MovementInform(uint32 uiMovementType, uint32 uiData)
    {
        if (uiMovementType != POINT_MOTION_TYPE)
            return;

        if (uiData == POINT_AIR)
        {
            m_uiPhase = PHASE_AIR;

            int max = m_bIs25Man ? 5 : 2;
            if (m_bIs25Man && m_bIsHeroic)
                max = 6;

            DoMark(max);

            // set timers
            m_uiIceTombTimer    = 5500;
            m_uiFrostBombTimer  = 12000;
            m_uiPhaseTimer      = 35000;
        }
        else if (uiData == POINT_LAND)
        {
            m_uiPhase = PHASE_GROUND;
            SetCombatMovement(true);
            m_creature->SetLevitate(false);
            m_creature->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNK_2);

            if (m_creature->getVictim())
                m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
        }
    }
Example #2
0
    void MovementInform(uint32 uiMovementType, uint32 uiData)
    {
        if (uiMovementType != POINT_MOTION_TYPE)
            return;

        if (uiData == POINT_AGGRO)
        {
            if (m_creature->getVictim())
            {
                DoCastSpellIfCan(m_creature, SPELL_FROST_AURA, CAST_TRIGGERED);
                DoCastSpellIfCan(m_creature, SPELL_PERMEATING_CHILL, CAST_TRIGGERED);
                SetLevitate(false);
                m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
                m_uiPhase = PHASE_GROUND;
            }
            else
                EnterEvadeMode();
        }
        else if (uiData == POINT_AIR)
        {
            m_uiPhase = PHASE_AIR;

            int max = m_bIs25Man ? 5 : 2;
            if (m_bIs25Man && m_bIsHeroic)
                max = 6;

            DoMark(max);

            // set timers
            m_uiIceTombTimer    = 5500;
            m_uiFrostBombTimer  = 12000;
            m_uiPhaseTimer      = 35000;
        }
        else if (uiData == POINT_LAND)
        {
            m_uiPhase = PHASE_GROUND;
            SetCombatMovement(true);
            SetLevitate(false);

            if (m_creature->getVictim())
                m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());

            m_uiPhaseTimer = 110000;
        }
    }
    void MovementInform(uint32 uiMovementType, uint32 uiPointId)
    {
        if (uiMovementType != POINT_MOTION_TYPE)
            return;

        if (uiPointId == SINDRAGOSA_POINT_AIR_EAST)
        {
            m_creature->GetMotionMaster()->MovePoint(SINDRAGOSA_POINT_AIR_WEST, SindragosaPosition[9][0], SindragosaPosition[9][1], SindragosaPosition[9][2], false);
        }
        else if (uiPointId == SINDRAGOSA_POINT_AIR_WEST)
        {
            m_creature->GetMotionMaster()->MovePoint(SINDRAGOSA_POINT_AIR_EAST, SindragosaPosition[8][0], SindragosaPosition[8][1], SindragosaPosition[8][2], false);
        }
        else if (uiPointId == SINDRAGOSA_POINT_GROUND_CENTER)
        {
            // fly up
            if (m_uiPhase == SINDRAGOSA_PHASE_GROUND)
            {
                m_uiPhase = SINDRAGOSA_PHASE_FLYING_TO_AIR;
                SetLevitate(true);
                m_creature->GetMotionMaster()->MovePoint(SINDRAGOSA_POINT_AIR_CENTER, SindragosaPosition[1][0], SindragosaPosition[1][1], SindragosaPosition[1][2], false);
            }
            else // land and attack
            {
                if (m_uiPhase == SINDRAGOSA_PHASE_AGGRO)
                {
                    DoCastSpellIfCan(m_creature, SPELL_FROST_AURA, CAST_TRIGGERED);
                    DoCastSpellIfCan(m_creature, SPELL_PERMEATING_CHILL, CAST_TRIGGERED);
                }
                
                SetLevitate(false);
                SetCombatMovement(true);
                m_creature->GetMotionMaster()->Clear();
                m_uiPhase = SINDRAGOSA_PHASE_GROUND;

                if (Unit *pVictim = m_creature->getVictim())
                    m_creature->GetMotionMaster()->MoveChase(pVictim);                
            }
        }
        else if (uiPointId == SINDRAGOSA_POINT_AIR_PHASE_2)
        {
            m_uiPhase = SINDRAGOSA_PHASE_AIR;

            int max = m_bIs25Man ? 5 : 2;
            if (m_bIs25Man && m_bIsHeroic)
                max = 6;

            DoMark(max);

            // set timers
            m_uiIceTombTimer    = 5500;
            m_uiFrostBombTimer  = 12000;
            m_uiPhaseTimer      = 35000;
        }
        else if (uiPointId == SINDRAGOSA_POINT_AIR_CENTER)
        {
            if (m_uiPhase == SINDRAGOSA_PHASE_AGGRO || m_uiPhase == SINDRAGOSA_PHASE_FLYING_TO_GROUND)
            {
                // land
                m_creature->GetMotionMaster()->MovePoint(SINDRAGOSA_POINT_GROUND_CENTER, SindragosaPosition[0][0], SindragosaPosition[0][1], SindragosaPosition[0][2], false);
            }
            else if (m_uiPhase == SINDRAGOSA_PHASE_FLYING_TO_AIR)
            {
                // fly up (air phase)
                m_creature->GetMotionMaster()->MovePoint(SINDRAGOSA_POINT_AIR_PHASE_2, SindragosaPosition[2][0], SindragosaPosition[2][1], SindragosaPosition[2][2], false);
            }
        }
    }