So soll es ja sein:
MovePlayer schickt den player los; während er läuft, kann man jedoch was anderes anklicken.
Wenn man das tut, liefert MovePlayer 0 zurück, die Aktion wird abgebrochen.
Klickt man nichts anderes an, erreicht der player sein Ziel, MovePlayer liefert 1 zurück und erst dann wird das Verb abgefragt.
Dich irritiert wahrscheinlich, dass MovePlayer intern eine Schleife laufen hat und die if-Abfrage erst nach ein paar Sekunden entscheidet, ob sie wahr oder falsch ist.
Wenn sich in einer if-Bedingung mindestens eine Funktion befindet, wird mit der Verarbeitung solange pausiert, bis alle Funktionen ihre Werte zurückgeliefert haben und entschieden werden kann, ob wahr oder falsch herauskommt. Im Falle von MovePlayer dauert das halt ein bisschen.