Пример #1
0
		void JustSummoned(Creature* summon)
		{
			summon->setActive(true);
			summon->AI()->DoZoneInCombat();

			if (GetPlayerAtMinimumRange(0))
				summon->Attack(GetPlayerAtMinimumRange(0), true);
		}
        void UpdateAI(const uint32 Diff)
        {
			if(!Intialized && !me->HasAura(SPELL_KNEELING_IN_SUPPLICATION))
			{
				events.ScheduleEvent(EVENT_FORCE_BLAST, 10000);
				events.ScheduleEvent(EVENT_GRAVITY_STRIKE, 22000);
				events.ScheduleEvent(EVENT_GRIEVOUS_WHIRL, 7000);
				events.ScheduleEvent(EVENT_SHADOW_STRIKE, 14000);

				Intialized = true;

				me->SetReactState(REACT_AGGRESSIVE);

				me->GetMotionMaster()->MoveChase(GetPlayerAtMinimumRange(1.0f));
				me->Attack(GetPlayerAtMinimumRange(1.0f), false);
			}

			if (!me->isInCombat() || me->HasAura(SPELL_TWILIGHT_EVOLUTION))
                return;

			while (uint32 eventId = events.ExecuteEvent())
			{
				switch (eventId)
				{
				case EVENT_FORCE_BLAST:
					if(Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 200, true))
						DoCast(pTarget,SPELL_FORCE_BLAST);

					events.ScheduleEvent(EVENT_FORCE_BLAST, 10000);
					break;
				case EVENT_GRAVITY_STRIKE:
					DoCastVictim(SPELL_GRAVITY_STRIKE);
					events.ScheduleEvent(EVENT_GRAVITY_STRIKE, 22000);
					break;
				case EVENT_GRIEVOUS_WHIRL:
					DoCastAOE(SPELL_GRIEVOUS_WHIRL);
					events.ScheduleEvent(EVENT_GRIEVOUS_WHIRL, 7000);
					break;
				case EVENT_SHADOW_STRIKE:
					DoCastVictim(SPELL_SHADOW_STRIKE);
					events.ScheduleEvent(EVENT_SHADOW_STRIKE, 14000);
					break;

				default:
					break;
				}
			}

            DoMeleeAttackIfReady();
        }
Пример #3
0
	void UpdateAI(const uint32 /*diff*/)
	{
		
		
		if(!me->HasAura(61974))
			me->AddAura(61974,me);
		else
		{
			pTarget = GetPlayerAtMinimumRange(13.0f); //BUG
			me->AddAura(63420,pTarget);
		
		}

	}
Пример #4
0
	void UpdateAI(const uint32 diff)
	{
        if(saytimer < diff)
	    {
            switch(step)
            {
                case 0:
					if(Player* pPlayer = GetPlayerAtMinimumRange(20.0f))
					{
                        m_uiPlayerGUID = pPlayer->GetGUID();
                        DoScriptText(SAY_NOZRONN1, m_creature);
                        saytimer += 5000;
                        step++;
					    break;
					} 
                    break;
                case 1:
                    DoScriptText(SAY_NOZRONN2, m_creature);
                    saytimer += 5000;
                    step++;
                    break;
                case 2:
                    DoScriptText(SAY_NOZRONN3, m_creature);
                    saytimer += 5000;
                    step++;
                    break;
                case 3:
                    DoScriptText(SAY_NOZRONN4, m_creature);
                    saytimer += 5000;
                    step++;
                    break;
                case 4:
                    if(Player* pPlayer = (Player*) m_creature->GetMap()->GetUnit(m_uiPlayerGUID))
                        if (pPlayer->GetQuestStatus(QUEST_BONES_OF_NOZRONN) == QUEST_STATUS_INCOMPLETE)
					    {
                            pPlayer->KilledMonsterCredit(28256, m_creature->GetGUID());
                            //pPlayer->CompleteQuest(QUEST_BONES_OF_NOZRONN);
                            DoScriptText(SAY_NOZRONN5, m_creature);
                            step++;
                            break;
                        }
                    break;
            }

	    } else saytimer -= diff;
	}
