Господа, может кто-нибудь помочь? Этот уровень очень жосткий, никак не могу его пройти, паладинок вечно убивают. Уже даже оптимизировал(как мог) функции командования соратниками и функцию по сбору монет крестьянами. Все напрасно.
Код на данный момент:
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");
}
}