예제 #1
0
    void Aggro(Unit *pWho)
    {
        if(!pInstance) return;
        if (pWho->GetTypeId() != TYPEID_PLAYER)
            return;

        Creature* pBlightTarget = m_creature->GetMap()->GetCreature(blightTargetGUID);

        pInstance->SetData(TYPE_FESTERGUT, IN_PROGRESS);
        DoScriptText(-1631203,m_creature,pWho);
        if (pBlightTarget && !pBlightTarget->isAlive())
            pBlightTarget->Respawn();
        if (pBlightTarget)
        {
            pBlightTarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
            pBlightTarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
            doRemove(SPELL_BLIGHT_VISUAL_1,pBlightTarget);
            doRemove(SPELL_BLIGHT_VISUAL_2,pBlightTarget);
            doRemove(SPELL_BLIGHT_VISUAL_3,pBlightTarget);
            doCast(SPELL_BLIGHT_VISUAL_1,pBlightTarget);
        }
        doCast(SPELL_GASEOUS_BLIGHT_1);
        doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
        doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
        doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
/*        for(uint8 i = 0; i < 3; ++i)
             if (pPuddleStalkerGUID[i])
                 doCast(SPELL_GASEOUS_SPIGOT, m_creature->GetMap()->GetCreature(pPuddleStalkerGUID[i]));
*/
    }
예제 #2
0
 void JustReachedHome()
 {
     if (!pInstance) return;
     pInstance->SetData(TYPE_FESTERGUT, FAIL);
     doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
     doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
     doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
     if (Creature* pBlightTarget = m_creature->GetMap()->GetCreature(blightTargetGUID))
     {
         doCast(SPELL_BLIGHT_VISUAL_1,pBlightTarget);
     }
 }
    void JustDied(Unit *killer)
    {
        if(!pInstance)
            return;

        pInstance->SetData(TYPE_LANATHEL, DONE);
        DoScriptText(-1631333,m_creature,killer);
        m_creature->SetUInt32Value(UNIT_FIELD_BYTES_0, 0);
        m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
        doRemoveFromAll(getSpellWithDifficulty(SPELL_ESSENCE_OF_BLOOD_QWEEN));
        doRemoveFromAll(SPELL_ESSENCE_OF_BLOOD_QWEEN_2);
        doRemoveFromAll(SPELL_PACT_OF_DARKFALLEN);
        doRemoveFromAll(SPELL_BLOOD_MIRROR);
        doRemoveFromAll(SPELL_BLOOD_MIRROR_MARK);
    }
예제 #4
0
    void JustDied(Unit *killer)
    {
        if (!pInstance) return;
        pInstance->SetData(TYPE_FESTERGUT, DONE);
        pInstance->SetData(TYPE_EVENT, 550);
        DoScriptText(-1631206,m_creature);
        Creature* pBlightTarget = m_creature->GetMap()->GetCreature(blightTargetGUID);
        doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
        doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
        doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
        if (pBlightTarget)
        {
            doCast(SPELL_BLIGHT_VISUAL_1,pBlightTarget);
        }
/*        for(uint8 i = 0; i < 3; ++i)
             if (pPuddleStalkerGUID[i])
             {
                 Creature* pTemp = m_creature->GetMap()->GetCreature(pPuddleStalkerGUID[i]);
                 if (pTemp) pTemp->ForcedDespawn();
                 pPuddleStalkerGUID[i] = NULL;
             }
*/
    }
