Library Tactician Unusual Problem


#1

When I am playing the level, Library Tactician, for most of the level my code runs perfectly fine. Then towards the end, my archers randomly stop attacking and i get this error:

Line 54: TypeError: Statement Execution limit reached.

I did not modify more than I needed to in order to complete this level. Any ideas of whats wrong?


-------CODE SPOILERS -------------------------------------------------------------------------------------------------

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.

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 i in enemies:
if i.health > mostHealth:
bestTarget = i
mostHealth = bestTarget.health
# 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 dead 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 archers:
    commandArcher(i)

#2

UPDATE: The sample code causes the code to command the soilders to defend constantly, then they only need 1 command to do so, not every iteration which leads to the program thinking it is in an infinite loop for running so slow and bugging out. Suggestion to the Admins to fix that issue with the level, would make it much easier for newer people


#3

and this is all? There is no solve for this problem?