Проблема с уровнем "Мрачная решимость" (JS) (Решено)


#1

Господа, может кто-нибудь помочь? Этот уровень очень жосткий, никак не могу его пройти, паладинок вечно убивают. Уже даже оптимизировал(как мог) функции командования соратниками и функцию по сбору монет крестьянами. Все напрасно.

Код на данный момент:

Summary
function lowestHealthPaladin() {
    var lowestHealth = 99999;
    var lowestFriend = null;
    var friends = hero.findFriends();
    for (var f = 0; f < friends.length; f++) {
        var friend = friends[f];
        if (friend.type != "paladin") {
            continue;
        }
        if (friend.health < lowestHealth && friend.health < friend.maxHealth) {
            lowestHealth = friend.health;
            lowestFriend = friend;
        }
    }
    return lowestFriend;
}
function commandPaladin(paladin) {
    var enemy = paladin.findNearestEnemy();
    var injurePaladin = lowestHealthPaladin();
    var position = {
            x: paladin.pos.x,
            y: paladin.pos.y
        };
    var castable = paladin.canCast("heal");
    if (enemy) {
        var warlock = hero.findNearest(hero.findByType("warlock"));
        if (paladin.health < paladin.maxHealth / 4) {
            hero.command(paladin, "shield");
        } else if (injurePaladin && castable) {
            hero.command(paladin, "cast", "heal", injurePaladin);
        } else if (warlock) {
            hero.command(paladin, "attack", warlock);
        } else {
            hero.command(paladin, "attack", enemy);
        }
    } else {
        hero.command(paladin, "move", position);
    }
}
function commandPeasant(peasant) {
    var coins = peasant.findItems();
    var coin = null;
    coin = findBestCoin(coins, peasant);
    if (coin && coin.pos.y > 41) {
        if (peasant.id == "Hector") {
            hero.command(peasant, "move", coin.pos);
        }
    } else if (coin && coin.pos.y < 41) {
        if (peasant.id == "Rose") {
            hero.command(peasant, "move", coin.pos);
        }
    }
    function findBestCoin(coins, friend) {
        var bestCoin = null;
        var bestValue = 0;
        for (var i = 0; i < coins.length; i++) {
            var coin = coins[i];
            var bestestCoin = valueOverDistance(coin);
            if (bestestCoin > bestValue) {
                bestCoin = coin;
                bestValue = bestestCoin;
            }
        }
        function valueOverDistance(coin) {
            return coin.value / friend.distanceTo(coin);
        }
        return bestCoin;
    }
}
function commandGriffin(griffin) {
    var enemy = griffin.findNearestEnemy();
    if (enemy) {
        var warlock = hero.findNearest(hero.findByType("warlock"));
        if (warlock) {
            hero.command(griffin, "attack", warlock);
        } else {
            hero.command(griffin, "attack", enemy);
        }
    }
}
function commandFriends() {
    var friends = hero.findFriends();
    for (var i = 0; i < friends.length; i++) {
        var friend = friends[i];
        if (friend.type == "peasant") {
            commandPeasant(friend);
        } else if (friend.type == "griffin-rider") {
            commandGriffin(friend);
        } else if (friend.type == "paladin") {
            commandPaladin(friend);
        }
    }
}
while (true) {
    commandFriends();
    if (hero.gold >= hero.costOf("griffin-rider")) {
        hero.summon("griffin-rider");
    }
}

#2

Решение нашлось на англоязычной части форума.

Не задавайте своим паладинам в качестве цели чернокнижников: при смерти одного(сопровождающейся взрывом с нехилым дамагом по области) тут же спаунится другой и в конце концов, враги просто задавят числом.

Вот так вот, ребятки