예제 #1
0
    void UpdateAI(const uint32 uiDiff)
    {
		if (m_uiIntroText == 1 || m_uiIntroText == 2 || 
			m_uiIntroText == 3 || m_uiIntroText == 4 ||
			m_uiIntroText == 5 || m_uiIntroText == 6)
			{
			if (m_uiIntroTextTimer < uiDiff)
            {
                switch(m_uiIntroText)
                {
                    case 1: DoScriptText(SAY_INTRO_2, me); break;
                    case 2: DoScriptText(SAY_INTRO_3, me); break;
					case 3: DoScriptText(SAY_INTRO_4, me); break;
					case 4: DoScriptText(SAY_INTRO_5, me); break;
					case 5: DoScriptText(SAY_INTRO_6, me); break;
					case 6: DoScriptText(SAY_INTRO_7, me); break;
                }
                m_uiIntroText++;
                m_uiIntroTextTimer = 10500;
            }
            else m_uiIntroTextTimer -= uiDiff;
        }

        if (!UpdateVictim())
            return;

		if (m_uiPhase == 1)
        {
			if (m_uiShadowBoltTimer < uiDiff)
            {
				Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
				DoCast(pTarget, SPELL_SHADOW_BOLT);
				m_uiShadowBoltTimer = urand(5000,10000);
            }
			else m_uiShadowBoltTimer -= uiDiff;

			if (m_uiDarkEmpoweredTimer < uiDiff)
            {
				DoScriptText(SAY_EMPOWERMENT, me);
				switch(rand() % 2)
				{
					case 0: AdherentList(me); break;
					case 1: FanaticList(me); break;
				}
				m_uiDarkEmpoweredTimer = urand(25000,30000);
            }
            else m_uiDarkEmpoweredTimer -= uiDiff;

			if (m_uiSummonWaveTimer < uiDiff)
			{
				for (uint8 i = 0; i < RAID_MODE(3,6,3,6); ++i)
				{
					me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), SpawnLoc[i][0], SpawnLoc [i][1], SpawnLoc[i][2],0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
				}
				m_uiSummonWaveTimer = 60000;
            }
            else m_uiSummonWaveTimer -= uiDiff;

			if (!me->HasAura(SPELL_MANA_BARRIER))
                DoCast(me, SPELL_MANA_BARRIER);
			if (!me->HasAura(SPELL_ROOT))
                DoCast(me, SPELL_ROOT);

			if (m_uiPhase == 1 || m_uiPhase == 2)
			{
			if (m_uiDominateMindTimer < uiDiff)
            {
				uint32 count = RAID_MODE(0,1,1,3);
                for (uint8 i = 1; i <= count; i++)
                {
					Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true);
					if (pTarget && !pTarget->isCharmed())
					{
						DoCast(pTarget, SPELL_DOMINATE_MIND);
					}
				}
				m_uiDominateMindTimer = urand(15000,30000);
            }
            else m_uiDominateMindTimer -= uiDiff;

			if (m_uiDeathandDecayTimer < uiDiff)
            {
				Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM);
				DoCast(pTarget, SPELL_DEATH_AND_DECAY);
				m_uiDeathandDecayTimer = urand(10000,12000);
            }
            else m_uiDeathandDecayTimer -= uiDiff;

			if (getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC || getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
			if (m_uiSummonWaveTimer < uiDiff)
            {
                for (uint8 i = 0; i < RAID_MODE(3,3,3,3); ++i)
				{
					me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), HeroicSpawnLoc[i][0], HeroicSpawnLoc [i][1], HeroicSpawnLoc[i][2],0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
				}
                m_uiSummonWaveTimer = 60000;
            }
            else m_uiSummonWaveTimer -= uiDiff;
		}

			if ((me->GetPower(POWER_MANA)*100 / me->GetMaxPower(POWER_MANA)) < 1)
			{
				DoScriptText(SAY_PHASE_2, me);
                m_uiPhase = 2;
            }
		}

		if (m_uiPhase == 2)
        {
            if (me->HasAura(SPELL_MANA_BARRIER))
                me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER);

			if (me->HasAura(SPELL_ROOT))
                me->RemoveAurasDueToSpell(SPELL_ROOT);

			if (m_uiFrostBoltTimer < uiDiff)
            {
				DoCast(me->getVictim(), SPELL_FROST_BOLT);
				m_uiFrostBoltTimer = urand(5000,10000);
            }
            else m_uiFrostBoltTimer -= uiDiff;

			if (m_uiFrostValleyTimer < uiDiff)
            {
				DoCastAOE(SPELL_FROST_BOLT_VALLEY);
				m_uiFrostValleyTimer = urand(30000,35000);
            }
            else m_uiFrostValleyTimer -= uiDiff;

			DoMeleeAttackIfReady();
		}
	}
