示例#1
0
 void EnterCombat(Unit *who)
 {
     if (!pInstance)
     {
         ERROR_INST_DATA(m_creature);
         return;
     }
 }
 void EnterCombat(Unit * /*who*/)
 {
     if (!pInstance)
     {
         ERROR_INST_DATA(me);
         return;
     }
 }
		void JustDied(Unit* /*Killer*/) {
			if (pInstance) {
				uint64 TerestianGUID = pInstance->GetData64(DATA_TERESTIAN);
				if (TerestianGUID) {
					Unit* Terestian = Unit::GetUnit((*me), TerestianGUID);
					if (Terestian && Terestian->isAlive())
						DoCast(Terestian, SPELL_BROKEN_PACT, true);
				}
			} else
				ERROR_INST_DATA(me);
		}
    void Aggro(Unit* pWho)
    {
        if (!m_pInstance)
        {
            ERROR_INST_DATA(m_creature);
            return;
        }

        Creature* pTerestian = ((Creature*)Unit::GetUnit(*m_creature, m_pInstance->GetData64(DATA_TERESTIAN)));
        if (pTerestian && (!pTerestian->SelectHostileTarget() && !pTerestian->getVictim()))
            pTerestian->AddThreat(pWho);
    }
示例#5
0
    void Aggro(Unit *who)
    {
        if(!pInstance)
        {
            ERROR_INST_DATA(m_creature);
            return;
        }

        Creature* Terestian = ((Creature*)Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_TERESTIAN)));
        if(Terestian && (!Terestian->SelectHostilTarget() && !Terestian->getVictim()))
            Terestian->AddThreat(who, 1.0f);
    }
    void EnterCombat(Unit *who)
    {
        if (!pInstance)
        {
            ERROR_INST_DATA(m_creature);
            return;
        }

        Creature* Terestian = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_TERESTIAN)));
        if (Terestian && !Terestian->getVictim())
            Terestian->AddThreat(who, 1.0f);
    }
    void Aggro(Unit* pWho)
    {
        if (Pet* pKilrek = m_creature->GetPet())
            pKilrek->SetInCombatWithZone();

        DoScriptText(SAY_AGGRO, m_creature);

        if (m_pInstance)
            m_pInstance->SetData(TYPE_TERESTIAN, IN_PROGRESS);
        else
            ERROR_INST_DATA(m_creature);
    }
    void EnterCombat(Unit* who)
    {
        DoScriptText(SAY_AGGRO, me);

        if(pInstance)
        {
            // Put Kil'rek in combat against our target so players don't skip him
            Creature* Kilrek = (Unit::GetCreature(*me, pInstance->GetData64(DATA_KILREK)));
            if(Kilrek && !Kilrek->getVictim())
                Kilrek->AddThreat(who, 1.0f);

            pInstance->SetData(DATA_TERESTIAN, IN_PROGRESS);
        }else ERROR_INST_DATA(me);
    }
 void JustDied(Unit* pKiller)
 {
     if (m_pInstance)
     {
         uint64 m_uiTerestianGUID = m_pInstance->GetData64(DATA_TERESTIAN);
         if (m_uiTerestianGUID)
         {
             Unit* pTerestian = Unit::GetUnit((*m_creature), m_uiTerestianGUID);
             if (pTerestian && pTerestian->isAlive())
                 DoCast(pTerestian, SPELL_BROKEN_PACT, true);
         }
     }
     else
         ERROR_INST_DATA(m_creature);
 }
	void JustDied(Unit* /*Killer*/)
	{
		me->TextEmote(EMOTE_KILREK_DIE, false);
		if (pInstance)
		{
			uint64 TerestianGUID = pInstance->GetData64(DATA_TERESTIAN);
			if (TerestianGUID)
			{
				Unit* Terestian = Unit::GetUnit((*me), TerestianGUID);
				if (Terestian && Terestian->IsAlive())
					DoCast(Terestian, SPELL_BROKEN_PACT, true);

				/*Resummon Kil'rek*/
				if (Creature* Terestian = me->FindNearestCreature(15688, 100.0f, true))
				{
					CAST_AI(boss_terestianAI, Terestian->AI())->ReSummonKilrek_Timer = 30000;
					CAST_AI(boss_terestianAI, Terestian->AI())->SummonedKilrek = true;
					CAST_AI(boss_terestianAI, Terestian->AI())->ReSummonedKilrek = false;
				}
			}
		}
		else ERROR_INST_DATA(me);
	}
    void UpdateAI(const uint32 diff)
    {
        if(!UpdateVictim())
            return;
        if(CheckKilrekTimer < diff)
        {

            CheckKilrekTimer = 5000;

            if(pInstance)
                uint64 KilrekGUID = pInstance->GetData64(DATA_KILREK);
            else ERROR_INST_DATA(me);

            Creature* Kilrek = (Unit::GetCreature(*me, pInstance->GetData64(DATA_KILREK)));
            if(SummonKilrek && Kilrek)
            {
                Kilrek->Respawn();
                if(Kilrek->AI())
                {
                    Kilrek->AI()->AttackStart(me->getVictim());
                    me->RemoveAurasDueToSpell(SPELL_BROKEN_PACT);
                }

                else DoCast(me, SPELL_SUMMON_IMP, true);
            }

            if(!Kilrek || !Kilrek->isDead())
            {
                DoCast(me, SPELL_SUMMON_IMP, true);
                CheckKilrekTimer = 40000;
            }
        }else CheckKilrekTimer -= diff;


        if(SacrificeTimer < diff)
        {
            Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1);
            if (target && target->isAlive())
            {
                DoCast(target, SPELL_SACRIFICE, true);
                Creature* Chains = me->SummonCreature(CREATURE_DEMONCHAINS, -11234.077148, -1698.314209, 179.237320, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 21000);

                if(Chains)
                {
                    CAST_AI(mob_demon_chainAI, Chains->AI())->SacrificeGUID = target->GetGUID();
                    Chains->CastSpell(Chains, SPELL_DEMON_CHAINS, true);
                    DoScriptText(RAND(SAY_SACRIFICE1,SAY_SACRIFICE2), me);
                    SacrificeTimer = 30000;
                }
            }
        }else SacrificeTimer -= diff;

        if(ShadowboltTimer < diff)
        {
            DoCast(SelectUnit(SELECT_TARGET_TOPAGGRO, 0), SPELL_SHADOW_BOLT);
            ShadowboltTimer = 10000;
        }else ShadowboltTimer -= diff;

        if(SummonTimer < diff)
        {
            if(!SummonedPortals)
            {
                for(uint8 i = 0; i < 2; ++i)
                {
                    Creature* Portal = me->SummonCreature(CREATURE_PORTAL, PortalLocations[i][0], PortalLocations[i][1], PORTAL_Z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
                    if(Portal)
                        PortalGUID[i] = Portal->GetGUID();
                }
                SummonedPortals = true;
                switch(rand()%2)
                {
                case 0: DoScriptText(SAY_SUMMON1, me); break;
                case 1: DoScriptText(SAY_SUMMON2, me); break;
                }
            }
            uint32 random = rand()%2;
            Creature* Imp = me->SummonCreature(CREATURE_FIENDISHIMP, PortalLocations[random][0], PortalLocations[random][1], PORTAL_Z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 15000);
            if(Imp)
            {
                Imp->AddThreat(me->getVictim(), 1.0f);
                Imp->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 1));
            }
            SummonTimer = 5000;
        }else SummonTimer -= diff;

        if(!Berserk)
        {
            if(BerserkTimer < diff)
            {
                DoCast(me, SPELL_BERSERK);
                Berserk = true;
            }else BerserkTimer -= diff;
        }

        DoMeleeAttackIfReady();
    }