Example #1
0
    void Aggro(Unit* pWho) override
    {
        if (Creature* pPrecious = m_creature->GetMap()->GetCreature(m_preciousGuid))
        {
            if (pPrecious->isAlive())
            {
                if (pWho)
                    pPrecious->AI()->AttackStart(pWho);
            }
        }

        if (pWho->getClass() == CLASS_HUNTER && (m_hunterGuid.IsEmpty() || m_hunterGuid == pWho->GetObjectGuid()))
        {
            m_hunterGuid = pWho->GetObjectGuid();
        }
        else
            DemonDespawn();
    }
Example #2
0
    void Aggro(Unit* pWho)
    {
        if (Creature* pPrecious = m_creature->GetMap()->GetCreature(m_preciousGuid))
        {
            if (pPrecious->isAlive())
            {
                if (pWho)
                    pPrecious->AI()->AttackStart(pWho);
            }
        }

        if (pWho->getClass() == CLASS_HUNTER && (m_hunterGuid.IsEmpty() || m_hunterGuid == pWho->GetObjectGuid())/*&& pWho->GetQuestStatus(QUEST_STAVE_OF_THE_ANCIENTS) == QUEST_STATUS_INCOMPLETE*/)
        {
            m_hunterGuid = pWho->GetObjectGuid();
        }
        else
            DemonDespawn();
    }
Example #3
0
    void UpdateAI(const uint32 uiDiff) override
    {
        if (m_uiDespawn_Timer < uiDiff)
        {
            if (m_creature->isAlive() && !m_creature->isInCombat())
                DemonDespawn(false);
        }
        else
            m_uiDespawn_Timer -= uiDiff;

        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
        {
            if (m_uiSplitCheck_Timer < uiDiff)
            {
                m_uiSplitCheck_Timer = 2500;
                if (Creature* pPrecious = m_creature->GetMap()->GetCreature(m_preciousGuid))
                {
                    if (pPrecious->isInCombat())
                        pPrecious->AI()->EnterEvadeMode();
                }
            }
            else
                m_uiSplitCheck_Timer -= uiDiff;

            return;
        }

        if (m_creature->getThreatManager().getThreatList().size() > 1)
        {
            DemonDespawn();
        }
        if (m_uiThreatCheck_Timer < uiDiff)
        {
            m_uiThreatCheck_Timer = 2000;
            if (Creature* pPrecious = m_creature->GetMap()->GetCreature(m_preciousGuid))
            {
                if (pPrecious->getThreatManager().getThreatList().size() > 1)
                    DemonDespawn();
            }
        }
        else
            m_uiThreatCheck_Timer -= uiDiff;

        if (m_uiTemptressKiss_Timer < uiDiff)
        {
            if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_TEMPTRESS_KISS) == CAST_OK)
                m_uiTemptressKiss_Timer = 45000;
        }
        else
            m_uiTemptressKiss_Timer -= uiDiff;

        if (m_uiLightingBolt_Timer < uiDiff)
        {
            if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_CHAIN_LIGHTNING) == CAST_OK)
                m_uiLightingBolt_Timer = urand(8000, 12000);
        }
        else
            m_uiLightingBolt_Timer -= uiDiff;

        DoMeleeAttackIfReady();
    }