Esempio n. 1
0
    void StartEvent(Unit *who)
    {
        if (!pInstance)
            return;

        GetCouncil();

        DoScriptText(SAY_AGGRO, m_creature);

        pInstance->SetData64(DATA_MAULGAREVENT_TANK, who->GetGUID());
        pInstance->SetData(DATA_MAULGAREVENT, IN_PROGRESS);
    }
    void Aggro(Unit *pWho)
    {
        if (!m_pInstance)
            return;

        GetCouncil();

        DoScriptText(SAY_AGGRO, m_creature);

        m_creature->CallForHelp(50.0f);

        if (m_pInstance->GetData(TYPE_MAULGAR_EVENT) == NOT_STARTED)
            m_pInstance->SetData(TYPE_MAULGAR_EVENT, IN_PROGRESS);
    }
        void StartEvent(Unit* who)
        {
            if (!instance)
                return;

            GetCouncil();

            Talk(SAY_AGGRO);

            instance->SetData64(DATA_MAULGAREVENT_TANK, who->GetGUID());
            instance->SetData(DATA_MAULGAREVENT, IN_PROGRESS);

            DoZoneInCombat();
        }
Esempio n. 4
0
        void UpdateAI(const uint32 diff)
        {
            //Only if not incombat check if the event is started
            if(!me->isInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT))
            {
                Unit* target = Unit::GetUnit((*me), pInstance->GetData64(DATA_MAULGAREVENT_TANK));

                if(target)
                {
                    AttackStart(target);
                    GetCouncil();
                }
            }

            //Return since we have no target
            if(!UpdateVictim())
                return;

            //someone evaded!
            if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
            {
                EnterEvadeMode();
                return;
            }

            //ArcingSmash_Timer
            if(ArcingSmash_Timer <= diff)
            {
                DoCast(me->getVictim(), SPELL_ARCING_SMASH);
                ArcingSmash_Timer = 10000;
            } else ArcingSmash_Timer -= diff;

            //Whirlwind_Timer
                   if(Whirlwind_Timer <= diff)
                   {
                        DoCast(me->getVictim(), SPELL_WHIRLWIND);
                        Whirlwind_Timer = 55000;
                   } else Whirlwind_Timer -= diff;

            //MightyBlow_Timer
            if(MightyBlow_Timer <= diff)
            {
                DoCast(me->getVictim(), SPELL_MIGHTY_BLOW);
                MightyBlow_Timer = 30000+rand()%10000;
            } else MightyBlow_Timer -= diff;

            //Entering Phase 2
            if(!Phase2 && HealthBelowPct(50))
            {
                Phase2 = true;
                DoScriptText(SAY_ENRAGE, me);

                DoCast(me, SPELL_DUAL_WIELD, true);
                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, 0);
                me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
            }

            if(Phase2)
            {
                //Charging_Timer
                if(Charging_Timer <= diff)
                {
                    Unit* target = NULL;
                    target = SelectTarget(SELECT_TARGET_RANDOM, 0);
                    if(target)
                    {
                        AttackStart(target);
                        DoCast(target, SPELL_BERSERKER_C);
                    }
                    Charging_Timer = 20000;
                } else Charging_Timer -= diff;

                //Intimidating Roar
                if(Roar_Timer <= diff)
                {
                    DoCast(me, SPELL_ROAR);
                    Roar_Timer = 40000+(rand()%10000);
                } else Roar_Timer -= diff;
            }

            DoMeleeAttackIfReady();
        }
    void UpdateAI(const uint32 diff)
    {
        //Only if not incombat check if the event is started
        if (!me->IsInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT))
        {
            Unit* pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_MAULGAREVENT_TANK));

            if (pTarget)
            {
                AttackStart(pTarget);
                GetCouncil();
            }
        }

        //Return since we have no target
        if (!UpdateVictim())
            return;

        //ArcingSmash_Timer
        if (ArcingSmash_Timer <= diff)
        {
            DoCastVictim( SPELL_ARCING_SMASH);
            ArcingSmash_Timer = 10000;
        }
        else ArcingSmash_Timer -= diff;

        //Whirlwind_Timer
        if (Whirlwind_Timer <= diff)
        {
            DoCastVictim( SPELL_WHIRLWIND);
            Whirlwind_Timer = 55000;
        }
        else Whirlwind_Timer -= diff;

        //MightyBlow_Timer
        if (MightyBlow_Timer <= diff)
        {
            DoCastVictim( SPELL_MIGHTY_BLOW);
            MightyBlow_Timer = 30000 + rand() % 10000;
        }
        else MightyBlow_Timer -= diff;

        //Entering Phase 2
        if (!Phase2 && (me->GetHealth() * 100 / me->GetMaxHealth()) < 50)
        {
            Phase2 = true;
            DoScriptText(SAY_ENRAGE, me);
			DoCast(me, SPELL_FLURRY);

            me->CastSpell(me, SPELL_DUAL_WIELD, true);
            me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
            me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY + 1, 0);
        }

        if (Phase2)
        {
			const CreatureInfo* cinfo = me->GetCreatureTemplate();
			me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg + ((cinfo->mindmg / 100) * 1)));
			me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg + ((cinfo->maxdmg / 100) * 1)));
			me->UpdateDamagePhysical(BASE_ATTACK);

            //Charging_Timer
            if (Charging_Timer <= diff)
            {
                Unit* pTarget = NULL;
                pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
                if (pTarget)
                {
                    AttackStart(pTarget);
                    DoCast(pTarget, SPELL_BERSERKER_C);
                }
                Charging_Timer = 20000;
            }
            else Charging_Timer -= diff;

            //Intimidating Roar
            if (Roar_Timer <= diff)
            {
                DoCast(me, SPELL_ROAR);
                Roar_Timer = 40000 + (rand() % 10000);
            }
            else Roar_Timer -= diff;
        }

        DoMeleeAttackIfReady();
    }