예제 #5
0
    void UpdateAI(const uint32 diff)
    {

        if(!pInstance) return;

        if (!pet)
        {
            if (Creature* pGuard = pInstance->GetSingleCreatureFromStorage(NPC_STINKY))
                if (!pGuard->isAlive())
                {
                     pet = true;
                     if (pInstance->GetData(TYPE_STINKY) == NOT_STARTED)
                     {
                         DoScriptText(-1631209,m_creature);
                         pInstance->SetData(TYPE_STINKY,DONE);
                     }
                }
        }

        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;

        Creature* pBlightTarget = m_creature->GetMap()->GetCreature(blightTargetGUID);

        switch(getStage())
        {
            case 0:
                    if (timedQuery(SPELL_GASEOUS_BLIGHT_2, diff))
                        setStage(1);
                    break;
            case 1:
                    switch (urand(0,2))
                    {
                        case 0:  DoScriptText(-1631210,m_creature); break;
                        case 1:  DoScriptText(-1631211,m_creature); break;
                        case 2:  DoScriptText(-1631212,m_creature); break;
                    }
                    doCast(SPELL_INHALE_BLIGHT);
                    setStage(2);
                    break;
            case 2:
                    if (m_creature->IsNonMeleeSpellCasted(false)) return;
                    if (pBlightTarget)
                    {
                        doRemove(SPELL_GASEOUS_BLIGHT_1);
                        doRemove(SPELL_BLIGHT_VISUAL_1,pBlightTarget);
                        doRemove(SPELL_BLIGHT_VISUAL_1,m_creature);
                        doCast(SPELL_GASEOUS_BLIGHT_2);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
                    }
                    setStage(3);
                    break;
            case 3:
                    if (timedQuery(SPELL_GASEOUS_BLIGHT_3, diff))
                        setStage(4);
                    break;
            case 4:
                    switch (urand(0,2))
                    {
                        case 0:  DoScriptText(-1631210,m_creature); break;
                        case 1:  DoScriptText(-1631211,m_creature); break;
                        case 2:  DoScriptText(-1631212,m_creature); break;
                    }
                    doCast(SPELL_INHALE_BLIGHT);
                    setStage(5);
                    break;
            case 5:
                    if (m_creature->IsNonMeleeSpellCasted(false)) return;
                    if (pBlightTarget)
                    {
                        doRemove(SPELL_GASEOUS_BLIGHT_2);
                        doRemove(SPELL_BLIGHT_VISUAL_2,pBlightTarget);
                        doRemove(SPELL_BLIGHT_VISUAL_2,m_creature);
                        doCast(SPELL_GASEOUS_BLIGHT_3);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
                    }
                    setStage(6);
                    break;
            case 6:
                    if (timedQuery(SPELL_GASEOUS_BLIGHT_3, diff))
                        setStage(7);
                    break;
            case 7:
                    switch (urand(0,2))
                    {
                        case 0:  DoScriptText(-1631210,m_creature); break;
                        case 1:  DoScriptText(-1631211,m_creature); break;
                        case 2:  DoScriptText(-1631212,m_creature); break;
                    }
                    doCast(SPELL_INHALE_BLIGHT);
                    setStage(8);
                    break;
            case 8:
                    if (m_creature->IsNonMeleeSpellCasted(false)) return;
                    if (pBlightTarget)
                    {
                        doRemove(SPELL_GASEOUS_BLIGHT_3);
                        doRemove(SPELL_BLIGHT_VISUAL_3,pBlightTarget);
                        doRemove(SPELL_BLIGHT_VISUAL_3,m_creature);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
                    }
                    setStage(9);
                    break;
            case 9:
                    if (timedQuery(SPELL_PUNGENT_BLIGHT, diff))
                    {
                        DoScriptText(-1631208,m_creature);
                        doCast(SPELL_PUNGENT_BLIGHT);
                        setStage(10);
                    }
                    break;
            case 10:
                    if (m_creature->IsNonMeleeSpellCasted(false)) return;
                    if (pBlightTarget)
                    {
                        doCast(SPELL_BLIGHT_VISUAL_1,pBlightTarget);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_3);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_2);
                        doRemoveFromAll(SPELL_BLIGHT_VISUAL_1);
                    }
                    m_creature->RemoveAurasDueToSpell(SPELL_INHALED_BLIGHT);
                    setStage(0);
                    break;
        }


        timedCast(SPELL_GAS_SPORE, diff);

        timedCast(SPELL_GASTRIC_BLOAT, diff);

        if (timedQuery(SPELL_VILE_GAS, diff))
        {
                       float fPosX, fPosY, fPosZ;
                       m_creature->GetPosition(fPosX, fPosY, fPosZ);
                       m_creature->GetRandomPoint(fPosX, fPosY, fPosZ, 30.0f, fPosX, fPosY, fPosZ);
                       if (Unit* pTemp = doSummon(NPC_VILE_GAS_STALKER,fPosX, fPosY, fPosZ))
                            doCast(SPELL_VILE_GAS, pTemp);
                       DoScriptText(-1631213,m_creature);
        };

        if (timedQuery(SPELL_BERSERK, diff))
        {
            doCast(SPELL_BERSERK);
            DoScriptText(-1631207,m_creature);
        };

        DoMeleeAttackIfReady();
    }