loop:
enemy = self.findNearestEnemy()
if enemy: # First if
distance = self.distanceTo(enemy)
if distance < 5: # Second if
#cleave maybe
else: # this else corresponds to the second if
#attack
Let’s say there is an enemy. The first if
is true, so distance is now 4.5 (because I say so).
The second if
is now true aswell (because there is an enemy). You cleave the enemy, and he’s dead now.
The loop starts again. Because of your awesome cleave, all enemies are dead now. enemy
is now undefined
. The first if
becomes false
. distance
stays the same value as before, which is still 4.5
The second if
sees that 4.5 < 5
and enters. You now try to target an undefined
-enemy. This results in … I actually don’t know what this results in, most likely the result you saw. I thought this just throws an error…
But your code would still be problematic. Given you didn’t found an enemy, but somehow distance
is greater than 5. You then would enter the else
-path. What happens? You self.attack(undefined)
. Still strange behaviour.
Now comes the twist… I have no idea why the code runs through. This is most likely related to some kind of error-catching-mechanism, that catches the error silently and simply continues your code. Do you have by any chance a red circle with a white cross below your feet?
EDIT: I just tested your code… completly error-free. But as soon as I add a self.say(enemy)
after enemy = self.findNearestEnemy()
or a self.say(distance)
just before the second if
, I get
Say what?
That’s it, I ask @nick to explain.