while (true) {
var enemy = hero.findNearestEnemy();
if (hero.isReady("cleave")) {
hero.cleave(enemy);
} else {
hero.attack(enemy);
}
}
Тут по логике герой должен давать cleave (независимо ни от чего), а если клив не готов - бить с руки врага. А когда ударит - цикл заново начинается. И по идеи нам не важно, есть ли враг поблизости, т.к. hero.findEnemy его полюбому найдет и запишет в переменную. Потом даст клив (если готов), иначе снова ударит с руки того, кто попал в переменную enemy. Но почему то эта логика не работает.