void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return; //Sleep_Timer if (Sleep_Timer < diff) { if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0) ) DoCast(target,SPELL_SLEEP); Sleep_Timer = 8000 + rand()%7000; } else Sleep_Timer -= diff; //NoxiousBreath_Timer if (NoxiousBreath_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_NOXIOUSBREATH); NoxiousBreath_Timer = 14000 + rand()%6000; } else NoxiousBreath_Timer -= diff; //Tailsweep every 2 seconds if (TailSweep_Timer < diff) { if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0) ) DoCast(target,SPELL_TAILSWEEP); TailSweep_Timer = 2000; } else TailSweep_Timer -= diff; //MarkOfNature_Timer //if (MarkOfNature_Timer < diff) //{ // DoCast(m_creature->getVictim(),SPELL_MARKOFNATURE); // MarkOfNature_Timer = 45000; //}else MarkOfNature_Timer -= diff; //LightningWave_Timer if (LightningWave_Timer < diff) { //Cast LIGHTNINGWAVE on a Random target if( Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0) ) DoCast(target,SPELL_LIGHTNINGWAVE); LightningWave_Timer = 7000 + rand()%5000; } else LightningWave_Timer -= diff; //Summon Druids if ( (int) (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() +0.5) == 75) { if (SummonDruids1_Timer < diff) { // summon 10 druids Unit* target = NULL; for(int i = 0; i < 10;i++) { target = SelectUnit(SELECT_TARGET_RANDOM,0); SummonDruids(target); } SummonDruids1_Timer = 60000; } else SummonDruids1_Timer -= diff; } //Summon Druids if ( (int) (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() +0.5) == 50) { if (SummonDruids2_Timer < diff) { // summon 10 druids Unit* target = NULL; for(int i = 0; i < 10;i++) { target = SelectUnit(SELECT_TARGET_RANDOM,0); SummonDruids(target); } SummonDruids2_Timer = 60000; } else SummonDruids2_Timer -= diff; } //Summon Druids if ( (int) (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() +0.5) == 25) { if (SummonDruids3_Timer < diff) { // summon 10 druids Unit* target = NULL; for(int i = 0; i < 10;i++) { target = SelectUnit(SELECT_TARGET_RANDOM,0); SummonDruids(target); } SummonDruids3_Timer = 60000; } else SummonDruids3_Timer -= diff; } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { //Return since we have no target if (!m_creature->SelectHostilTarget()) return; //Check if we have a current target if( m_creature->getVictim() && m_creature->isAlive()) { //Sleep_Timer if (Sleep_Timer < diff) { //Cast DoCast(m_creature->getVictim(),SPELL_SLEEP); //16 seconds Sleep_Timer = 16000; }else Sleep_Timer -= diff; //NoxiousBreath_Timer if (NoxiousBreath_Timer < diff) { //Cast DoCast(m_creature->getVictim(),SPELL_NOXIOUSBREATH); //28 seconds until we should cast this agian NoxiousBreath_Timer = 28000; }else NoxiousBreath_Timer -= diff; //TailSweep_Timer if (TailSweep_Timer < diff) { //Cast DoCast(m_creature->getVictim(),SPELL_TAILSWEEP); //20 seconds until we should cast this agian TailSweep_Timer = 20000; }else TailSweep_Timer -= diff; // //MarkOfNature_Timer // if (MarkOfNature_Timer < diff) // { // //Cast // DoCast(m_creature->getVictim(),SPELL_MARKOFNATURE); // // //45 seconds until we should cast this agian // MarkOfNature_Timer = 45000; // }else MarkOfNature_Timer -= diff; //LightningWave_Timer if (LightningWave_Timer < diff) { //Cast LIGHTNINGWAVE on a Random target Unit* target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM,0); if (target)DoCast(target,SPELL_LIGHTNINGWAVE); //18 seconds until we should cast this agian LightningWave_Timer = 18000; }else LightningWave_Timer -= diff; //SummonDruids_Timer if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 26 ) { if (SummonDruids_Timer < diff) { // summon 6 druids every 45s SummonDruids(m_creature->getVictim()); SummonDruids(m_creature->getVictim()); SummonDruids(m_creature->getVictim()); SummonDruids(m_creature->getVictim()); SummonDruids(m_creature->getVictim()); SummonDruids(m_creature->getVictim()); //45 seconds until we should cast this agian SummonDruids_Timer = 45000; } else SummonDruids_Timer -= diff; } //If we are within range melee the target if( m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE)) { //Make sure our attack is ready and we arn't currently casting if( m_creature->isAttackReady() && !m_creature->m_currentSpell) { m_creature->AttackerStateUpdate(m_creature->getVictim()); m_creature->resetAttackTimer(); } } } }