示例#1
0
        void UpdateAI(const uint32 diff)
        {
            if(!UpdateVictim())
                return;

            events.Update(diff);

            EncounterTime += diff;

            while(uint32 eventId = events.ExecuteEvent())
            {
                switch(eventId)
                {
                    case EVENT_HATEFUL:
                    {
                        if(Unit* StrikeTarget = GetHatefullStrikeTarget())
                            DoCast(StrikeTarget, RAID_MODE(SPELL_HATEFUL_STRIKE,H_SPELL_HATEFUL_STRIKE), true);

                        events.ScheduleEvent(EVENT_HATEFUL, 1200);
                        break;
                    }
                    case EVENT_BERSERK:
                        DoCast(me, SPELL_BERSERK, true);
                        DoScriptText(EMOTE_BERSERK, me);
                        events.ScheduleEvent(EVENT_SLIME, 2000);
                        break;
                    case EVENT_SLIME:
                        DoCast(me->getVictim(), SPELL_SLIME_BOLT);
                        events.ScheduleEvent(EVENT_SLIME, 2000);
                        break;
                }
            }

            if(!Enraged && HealthBelowPct(5))
            {
                DoCast(me, SPELL_FRENZY, true);
                DoScriptText(EMOTE_ENRAGE, me);
                Enraged = true;
            }

            DoMeleeAttackIfReady();
        }
示例#2
0
        void UpdateAI(const uint32 diff)
        {
            if (!UpdateVictim())
                return;

            events.Update(diff);

            EncounterTime += diff;

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch(eventId)
                {
                    case EVENT_HATEFUL:
                    {
                        //Cast Hateful strike on the player with the highest
                        //amount of HP within melee distance
                        //uint32 MostHP = 0;
                        //Unit* pMostHPTarget = NULL;
                        //uint32 counter = 1;
                        //std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
                        //++i;
                        //for (; i != me->getThreatManager().getThreatList().end(); ++i)
                        //{
                        //    Unit *pTarget = (*i)->getTarget();

                        //    if(!me->IsWithinMeleeRange(pTarget))
                        //        continue;

                        //    counter++;

                        //    if(counter > 3)
                        //        break;

                        //    if (pTarget->isAlive() && pTarget->GetHealth() > MostHP)
                        //    {
                        //        MostHP = pTarget->GetHealth();
                        //        pMostHPTarget = pTarget;
                        //    }
                        //}

                        //if (pMostHPTarget) pMostHPTarget = me->getVictim();
                        //if (pMostHPTarget)

                        if(Unit* StrikeTarget = GetHatefullStrikeTarget())
                            DoCast(StrikeTarget, RAID_MODE(SPELL_HATEFUL_STRIKE,H_SPELL_HATEFUL_STRIKE), true);

                        events.ScheduleEvent(EVENT_HATEFUL, 1200);
                        break;
                    }
                    case EVENT_BERSERK:
                        DoCast(me, SPELL_BERSERK, true);
                        DoScriptText(EMOTE_BERSERK, me);
                        events.ScheduleEvent(EVENT_SLIME, 2000);
                        break;
                    case EVENT_SLIME:
                        DoCast(me->getVictim(), SPELL_SLIME_BOLT);
                        events.ScheduleEvent(EVENT_SLIME, 2000);
                        break;
                }
            }

            if (!Enraged && HealthBelowPct(5))
            {
                DoCast(me, SPELL_FRENZY, true);
                DoScriptText(EMOTE_ENRAGE, me);
                Enraged = true;
            }

            DoMeleeAttackIfReady();
        }