void HandleScriptEffect(SpellEffIndex effIndex)
            {
                Unit* caster = GetCaster();

                if (!caster)
                    return;

                Creature* carriage = NULL;
                Creature* yak      = NULL;
                
                if (caster->GetAreaId() == 5826) // Bassins chantants
                {
                    carriage = caster->SummonCreature(57208, 979.06f, 2863.87f, 87.88f, 4.7822f, TEMPSUMMON_MANUAL_DESPAWN, 0, caster->GetGUID());
                    yak      = caster->SummonCreature(57207, 979.37f, 2860.29f, 88.22f, 4.4759f, TEMPSUMMON_MANUAL_DESPAWN, 0, caster->GetGUID());
                }
                else if (caster->GetAreaId() == 5881) // Ferme Dai-Lo
                {
                    carriage = caster->SummonCreature(57208, 588.70f, 3165.63f, 88.86f, 4.4156f, TEMPSUMMON_MANUAL_DESPAWN, 0, caster->GetGUID());
                    yak      = caster->SummonCreature(59499, 587.61f, 3161.91f, 89.31f, 4.3633f, TEMPSUMMON_MANUAL_DESPAWN, 0, caster->GetGUID());
                }
                else if (caster->GetAreaId() == 5833) // Epave du Chercheciel
                {
                    carriage = caster->SummonCreature(57208, 264.37f, 3867.60f, 73.56f, 0.9948f, TEMPSUMMON_MANUAL_DESPAWN, 0, caster->GetGUID());
                    yak      = caster->SummonCreature(57743, 268.38f, 3872.36f, 74.50f, 0.8245f, TEMPSUMMON_MANUAL_DESPAWN, 0, caster->GetGUID());
                }

                if (!carriage || !yak)
                    return;

                //carriage->CastSpell(yak, 108627, true);
                carriage->GetMotionMaster()->MoveFollow(yak, 0.0f, M_PI);
                caster->EnterVehicle(carriage, 0);
            }
Example #2
0
    void UpdateAI(const uint32 uiDiff)
    {
        if (!UpdateVictim()) 
            return;

        if (m_uiGrabTimer < uiDiff)
        {
			if(!InVehicle)
			{
                Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
                pTarget->EnterVehicle(vehicle);
			    InVehicle = true;
			}
            m_uiGrabTimer = 120000;
        } else m_uiGrabTimer -= uiDiff;

        if (m_uiMovementTimer < uiDiff)
        {
            me->GetMotionMaster()->MovePoint(0, ValkyrMoveMent);
            m_uiMovementTimer = 120000;
        } else m_uiMovementTimer -= uiDiff;

        if (m_uiFallPlayerTimer < uiDiff)
        {
			if(!OutVehicle)
			{
                vehicle->RemoveAllPassengers();
				OutVehicle = true;
			}
            m_uiFallPlayerTimer = 120000;
        } else m_uiFallPlayerTimer -= uiDiff;
    }
Example #3
0
    void UpdateAI(const uint32 uiDiff)
    {
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;

        if (m_bIsImpaled)
        {
            if (m_uiImpaleEndTimer < uiDiff)
            {
                if (m_creature->GetVehicleKit())
                    m_creature->GetVehicleKit()->RemoveAllPassengers();
                m_bIsImpaled = false;
            }
            else
                m_uiImpaleEndTimer -= uiDiff;
        }
        
        if (m_uiAbilityCount == 2)
        {
            if (m_uiPhaseChangeTimer < uiDiff)
                DoPhaseSwitch();
            else
                m_uiPhaseChangeTimer -= uiDiff;
        }

        if (m_bIsTrollPhase)
        {
            if (m_uiPunctureTimer < uiDiff)
            {
                DoCastSpellIfCan(m_creature->getVictim(), m_bIsRegularMode ? SPELL_PUNCTURE : SPELL_PUNCTURE_H);
                m_uiPunctureTimer = 25000;
            }
            else
                m_uiPunctureTimer -= uiDiff;

            if (m_uiStampedeTimer < uiDiff)
            {
                switch(urand(0, 2))
                {
                    case 0: DoScriptText(SAY_SUMMON_1, m_creature); break;
                    case 1: DoScriptText(SAY_SUMMON_2, m_creature); break;
                    case 2: DoScriptText(SAY_SUMMON_3, m_creature); break;
                }

                DoCastSpellIfCan(m_creature->getVictim(), SPELL_STAMPEDE);
                m_uiStampedeTimer = 15000;
            }
            else
                m_uiStampedeTimer -= uiDiff;

            if (m_uiSpecialAbilityTimer < uiDiff)
            {
                if (SpellEntry* pTempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(m_bIsRegularMode ? SPELL_WHIRLING_SLASH : SPELL_WHIRLING_SLASH_H))
                {
                    pTempSpell->Effect[2] = 0;
                    m_creature->CastSpell(m_creature->getVictim(), pTempSpell, false);
                }

                m_uiSpecialAbilityTimer = 12000;
                ++m_uiAbilityCount;
            }
            else
                m_uiSpecialAbilityTimer -= uiDiff;

        }
        else
        {
            if (m_uiEnrageTimer < uiDiff)
            {
                DoCastSpellIfCan(m_creature, m_bIsRegularMode ? SPELL_ENRAGE : SPELL_ENRAGE_H);
                m_uiEnrageTimer = 15000;
            }
            else
                m_uiEnrageTimer -= uiDiff;

            if (m_uiStompTimer < uiDiff)
            {
                DoCastSpellIfCan(m_creature, m_bIsRegularMode ? SPELL_STOMP : SPELL_STOMP_H);
                m_uiStompTimer = 10000;
            }
            else
                m_uiStompTimer -= uiDiff;

            if (m_uiSpecialAbilityTimer < uiDiff)
            {
                Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1);

                if (!pTarget)
                    pTarget = m_creature->getVictim();

                if (DoCastSpellIfCan(pTarget, m_bIsRegularMode ? SPELL_IMPALING_CHARGE : SPELL_IMPALING_CHARGE_H) == CAST_OK)
                {
                    DoScriptText(EMOTE_IMPALED, m_creature, pTarget);
                    m_uiSpecialAbilityTimer = 12000;
                    pTarget->EnterVehicle(m_creature->GetVehicleKit(), 0);
                    m_uiImpaleEndTimer = 5000;
                    m_bIsImpaled = true;

                    ++m_uiAbilityCount;
                }
            }
            else
                m_uiSpecialAbilityTimer -= uiDiff;
        }

        DoMeleeAttackIfReady();
    }