// searches for one of 5 top threat targets from sisters' threat list, but not her main target
 Unit* GetNovaTarget()
 {
     if(Creature* Alythess = me->GetCreature(pInstance->GetData64(DATA_ALYTHESS)))
     {
         Unit* target = Alythess->AI()->SelectUnit(SELECT_TARGET_TOPAGGRO, urand(0,4), 300.0f, true, Alythess->getVictimGUID());
         if(target && target->isAlive())
             return target;
     }
     return NULL;
 }
 // searches for one of 5 top threat targets from sisters' threat list, but not her main target
 Unit* GetConflagTarget()
 {
     if(Creature* Sacrolash = me->GetCreature(pInstance->GetData64(DATA_SACROLASH)))
     {
         
         Unit* target = Sacrolash->AI()->SelectUnit(SELECT_TARGET_TOPAGGRO, urand(0,4), 300.0f, true, Sacrolash->getVictimGUID());
         if(target && target->isAlive())
             return target;
     }
     return NULL;
 }
    void EnterEvadeMode()
    {
        if (pInstance->GetData(DATA_SACROLASH) == DONE)
        {
            if(Unit* Sacrolash = me->GetUnit(pInstance->GetData64(DATA_SACROLASH)))
               Sacrolash->ToCreature()->Respawn();
            pInstance->SetData(DATA_SACROLASH, NOT_STARTED);
        }

        ScriptedAI::EnterEvadeMode();
    }
    void EnterEvadeMode()
    {
        if (pInstance->GetData(DATA_ALYTHESS) == DONE)
        {
            if(Unit* Alythess = me->GetUnit(pInstance->GetData64(DATA_ALYTHESS)))
                Alythess->ToCreature()->Respawn();
            pInstance->SetData(DATA_ALYTHESS, NOT_STARTED);
        }

        ScriptedAI::EnterEvadeMode();
    }
    void IsSummonedBy(Unit *pSummoner)
    {
        ForceSpellCast(SPELL_IMAGE_VISUAL, CAST_SELF, INTERRUPT_AND_CAST_INSTANTLY);
        DoZoneInCombat();

        //if (Unit *pTarget = SelectUnit(SELECT_TARGET_FARTHEST, urand(0, 4), 400, true))
        if(Creature* Alythess = me->GetCreature(pInstance->GetData64(DATA_ALYTHESS)))
        {
            if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0, 400, true, Alythess->getVictimGUID(), 10.0f))
                AttackStart(pTarget);
        }
    }
    uint32 IntroStep(uint32 step)
    {
        Creature* pSacrolash = me->GetCreature(pInstance->GetData64(DATA_SACROLASH));
        if (!pSacrolash)
            return 0;

        switch (step)
        {
            case 0:
                return 0;
            case 1:
                DoScriptText(YELL_INTRO_SAC_1, pSacrolash);
                return 1000;
            case 2:
                DoScriptText(YELL_INTRO_ALY_2, me);
                return 1000;
            case 3:
                DoScriptText(YELL_INTRO_SAC_3, pSacrolash);
                return 2000;
            case 4:
                DoScriptText(YELL_INTRO_ALY_4, me);
                return 1000;
            case 5:
                DoScriptText(YELL_INTRO_SAC_5, pSacrolash);
                return 2000;
            case 6:
                DoScriptText(YELL_INTRO_ALY_6, me);
                return 1000;
            case 7:
                DoScriptText(YELL_INTRO_SAC_7, pSacrolash);
                return 3000;
            case 8:
                DoScriptText(YELL_INTRO_ALY_8, me);
                return 3000;
            case 9:
                pInstance->SetData(DATA_EREDAR_TWINS_INTRO, DONE);
                return 900000;
            default:
                return 10000;
        }
    }
