Library tactician

There aren’t any errors with the code, but not all the soldiers survive so I can’t pass the level

def commandSoldier(soldier, soldierIndex, numSoldiers):
    angle = Math.PI * 2 * soldierIndex / numSoldiers
    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.
def findStrongestTarget():
    mostHealth = 0
    bestTarget = None
    enemies = hero.findEnemies()
    # Figure out which enemy has the most health, and set bestTarget to be that enemy.
    for enemy in enemies:
        
        # Only focus archers' fire if there is a big ogre.
        if bestTarget and bestTarget.health > 15:
            return bestTarget
        else:
            return None


# If the strongestTarget has more than 15 health, attack that target. Otherwise, attack the nearest target.
def commandArcher(archer):
    nearest = archer.findNearestEnemy()
    if archerTarget:
        hero.command(archer, "attack", archerTarget)
    elif nearest:
        hero.command(archer, "attack", nearest)

archerTarget = None

while True:
    # If archerTarget is defeated or doesn't exist, find a new one.
    if not archerTarget or archerTarget.health <= 0:
        # Set archerTarget to be the target that is returned by findStrongestTarget()
        archerTarget = findStrongestTarget()
    
    friends = hero.findFriends()
    soldiers = hero.findByType("soldier")
    # Create a variable containing your archers.
    archers = hero.findByType("archer")
    for i in range(len(soldiers)):
        soldier = soldiers[i]
        commandSoldier(soldier, i, len(soldiers));
    # use commandArcher() to command your archers
    for i in range(len(archers)):
        archer = archers[i]
        commandSoldier(archer, i, len(archers));

In your commandSoldier function, try adding an iff statement that tests the current soldier’s current health. If it is too low, then have him defend Hushbaum, otherwise, defendPos. This will take them out of combat long enough for Hushbaum to heal them so they can return.

Your final statement is pointing to commandSoldiers, but your friends in this case are archers…you should change it to commandArchers…also, the final 2 arguments in that statement aren’t doing anything as the commandArcher function only accepts 1 arguement.