Esempio n. 6
0
    void UpdateAI(const uint32 diff)
    {
        //Only if not incombat check if the event is started
        if (!m_creature->isInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT))
        {
            Unit* target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MAULGAREVENT_TANK));

            if (target)
            {
                AttackStart(target);
                GetCouncil();
            }
        }

        //Return since we have no target
        if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
            return;

        //someone evaded!
        if (pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
            EnterEvadeMode();

        //ArcingSmash_Timer
        if (ArcingSmash_Timer < diff)
        {
            DoCast(m_creature->getVictim(), SPELL_ARCING_SMASH);
            ArcingSmash_Timer = 8000+rand()%4000;
        }else ArcingSmash_Timer -= diff;

        //Whirlwind_Timer
        if (Whirlwind_Timer < diff)
        {
            DoCast(m_creature->getVictim(), SPELL_WHIRLWIND);
            Whirlwind_Timer = 30000+rand()%10000;
        }else Whirlwind_Timer -= diff;

        //MightyBlow_Timer
        if (MightyBlow_Timer < diff)
        {
            DoCast(m_creature->getVictim(), SPELL_MIGHTY_BLOW);
            MightyBlow_Timer = 20000+rand()%15000;
        }else MightyBlow_Timer -= diff;

        //Entering Phase 2
        if (!Phase2 && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 50)
        {
            Phase2 = true;
            DoScriptText(SAY_ENRAGE, m_creature);
            DoCast(m_creature, SPELL_FLURRY);
        }

        if (Phase2)
        {
            //Charge_Timer
            if (Charge_Timer < diff)
            {
                if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
                    DoCast(target, SPELL_CHARGE);

                Charge_Timer = 14000 + rand()%6000;
            }else Charge_Timer -= diff;

            //MightyBlow_Timer
            if (Fear_Timer < diff)
            {
                DoCast(m_creature->getVictim(), SPELL_FEAR);
                Fear_Timer = 20000+rand()%15000;
            }else Fear_Timer -= diff;
        }

        DoMeleeAttackIfReady();
    }