Example #7
0
	void UpdateAI(const uint32 diff)
	{
		if(!pInstance->instance->GetCreature(pInstance->GetData64(DATA_ZARITHRIAN))->isAlive())
			me->DisappearAndDie();

		if(!UpdateVictim())
			return;

		if(uiLavaAttackTimer <= diff)
		{
			DoCastVictim(pInstance->instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL ? SPELL_ONYX_LAVA_ATTACK_25 : SPELL_ONYX_LAVA_ATTACK);
			uiLavaAttackTimer = urand(2000, 5000);
		}else uiLavaAttackTimer -= diff;

		if(uiBlastNovaTimer <= diff)
		{
			DoCastVictim(pInstance->instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL ? SPELL_BLAST_NOVA_25 : SPELL_BLAST_NOVA);
			uiBlastNovaTimer = urand(8000, 10000);
		}else uiBlastNovaTimer -= diff;

		DoMeleeAttackIfReady();
	}
    void UpdateAI(const uint32 diff)
    {
                if(!pInstance)
                        return;

                ScriptedAI::UpdateAI(diff);

                UpdateTimer = pInstance->GetData(SPECHIAL_TIMER);

        if(UpdateTimer <= diff)
        {
                        switch(pInstance->GetData(PHASE_SPECHIAL))
                        {
                                case 39:
                                                DoScriptText(SAY_INTRO_LICHTKING_2, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 40);
                                                pInstance->SetData(SPECHIAL_TIMER, 24500);
                                break;

                                case 41:
                                                me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
                                                pInstance->SetData(PHASE_SPECHIAL, 42);
                                                pInstance->SetData(SPECHIAL_TIMER, 31500);
                                break;

                                case 42:
                                                me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
                                                DoScriptText(SAY_INTRO_LICHTKING_4, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 43);
                                                pInstance->SetData(SPECHIAL_TIMER, 70000);
                                break;

                                case 43:
                                                me->CastSpell(me,72262,false);
                                                pInstance->SetData(PHASE_SPECHIAL, 44);
                                                pInstance->SetData(SPECHIAL_TIMER, 12000);
                                break;

                                case 44:
                                                pInstance->SetData(PHASE_SPECHIAL, 45);
                                                pInstance->SetData(SPECHIAL_TIMER, 18000);
                                break;

                                case 45:
                                                pInstance->HandleGameObject(pInstance->GetData64(20), true);
                                                pInstance->SetData(PHASE_SPECHIAL, 46);
                                                pInstance->SetData(SPECHIAL_TIMER, 2500);
                                break;

                                case 46:
                                                DoScriptText(SAY_INTRO_LICHTKING_5, me);
                                                me->ForcedDespawn();
                                                pInstance->SetData(PHASE_SPECHIAL, 47);
                                                pInstance->SetData(SPECHIAL_TIMER, 15500);
                                break;
                        }
        }
                else
                {
                        UpdateTimer -= diff;
                        pInstance->SetData(SPECHIAL_TIMER, UpdateTimer);
                }
    }
    void UpdateAI(const uint32 diff)
    {
                if(!pInstance)
                        return;

                ScriptedAI::UpdateAI(diff);

                UpdateTimer = pInstance->GetData(SPECHIAL_TIMER);

        if(UpdateTimer <= diff)
        {
                        switch(pInstance->GetData(PHASE_SPECHIAL))
                        {
                                case 1:
                                        if(pInstance->GetData(PHASE_1)==0)
                                        {
                                                DoScriptText(SAY_INTRO_START, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 2);
                                                pInstance->SetData(SPECHIAL_TIMER, 70000);
                                        }
                                break;

                                case 2:
                                        if(pInstance->GetData(PHASE_1)==0)
                                        {
                                                DoScriptText(SAY_INTRO_BEGINN, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 3);
                                                pInstance->SetData(SPECHIAL_TIMER, 15000);
                                        }
                                break;

                                case 3:
                                        if(pInstance->GetData(PHASE_1)==0)
                                        {
                                                DoScriptText(SAY_INTRO_3, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 4);
                                                pInstance->SetData(SPECHIAL_TIMER, 15000);
                                        }
                                break;

                                case 4:
                                        if(pInstance->GetData(PHASE_1)==0)
                                        {
                                                Gormok = me->SummonCreature(NPC_GORMOK_IMPALER, 563.14f, 215.38f, 395.08f, 4.68f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
                                                Gormok->GetMotionMaster()->MovePoint(0, 563.74f, 173.53f, 394.32f);
                                                Gormok->SetReactState(REACT_PASSIVE);
                                                Gormok->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                                pInstance->SetData(PHASE_SPECHIAL, 5);
                                                pInstance->SetData(SPECHIAL_TIMER, 15000);
                                        }
                                break;

                                case 6:
                                        if(pInstance->GetData(PHASE_1)==0)
                                        {

                                                pInstance->SetData(PHASE_SPECHIAL, 7);
                                                pInstance->SetData(SPECHIAL_TIMER, 5000);
                                        }
                                break;

                                case 7:
                                        if(pInstance->GetData(PHASE_1)==0)
                                        {
                                                Creature* cre = Unit::GetCreature(*me, pInstance->GetData64(NPC_ANONSER));
                                                CAST_AI(npc_tcrus_announcerAI, cre->AI())->StartEvent();
                                                Gormok->SetReactState(REACT_AGGRESSIVE);
                                                Gormok->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                                pInstance->SetData(PHASE_SPECHIAL, 8);
                                                pInstance->SetData(SPECHIAL_TIMER, 6000);
                                        }
                                break;

                                case 8:
                                        if(pInstance->GetData(PHASE_1)==IN_PROGRESS)
                                        {
                                                pInstance->SetData(PHASE_SPECHIAL, 9);
                                                pInstance->SetData(SPECHIAL_TIMER, 500);
                                        }
                                        break;

                                case 9:
                                        if(pInstance->GetData(PHASE_2)==IN_PROGRESS)
                                        {
                                                DoScriptText(SAY_INTRO_DREADSCALE, me);
                                                Dreadscale = me->SummonCreature(NPC_DREADSCALE,562.354675, 215.781113, 395.087036, 4.725680,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
                                                Dreadscale->SetReactState(REACT_PASSIVE);
                                                Dreadscale->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                                Dreadscale->GetMotionMaster()->MovePoint(0, 563.74f, 173.53f, 394.32f);
                                                Acidmaw = me->SummonCreature(NPC_ACIDMAW,546.526184, 157.534195, 394.320557, 4.725680,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
                                                Acidmaw->SetVisibility(VISIBILITY_OFF);
                                                Acidmaw->SetReactState(REACT_PASSIVE);
                                                pInstance->SetData(PHASE_SPECHIAL, 10);
                                                pInstance->SetData(SPECHIAL_TIMER, 25000);
                                        }
                                break;

                                case 10:
                                        if(pInstance->GetData(PHASE_2)==IN_PROGRESS)
                                        {
                                                Acidmaw->SetVisibility(VISIBILITY_ON);
                                                Acidmaw->CastSpell(Acidmaw, 35177, false);
                                                Acidmaw->SetReactState(REACT_AGGRESSIVE);
                                                Dreadscale->SetReactState(REACT_AGGRESSIVE);
                                                Dreadscale->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                                pInstance->SetData(PHASE_SPECHIAL, 11);
                                                pInstance->SetData(SPECHIAL_TIMER, 5000);
                                        }
                                break;

                                case 11:
                                        if(pInstance->GetData(PHASE_3)==IN_PROGRESS)
                                        {
                                                IceHowl = me->SummonCreature(NPC_ICEHOWL, 563.14f, 215.38f, 395.08f, 4.68f, TEMPSUMMON_DEAD_DESPAWN, 600000);
                                                IceHowl->GetMotionMaster()->MovePoint(0, 563.74f, 173.53f, 394.32f);
                                                IceHowl->SetReactState(REACT_PASSIVE);
                                                IceHowl->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                                DoScriptText(SAY_INTRO_EISHEULER, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 12);
                                                pInstance->SetData(SPECHIAL_TIMER, 20000);
                                        }
                                break;

                                case 12:
                                        if(pInstance->GetData(PHASE_3)==IN_PROGRESS)
                                        {
                                                IceHowl->SetReactState(REACT_AGGRESSIVE);
                                                IceHowl->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                                pInstance->SetData(PHASE_SPECHIAL, 13);
                                                pInstance->SetData(SPECHIAL_TIMER, 500);
                                        }
                                break;

                                case 13:
                                        if(pInstance->GetData(PHASE_3)==DONE)
                                        {
                                                DoScriptText(-1999930, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 14);
                                                pInstance->SetData(SPECHIAL_TIMER, 500);
                                        }
                                break;

                                case 15:
                                        DoScriptText(SAY_JARAXXUS_INTRO_1, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 16);
                                        Fizzle = me->SummonCreature(NPC_FIZZLEBANG, 564.008057, 176.066330, 394.372772, 4.719572, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
                                        pInstance->SetData(SPECHIAL_TIMER, 500);
                                break;

                                case 29:
                                        DoScriptText(SAY_JARAXXUS_INTRO_7, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 30);
                                        pInstance->SetData(SPECHIAL_TIMER, 10000);
                                break;

                                case 30:
                                        if (Creature* pJaraxxus = GetClosestCreatureWithEntry(me, NPC_LORD_JARAXXUS, 100.0f))
                                        Jaraxxus = pJaraxxus;
                                        Jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
                                        Jaraxxus->SetReactState(REACT_AGGRESSIVE);
                                        pInstance->SetData(PHASE_SPECHIAL, 31);
                                        pInstance->SetData(SPECHIAL_TIMER, 5000);
                                break;

                                case 31:
                                        if(pInstance->GetData(PHASE_4)==IN_PROGRESS)
                                        {
                                                pInstance->SetData(PHASE_SPECHIAL, 32);
                                                pInstance->SetData(SPECHIAL_TIMER, 5000);
                                        }
                                break;

                                case 32:
                                        if(pInstance->GetData(PHASE_4)==DONE)
                                        {
                                                DoScriptText(SAY_JARAXXUS_OUTRO_1, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 33);
                                                pInstance->SetData(SPECHIAL_TIMER, 45500);
                                        }
                                break;

                                case 35:
                                        if(pInstance->GetData(PHASE_4)==DONE)
                                        {
                                                DoScriptText(SAY_JARAXXUS_OUTRO_4, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 36);
                                                pInstance->SetData(SPECHIAL_TIMER, 15500);
                                        }
                                break;

                                case 37:
                                                DoScriptText(SAY_INTRO_LICHTKING_1, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 38);
                                                pInstance->SetData(SPECHIAL_TIMER, 36000);
                                break;

                                case 38:
                                                Lichking = me->SummonCreature(NPC_LICH_KING, 564.008057, 176.066330, 394.372772, 4.719572);
                                                Lichking->GetMotionMaster()->MovePoint(0, 563.955444f, 140.563583f, 393.836548f);
                                                Lichking->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
                                                pInstance->SetData(PHASE_SPECHIAL, 39);
                                                pInstance->SetData(SPECHIAL_TIMER, 500);
                                break;

                                case 40:
                                                DoScriptText(SAY_INTRO_LICHTKING_3, me);
                                                pInstance->SetData(PHASE_SPECHIAL, 41);
                                                pInstance->SetData(SPECHIAL_TIMER, 10500);
                                break;

                                case 50:
                                if(pInstance->GetData(PHASE_5)==IN_PROGRESS)
                                {
                                        DoScriptText(SAY_INTRO_FACTION_HORDE_1, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 51);
                                        pInstance->SetData(SPECHIAL_TIMER, 25000);
                                }
                                break;

                                case 52:
                                        DoScriptText(SAY_INTRO_FACTION_HORDE_3, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 53);
                                        pInstance->SetData(SPECHIAL_TIMER, 25000);
                                break;

                                case 54:
                                if(pInstance->GetData(PHASE_5)==DONE)
                                {
                                        DoScriptText(SAY_OUTRO_FACTION, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 55);
                                        pInstance->SetData(SPECHIAL_TIMER, 25000);
                                }
                                break;

                                case 57:
                                        DoScriptText(SAY_INTRO_TWINS, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 58);
                                        pInstance->SetData(SPECHIAL_TIMER, 25000);
                                break;

                                case 58:
                                        DoScriptText(SAY_INTRO_BEGINN, me);
                                        pInstance->SetData(PHASE_SPECHIAL, 59);
                                        pInstance->SetData(SPECHIAL_TIMER, 25000);
                                break;
                        }
        }
                else
                {
                        UpdateTimer -= diff;
                        pInstance->SetData(SPECHIAL_TIMER, UpdateTimer);
                }
    }
    void StartEvent()
    {
                pInstance = (ScriptedInstance*)me->GetInstanceData();

        if(pInstance && pInstance->GetData(PHASE_1) == NOT_STARTED
                        && pInstance->GetData(PHASE_2) == NOT_STARTED
                        && pInstance->GetData(PHASE_3) == NOT_STARTED
                        && pInstance->GetData(PHASE_4) == NOT_STARTED
                        && pInstance->GetData(PHASE_5) == NOT_STARTED
                        && pInstance->GetData(PHASE_6) == NOT_STARTED
                        && pInstance->GetData(PHASE_7) == NOT_STARTED)
        {
                        pInstance->SetData(PHASE_1, IN_PROGRESS);
                }

        if(pInstance && pInstance->GetData(PHASE_1) == DONE
                        && pInstance->GetData(PHASE_2) == DONE
                        && pInstance->GetData(PHASE_3) == DONE
                        && pInstance->GetData(PHASE_4) == NOT_STARTED
                        && pInstance->GetData(PHASE_5) == NOT_STARTED
                        && pInstance->GetData(PHASE_6) == NOT_STARTED
                        && pInstance->GetData(PHASE_7) == NOT_STARTED)
                {
            pInstance->SetData(PHASE_4, IN_PROGRESS);
        }

        if(pInstance && pInstance->GetData(PHASE_1) == DONE
                        && pInstance->GetData(PHASE_2) == DONE
                        && pInstance->GetData(PHASE_3) == DONE
                        && pInstance->GetData(PHASE_4) == DONE
                        && pInstance->GetData(PHASE_5) == NOT_STARTED
                        && pInstance->GetData(PHASE_6) == NOT_STARTED
                        && pInstance->GetData(PHASE_7) == NOT_STARTED)
        {
                        pInstance->SetData(PHASE_5, IN_PROGRESS);
                        SummonChampions();
        }

        if(pInstance && pInstance->GetData(PHASE_1) == DONE
                        && pInstance->GetData(PHASE_2) == DONE
                        && pInstance->GetData(PHASE_3) == DONE
                        && pInstance->GetData(PHASE_4) == DONE
                        && pInstance->GetData(PHASE_5) == DONE
                        && pInstance->GetData(PHASE_6) == NOT_STARTED
                        && pInstance->GetData(PHASE_7) == NOT_STARTED)
        {
            Fjola = me->SummonCreature(NPC_FJOLA, 565.11, 260.0, 397.09+4, 4.72, TEMPSUMMON_MANUAL_DESPAWN, 0);
                        Fjola->SetFlying(true);
                        Fjola->GetMotionMaster()->MovePoint(0, 579.90f, 172.35f, 394.68f);

            Eydis = me->SummonCreature(NPC_EYDIS, 563.11, 260.0, 397.09+4, 4.72, TEMPSUMMON_MANUAL_DESPAWN, 0);
                        Eydis->SetFlying(true);
                        Eydis->GetMotionMaster()->MovePoint(0, 548.57f, 172.59f, 394.68f);
            pInstance->SetData(PHASE_6, IN_PROGRESS);
        }

        if(pInstance && pInstance->GetData(PHASE_1) == DONE
                        && pInstance->GetData(PHASE_2) == DONE
                        && pInstance->GetData(PHASE_3) == DONE
                        && pInstance->GetData(PHASE_4) == DONE
                        && pInstance->GetData(PHASE_5) == DONE
                        && pInstance->GetData(PHASE_6) == DONE
                        && pInstance->GetData(PHASE_7) == NOT_STARTED)
        {
                        pInstance->SetData(PHASE_7, IN_PROGRESS);
                        pInstance->HandleGameObject(pInstance->GetData64(20), true);
        }
    }