Also so durch nachdenken komm ich nicht drauf wo es hängen könnte, es ist mE kein logischer Fehler sondern hat was mit dem GW client zu tun, vlcht wg lags oder anderen Hängern, hab manchmal Probs wenn ich große Dateien auspacke oder kopier, dann hängt Vista ganz böse bei mir.
Pack doch mal paar clevere ConsoleWrite rein und starts im Editor, es muss eine der Status Änderungen falsch sein oder fehlen. Btw in der transfer wieder in die main zu springen kann natürlich die lustigsten Nebeneffekte haben, weil Du da eine Rekursion baust, die vollkommen unvorhersehbar ist...
Zu Deinem Counter, hm also wenn alles fehlerfrei läuft und Du Mode 1 benutzt, dann müsste nach 5s er stehen bleiben, weil Du dann rennen durch das weitere "r" abbrichst !?
Was mir auch mal aufgefallen ist, dass er gaaanz selten keine links/rechts Drehung mehr annimmt, wenn man dann kurz r/r drückt gehts wieder, die li/re Tasten werden aber definitiv an GW geschickt, habs sowohl im Skript als auch im Winspector gesehen. Das ist natürlich fatal, wenn er sich gerade ausrichten will und drauf wartet, dass er den richtigen Zielwinkel erreicht. Ich bau da mal den Abbruch-Counter ein, weil lieber dreht er sich alle 100 runs einmal im Kreis als dass er total hängen bleibt...
mal das in InitDest einbaun...
Code:
; rotate view to destination
$cnt =0
Do
; transition via q2<->q3 by pseudo course angle
$curcou = _memoryread($memcourse,$hprocess,'float')
if (($angle > $pi/2) And ($curcou < $angle - $pi)) Then
$curcou = 2*$pi + $curcou
EndIf
if (($angle < -$pi/2) And ($curcou > $pi+$angle)) Then
$curcou = -2*$pi + $curcou
EndIf
; big delta -> stop running
if Abs($angle - $curcou) > $stoplvl Then
if $running = True Then
KeySend($ARmovkey)
$running = False
EndIf
EndIf
$accel = GetCourse(Abs($angle - $curcou))
; rotate
if $angle < $curcou Then
KeySend($TRmovkey, "down")
Sleep($accel)
KeySend($TRmovkey, "up")
if $debug_mov = True Then
ConsoleWrite(StringFormat("InitDest: %s %d %.4f %.0f\n",$TRmovkey ,$accel, $angle, $dist))
EndIf
Else
KeySend($TLmovkey, "down")
Sleep($accel)
KeySend($TLmovkey, "up")
if $debug_mov = True Then
ConsoleWrite(StringFormat("InitDest: %s %d %.4f %.0f\n",$TLmovkey ,$accel, $angle, $dist))
EndIf
EndIf
Sleep(100)
$cnt +=1
; check for death
if $dcheck And _memoryread($memdeath,$hprocess) = 1 Then
$isDead = True
Return
EndIf
; sometimes GW does not accept rotation keys, so just start movement and proceed with fingers crossed
Until (Abs($angle - $curcou) <0.1) Or ($cnt > 50)