示例#1
0
        void UpdateAI(const uint32 diff) {
            /* No target to kill */
            if (!UpdateVictim())
                return;
            if (me->HasUnitState(UNIT_STAT_CASTING))
                return;

            events.Update(diff);

            if (uiPhase == PHASE_1 && !HealthAbovePct(50)) {
                uiPhase = PHASE_2;
                EnterPhase2();
            }

            uiPhase = PHASE_1;

            while (uint32 eventId = events.ExecuteEvent()) {
                switch (eventId) {
                    EnterPhase1();

                case EVENT_FIFTY_LASHING:
                    DoCast(me->getVictim(), SPELL_FIFTY_LASHING);
                    events.ScheduleEvent(EVENT_FIFTY_LASHING, 4000);
                    return;
                case EVENT_PLAGUE_OF_AGES:
                    if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
                        DoCast(target, SPELL_PLAGUE_OF_AGES);
                    events.ScheduleEvent(EVENT_PLAGUE_OF_AGES, 6000);
                    return;
                default:
                    break;
                }
            }
            DoMeleeAttackIfReady();
        }
示例#2
0
    void UpdateAI(const uint32 uiDiff)
    {
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;
        if (Phase2 == true)
        {
               //Arcane Blast
            if (ArcaneBlast_Timer < uiDiff)
            {     
                m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
                m_creature->CastSpell(m_creature,  m_bIsRegularMode ? SPELL_ARCANE_BLAST : H_SPELL_ARCANE_BLAST, true);
                ArcaneBlast_Timer = urand(25000, 30000);
            }else ArcaneBlast_Timer -= uiDiff;

            //Wrath Of Misery or Blizzard
            if (SpecialCast_Timer < uiDiff)
            {
                m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
                switch(urand(0, 1))
                {
                    case 0: 
                        DoCast(m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0),  m_bIsRegularMode ? SPELL_WRATH_OF_MISERY : H_SPELL_WRATH_OF_MISERY);
                    case 1: 
                        DoCast(m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0),  m_bIsRegularMode ? SPELL_BLIZZARD : H_SPELL_BLIZZARD);
                }
                SpecialCast_Timer = urand(10000, 15000);
            }else ArcaneBlast_Timer -= uiDiff;
            
            //Regual cast - frostbolt
            if (Cast_Timer < uiDiff && ArcaneBlast_Timer > uiDiff && SpecialCast_Timer > uiDiff)
            {
                DoCast(m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0),  m_bIsRegularMode ? SPELL_FROSTBOLT : H_SPELL_FROSTBOLT);
                Cast_Timer = 1000;
            }else Cast_Timer -= uiDiff;
            
            //Summon Minions (Heroic) 
            if (SummonMinion_Timer < uiDiff)
            {    
                if(m_bIsRegularMode)
                    return;

                uint8 SummonLoc = rand()%POS;
                if (Creature* pAdd1 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd1->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd2 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd2->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd3 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd3->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd4 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd4->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd5 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd5->AI()->AttackStart(m_creature->getVictim());
                SummonMinion_Timer = urand (15000,20000);
            }else SummonMinion_Timer -= uiDiff;

        }

        if (m_creature->getVictim() && Start_Check == 1)
        {
            EnterPhase1();
            DoCast(m_creature, SPELL_ARCANE_FIELD);
            Start_Check = 0;
        }
        
        //Phase 1 Waves spawn
        if (Handler_Spawn < uiDiff && Phase1 == true)
        {    
            Handler_Count ++;
            if(Handler_Count < 5)
            {
                uint8 SummonLoc = rand()%POS;
                m_creature->SummonCreature(NPC_CRYSTAL_HANDLER, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000);
                if (Creature* pAdd1 = m_creature->SummonCreature(NPC_HULKING_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd1->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd2 = m_creature->SummonCreature(NPC_RISEN_SHADOWCASTER, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd2->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd3 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd3->AI()->AttackStart(m_creature->getVictim());
                if (Creature* pAdd4 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000))
                    pAdd4->AI()->AttackStart(m_creature->getVictim());
                Handler_Spawn = 17500;
            }
            if(Handler_Count == 5)
            {            
                EnterPhase2();
                if (Creature* pTrigger = GetClosestCreatureWithEntry(m_creature, NPC_CRYSTAL_CHANNEL, 85.0f))
                    pTrigger->ForcedDespawn();
            }
        }else Handler_Spawn -= uiDiff;
    }