Play Home Contribute Github Join Us! Discourse Staff Members Github Contribution Guides Team

Misty Island Mine Level Help (JS)

Problem - I don’t know how to check if an item is not in excludedItems. I think everything else is fine but here is my code:

function findBestItem(friend, excludedItems) {
    var items = friend.findItems();
    var bestItem = null;
    var bestItemValue = 0;
    for(var i = 0; i < items.length; i++) {
        var item = items[i];
        // indexOf searches and array for a certain element:
        var idx = excludedItems.indexOf(item);
        // If the array doesn't contain it, it returns -1
        // In that case, skip over that item as another peasant is targeting it.
        if(idx != -1) { continue; }
        // Finish the function!
        // Remember bestItemValue should be the highest item.value / distanceTo
        if (!item in excludedItems) {
            if (bestItemValue < item.value / friend.distanceTo(item)) {
                bestItemValue = item.value / friend.distanceTo(item);
                bestItem = item;
            }  
        }
    }
    return bestItem;
}

// This function checks if you have enough gold for a decoy.
function enoughGoldForDecoy() {
    return hero.gold >= 25;
}

while(true) {
    var peasants = hero.findByType("peasant");
    // Create a new array every loop.
    var claimedItems = [];
    for(var i = 0; i < peasants.length; i++) {
        var peasant = peasants[i];
        var enemy = peasant.findNearestEnemy();
        if(enemy) {
            // If the peasant is the target of the enemy
            // AND the hero has enough gold for a decoy
            if (enemy.target == peasant && hero.gold > hero.costOf("decoy")) {
                // Command a peasant to build a "decoy":
                hero.command(peasant, "buildXY", "decoy", peasant.pos.x - 2, peasant.pos.y);
                // Add a continue so the peasant doesn't collect coins when building.
                continue;
            }
            
        }
        var item = findBestItem(peasant, claimedItems);
        if(item) {
            // After an item is claimed, stick it in the claimedItems array.
            claimedItems.push(item);
            // Command the peasant to collect the coin:
            hero.command(peasant, "move", item.pos);
        }
    }
}

Help would be most appreciated.

Oh I solved it. (20chars)

Hello, a question, I do not understand, what is the reason why people in the forum put '20chars’

1 Like

Because there is a character limit of 20 on public topics, and 10 on private messages, to prevent spam

3 Likes

This topic was automatically closed 12 hours after the last reply. New replies are no longer allowed.