Пример #5
0
        void IsSummonedBy(Unit* summoner)
        {
            DoZoneInCombat();

            /*uint8 p = urand(0, me->GetMap()->GetPlayers().getSize());

            Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();

            if (!PlayerList.isEmpty())
            {
            for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
            {
            if(i == p)
            pTarget = i->getSource();
            }
            }*/

            me->GetMotionMaster()->MoveChase(GetPlayerAtMinimumRange(1.0f));

            me->SetReactState(REACT_PASSIVE);
        }
        void UpdateAI(const uint32 uiDiff)
        {
            if (!UpdateVictim())
                return;

            events.Update(uiDiff);

            if (me->HasUnitState(UNIT_STAT_CASTING))
                return;

            while (uint32 uiEventId = events.ExecuteEvent())
            {
                switch (uiEventId)
                {
                    case EVENT_SHADOW_CRASH:
                        if (Unit * pTarget = GetPlayerAtMinimumRange(15.0f))
                            DoCast(pTarget, SPELL_SHADOW_CRASH);
                        events.ScheduleEvent(EVENT_SHADOW_CRASH, urand(8000, 12000));
                        break;
                    case EVENT_SEARING_FLAMES:
                        DoCastAOE(SPELL_SEARING_FLAMES);
                        events.ScheduleEvent(EVENT_SEARING_FLAMES, urand(14000, 17500));
                        break;
                    case EVENT_MARK_OF_THE_FACELESS:
                        Unit* pTarget;
                        /*  He will not cast this on players within 15 yards of him.
                            However, if there are not at least 9 people outside of 15 yards
                            he will start casting it on players inside 15 yards melee and tank included.
                        */
                        if (!(pTarget = CheckPlayersInRange(RAID_MODE(4, 9), 15.0f, 50.f)))
                            pTarget = SelectTarget(SELECT_TARGET_RANDOM);
                        DoCast(pTarget, SPELL_MARK_OF_THE_FACELESS);
                        events.ScheduleEvent(EVENT_MARK_OF_THE_FACELESS, urand(35000, 45000));
                        break;
                    case EVENT_SURGE_OF_DARKNESS:
                        DoScriptText(EMOTE_SURGE_OF_DARKNESS, me);
                        DoScriptText(SAY_SURGE_OF_DARKNESS, me);
                        DoCast(me, SPELL_SURGE_OF_DARKNESS);
                        events.ScheduleEvent(EVENT_SURGE_OF_DARKNESS, urand(50000, 70000));
                        break;
                    case EVENT_SARONITE_VAPORS:
                        DoCast(SPELL_SUMMON_SARONITE_VAPORS);
                        events.ScheduleEvent(EVENT_SARONITE_VAPORS, urand(30000, 35000));

                        if (++uiVaporCount == 6 && bSmellSaronite)
                        {
                            DoScriptText(SAY_HARDMODE, me);
                            DoScriptText(EMOTE_BARRIER, me);
                            summons.DespawnAll();
                            DoCast(me, SPELL_SARONITE_BARRIER);
                            DoCast(SPELL_SUMMON_SARONITE_ANIMUS);
                            me->AddLootMode(LOOT_MODE_HARD_MODE_1);
                            events.CancelEvent(EVENT_SARONITE_VAPORS);
                            events.CancelEvent(EVENT_SEARING_FLAMES);
                        }
                        break;
                    case EVENT_BERSERK:
                        DoScriptText(SAY_BERSERK, me);
                        DoCast(me, SPELL_BERSERK);
                        break;
                }
            }

            DoMeleeAttackIfReady();
        }
Пример #7
0
 void UpdateAI(const uint32 diff)
 {
     if(Unit* target = GetPlayerAtMinimumRange(0))
         if (me->GetDistance(target) < 1.5f)
             DoCast(target,SPELL_WATERSPOUT_DOT, true);
 }
Пример #8
0
 void IsSummonedBy(Unit* summoner)
 {
     DoZoneInCombat();
     me->GetMotionMaster()->MoveChase(GetPlayerAtMinimumRange(1.0f));
     me->SetReactState(REACT_PASSIVE);
 }
Пример #9
0
        void UpdateAI(const uint32 diff)
        {
            if (!UpdateVictim() )
                return;

            if(!AnimusSummoned)
                if(uiSummonVarpor_Timer < diff)
                {
                    DoSummon(ENTRY_SARONIT_VARPOR,me,45.0f,30000,TEMPSUMMON_MANUAL_DESPAWN);
                    uiSummonVarpor_Timer = 30000;
                }else uiSummonVarpor_Timer -= diff;

            if(uiSurgeOfDarkness_Timer < diff)
            {
                if(!me->IsNonMeleeSpellCasted(false))
                {
                    DoCast(me,SPELL_SURGE_OF_DARKNESS);
                    DoScriptText(SAY_KITE,me);
                    uiSurgeOfDarkness_Timer = 63000;
                }
            }else uiSurgeOfDarkness_Timer -= diff;

            if(uiShadowCrash_Timer < diff)
            {
                if(!me->IsNonMeleeSpellCasted(false))
                {
                    
                    if(Unit* target = GetPlayerAtMinimumRange(15.0f))
                        DoCast(target,SPELL_SHADOW_CRASH,false);
                    else if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM,0,100,true))
                        DoCast(target,SPELL_SHADOW_CRASH,false);
                    uiShadowCrash_Timer = 10000;
                }
            }else uiShadowCrash_Timer -= diff;

            if(!AnimusSummoned || AnimusKilled)
                if(uiSearingFlames_Timer < diff)
                {
                    if(!me->IsNonMeleeSpellCasted(false))
                    {
                         me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false);
                         DoCast(SPELL_SEARING_FLAMES);
                         uiSearingFlames_Timer = urand(10000,15000);
                         ImmunityToReset = true;
                         uiResetImmunity_Timer = 2000;
                    }
                }else uiSearingFlames_Timer -= diff;

            if(ImmunityToReset)
                if(uiResetImmunity_Timer < diff)
                {
                    me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, true);
                    uiResetImmunity_Timer = 0;
                    ImmunityToReset = false;
                }else uiResetImmunity_Timer -= diff;

            if(uiMarkOfTheFaceless < diff)
            {
                if(!me->IsNonMeleeSpellCasted(false))
                {
                    if(Unit* target = CheckPlayersInRange(RAID_MODE(4,9), 15.0f, 50.f))
                        DoCast(target,SPELL_MARK_OF_THE_FACELESS,false);
                    else if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM,0,100,true))
                        DoCast(target,SPELL_MARK_OF_THE_FACELESS,false);

                    uiMarkOfTheFaceless = urand(15000,25000);
                }
            }else uiMarkOfTheFaceless -= diff;

            DoMeleeAttackIfReady();
        }