[SOLVED]Help With Library tactician JavaScript

change to

commandArcher(archer, i, archer.length);

I did it the way @JoPro_8000 did it so i think that is not the problem.

1 Like

I don’t think that does anything, its just the blue text that tells you what to do, but sure you guys are the teachers here :slight_smile:

teachers? no just coder(me)

Whatever, still fail, my soldiers attack the ogres and then die:

/// Hushbaum has been ambushed by ogres!
// She is busy healing her soldiers, you should command them to fight!
// The ogres will send more troops if they think they can get to Hushbaum or your archers, so keep them inside the circle!

// Soldiers spread out in a circle and defend.
function commandSoldier(soldier, soldierIndex, numSoldiers) {
    var angle = Math.PI * 2 * soldierIndex / numSoldiers;
    var defendPos = {
        x: 41,
        y: 40
    };
    defendPos.x += 10 * Math.cos(angle);
    defendPos.y += 10 * Math.sin(angle);
    hero.command(soldier, "defend", defendPos);
}

// Find the strongest target (most health)
// This function returns something! When you call the function, you will get some value back.
function findStrongestTarget() {
    var mostHealth = 0;
    var bestTarget = null;
    var enemies = hero.findEnemies();
    // Figure out which enemy has the most health, and set bestTarget to be that enemy.
    for(var i=0; i < enemies.length; i++) {
        if (enemies[i].health > mostHealth) {
            mostHealth = enemies[i].health;
            bestTarget = enemies[i];
        }
    }
    // Only focus archers fire if there is a big ogre.
    if (bestTarget && bestTarget.health > 15) {
        return bestTarget;
    } else {
        return null;
    }
}


// If the strongestTarget has more than 15 health, attack that target. Otherwise, attack the nearest target.
function commandArcher(archer) {
    var friends = hero.findFriends();
    for(var i=0; i < friends.length; i++) {
        if(friend.type == "archer"){
            var archerfindNearestEnemy = friend.distanceTo(enemy) < 15;
        }
    
        var nearest = archerfindNearestEnemy;
        if(archerTarget) {
            hero.command(archer, "attack", archerTarget);
        }   
        else if(nearest) {
        hero.command(archer, "attack", nearest);
        }
    }
}

var archerTarget = null;
while(true) {
    // If archerTarget is defeated or doesnt exist, find a new one.
    if(!archerTarget || archerTarget.health <= 0) {
        // Set archerTarget to be the target that is returned by findStrongestTarget()
        archerTarget = findStrongestTarget();
    }
    var friends = hero.findFriends();
    var soldiers = hero.findByType("soldier");
    // Create a variable containing your archers.
    var archers = hero.findByType("archers");
    for(var i=0; i < soldiers.length; i++) {
        var soldier = soldiers[i];
        commandSoldier(soldier, i, soldiers.length);
    }
    // use commandArcher() to command your archers
    for (var q=0; q < archers.length; q++){
        var archer = archers[q];
        commandArcher(archer, i, archer.length);
}
    
}

My mistake - change the q to i

add my solution to the function.It makes the soldiers heal

Change to

var nearest = archer.findNearestEnemy

What is your solution @Anonym?

one moment
(20 chars)

here:

function commandSoldier(soldier, soldierIndex, numSoldiers) {
    var angle = Math.PI * 2 * soldierIndex / numSoldiers;
    var defendPos = {
        x: 41,
        y: 40
    };
    defendPos.x += 10 * Math.cos(angle);
    defendPos.y += 10 * Math.sin(angle);
    if(soldier.health > 60) {
    hero.command(soldier, "defend", defendPos);
   }else {
    hero.command(soldier, "defend", {'x': 40, 'y': 42})
   }
}
sorry, I have to go to sleep). Have fun!

I also have to go to sleep, but thanks so much!

Welcome!When you will be back?

TYSM it worked! thank you all for helping me on this level!

Congratilations! :partying_face: :partying_face: :partying_face:.
And thanks a lot to @sci12, who helped me to improve my javascript)

Way to go! :balloon:

2 Likes

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