void UpdateAI(const uint32 diff) { if (me->isInCombat()) { //Supposed to be cast on nearest target if (FixateTimer <= diff) { CastFixate(); FixateTimer = 5000; if (!(rand()%16)) { DoScriptText(SUFF_SAY_AGGRO, me); } } else FixateTimer -= diff; } //Return since we have no target if (!UpdateVictim()) return; if (EnrageTimer <= diff) { DoCast(me, SPELL_ENRAGE); EnrageTimer = 60000; DoScriptText(SUFF_EMOTE_ENRAGE, me); } else EnrageTimer -= diff; if (SoulDrainTimer <= diff) { DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_SOUL_DRAIN); SoulDrainTimer = 60000; } else SoulDrainTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (m_creature->GetHealthPercent() <= 10.0f) { if (StatAuraGUID) { Unit* pUnit = NULL; pUnit = Unit::GetUnit((*m_creature), StatAuraGUID); if (pUnit) pUnit->RemoveAurasDueToSpell(AURA_OF_SUFFERING_ARMOR); } } if (m_creature->GetHealthPercent() <= 10.0f) { if (m_creature->getVictim()) m_creature->DeleteThreatList(); // Delete our threatlist if below 10% as we should no longer attack. return; } // Prevent overlapping yells if (AggroYellTimer) { if (AggroYellTimer <= diff) { DoScriptText(SUFF_SAY_AGGRO, m_creature); AggroYellTimer = 0; }else AggroYellTimer -= diff; } //Supposed to be cast on nearest target if (FixateTimer < diff) { CastFixate(); FixateTimer = 5000; }else FixateTimer -= diff; if (EnrageTimer < diff) { DoCastSpellIfCan(m_creature, SPELL_ENRAGE); DoScriptText(SUFF_EMOTE_ENRAGE, m_creature); EnrageTimer = 60000; }else EnrageTimer -= diff; if (SoulDrainTimer < diff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) DoCastSpellIfCan(target, SPELL_SOUL_DRAIN); SoulDrainTimer = 60000; }else SoulDrainTimer -= diff; DoMeleeAttackIfReady(); }