예제 #2
0
    void UpdateAI(const uint32 uiDiff)
    {
        if (!UpdateVictim())
            return;

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

        if (m_uiIntroText == 1 || m_uiIntroText == 2 ||
            m_uiIntroText == 3 || m_uiIntroText == 4 ||
            m_uiIntroText == 5 || m_uiIntroText == 6)
        {
            if (m_uiIntroTextTimer < uiDiff)
            {
                switch(m_uiIntroText)
                {
                case 1: DoScriptText(SAY_INTRO_2, me); break;
                case 2: DoScriptText(SAY_INTRO_3, me); break;
                case 3: DoScriptText(SAY_INTRO_4, me); break;
                case 4: DoScriptText(SAY_INTRO_5, me); break;
                case 5: DoScriptText(SAY_INTRO_6, me); break;
                case 6: DoScriptText(SAY_INTRO_7, me); break;
                }
                m_uiIntroText++;
                m_uiIntroTextTimer = 10500;
            } else m_uiIntroTextTimer -= uiDiff;
        }

        if (m_uiResetTimer <= uiDiff)
        {
            if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 100)
                EnterEvadeMode();
            m_uiResetTimer = 5000;
        } else m_uiResetTimer -= uiDiff;

        if (m_uiBerserkTimer < uiDiff)
        {
            DoCast(me, SPELL_BERSERK);
            DoScriptText(SAY_BERSERK, me);
            m_uiBerserkTimer = 600000;
        } else m_uiBerserkTimer -= uiDiff;

        if (m_uiDeathandDecayTimer < uiDiff)
        {
            Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
            DoCast(pTarget, RAID_MODE(SPELL_DEATH_AND_DECAY_10_NORMAL,SPELL_DEATH_AND_DECAY_25_NORMAL,SPELL_DEATH_AND_DECAY_10_HEROIC,SPELL_DEATH_AND_DECAY_25_HEROIC));
            m_uiDeathandDecayTimer = 11000;
        } else m_uiDeathandDecayTimer -= uiDiff;

        if (m_uiDarkEmpoweredTimer < uiDiff)
        {
            DoScriptText(SAY_EMPOWERMENT, me);
            switch(rand() % 2)
            {
                case 0:
                    AdherentList(me);
                    break;
                case 1:
                    FanaticList(me);
                    break;
            }
            m_uiDarkEmpoweredTimer = 20000;
        } else m_uiDarkEmpoweredTimer -= uiDiff;

        if (m_uiDominateMindTimer < uiDiff)
        {
            uint32 count = RAID_MODE(0,1,1,3);
            for (uint8 i = 1; i <= count; i++)
            {
                Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
                if (pTarget && !pTarget->HasAura(71289))
                {
                    DoCast(pTarget, SPELL_DOMINATE_MIND);
                    DoScriptText(SAY_DOMINATE_MIND, me);
                }
            }
            m_uiDominateMindTimer = 12000;
        } else m_uiDominateMindTimer -= uiDiff;

        if (m_uiPhase == 1)
        {
            if (me->GetPower(POWER_MANA) == 100000)
            {
                me->MonsterTextEmote(EMOTE_MANA_BARRIER,NULL);
            }

            if (m_uiShadowBoltTimer < uiDiff)
            {
                Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
                DoCast(pTarget, RAID_MODE(SPELL_SHADOW_BOLT_10_NORMAL,SPELL_SHADOW_BOLT_25_NORMAL,SPELL_SHADOW_BOLT_10_HEROIC,SPELL_SHADOW_BOLT_25_HEROIC));
                m_uiShadowBoltTimer = 5000;
            } else m_uiShadowBoltTimer -= uiDiff;

            if (m_uiSummonWaveTimer < uiDiff)
            {
                if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL || getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC)
                {
                    RandomSpawn();
                }
                if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL || getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
                {
                    me->SummonCreature(NPC_CULT_FANATIC,-619.006,2158.104,50.848,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                    me->SummonCreature(NPC_CULT_ADHERENT,-598.697,2157.767,50.848,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                    me->SummonCreature(NPC_CULT_FANATIC,-577.992,2156.989,50.848,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                    me->SummonCreature(NPC_CULT_ADHERENT,-618.748,2266.648,50.849,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                    me->SummonCreature(NPC_CULT_FANATIC,-598.573,2266.870,50.849,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                    me->SummonCreature(NPC_CULT_ADHERENT,-578.360,2267.210,50.849,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                    me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), -555.643,2211.281,49.476,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                }
                m_uiSummonWaveTimer = 60000;
            } else m_uiSummonWaveTimer -= uiDiff;

            if ((me->GetPower(POWER_MANA)*100 / me->GetMaxPower(POWER_MANA)) < 1)
            {
                                me->MonsterTextEmote(EMOTE_MANA_BARRIER,NULL);
                DoScriptText(SAY_PHASE_2, me);
                DoResetThreat();
                m_uiPhase = 2;
            }
        }

        if (m_uiPhase == 2)
        {
                        if (me->HasAura(SPELL_MANA_BARRIER))
                                me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER);

            if (me->HasAura(SPELL_ROOT))
                me->RemoveAurasDueToSpell(SPELL_ROOT);

            if (m_uiFrostBoltTimer < uiDiff)
            {
                Unit* pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO,0);
                me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false);
                DoCast(pTarget, RAID_MODE(SPELL_FROST_BOLT_10_NORMAL,SPELL_FROST_BOLT_25_NORMAL,SPELL_FROST_BOLT_10_HEROIC,SPELL_FROST_BOLT_25_HEROIC));
                m_uiFrostBoltTimer = 5000;
            } else m_uiFrostBoltTimer -= uiDiff;

            if (m_uiFrostValleyTimer < uiDiff)
            {
                me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, true);
                DoCastAOE(RAID_MODE(SPELL_FROST_BOLT_VALLEY_10_NORMAL,SPELL_FROST_BOLT_VALLEY_25_NORMAL,SPELL_FROST_BOLT_VALLEY_10_HEROIC,SPELL_FROST_BOLT_VALLEY_25_HEROIC));
                m_uiFrostValleyTimer = 15000;
            } else m_uiFrostValleyTimer -= uiDiff;

            if (m_uiInsignificanceTimer < uiDiff)
            {
                Unit* pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO,0);
                DoCast(pTarget, SPELL_INSIGNIFICANCE);
                m_uiInsignificanceTimer = 30000;
            } else m_uiInsignificanceTimer -= uiDiff;

            if (m_uiSummonWaveTimer < uiDiff)
            {
                if (getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC)
                {
                    Unit* pSummoned= NULL;
                    me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), -555.643,2211.281,49.476,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000);
                }
                if (getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
                {
                    RandomSpawn();
                }
                m_uiSummonWaveTimer = 60000;
            } else m_uiSummonWaveTimer -= uiDiff;

            if (m_uiShadeTimer < uiDiff)
            {
                uint32 count = RAID_MODE(0,1,1,1);
                for (uint8 i = 1; i <= count; i++)
                {
                    Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
                    DoCast(pTarget, SPELL_SUMMON_SHADE);
                    m_uiShadeTimer = 15000;
                }
            } else m_uiShadeTimer -= uiDiff;

            DoMeleeAttackIfReady();
        }
    }