AutoIt

11/17/2008 20:08 Jonskelib#1
Nabend zusammen,

ich wollte mal fragen, ob sich einer gut mit autoit auskennt.

und zwar hätte ich zwei fregen:

1. gibt es einen befehl bei autoit, de rmerkt, wenn das programm nicht mehr reagiert, also nix mehr macht? Und es dann von vorne neu startet? (Da mein angelbot öfter abbricht, und er natürlich wiieter angeln soll^^)

2. kann man 2 If schleifen zusammenfügen? also BEISPIEL:



PHP Code:
        $PixelSearch(540,613,540,6130xA9796A)
            
Sleep(500
        
Sleep (5000)
        
Send "{F3 down}" 
        
Sleep (500)
        
Send "{F3 up}" 
        
Sleep (1000
        
Send "{F4 down}" )
        
Sleep (500)
        
Send "{F4 up}" )
        
Sleep (1000)
        
$Fischblase PixelSearch 297 95 468 284 0xFCF8FC )
        If 
not @error then
        Sleep 
2600 )
        
Send("{F4 down}")
        
Sleep(500)
        
Send("{F4 up}")
        
ExitLoop
        
EndIf 
Das Programm soll nun erstmal dein erstenpixel finden, dann satrten und nun aufd den zweiten pixel warten bis er erscheint (Angelbot).
Das problem so ist, erstens: so findet er imemr wieder den ersten pixel ($PixelSearch(540,613,540,613, 0xA9796A)) und drückt daraufhin immer wieder f3 und f4... Also bricht in dem fall das angeln wieder ab. Es soll aber erstmal auf den zewiten pixel warten (fischblase) bevor er wieder neu von vorne beginnt und den ersten pixxel sucht...
warum ich es so kompliziert mache hat seine gründe^^ natürlich ginge es leichter, aber dann würde es nicht in meinem Kompletten script funktionieren (relog etc.)

Ich hoffe es kann mir einer meine fragen beantworten

danke schonmal im vorraus Gruß und schönen abend noch Jonske:mofo:

PS: groß und kleinschreibung und rechtschreibfehler inbegriffen :D:D:D:D:D
11/17/2008 23:27 MaToBe#2
mhh also so wie du das da schreibst kann das nicht klappen, weil das Script nicht wartet bis es die Fischblase gefunden hat.

ich mach jetzt nur die grobe, logischen Verbesserungen, da ich nicht mit AutoIT programmiere (also fast nie jedenfalls ;) ).

PHP Code:
  $PixelSearch(540,613,540,6130xA9796A)
            
Sleep(500
        
Sleep (5000)
        
Send "{F3 down}" 
        
Sleep (500)
        
Send "{F3 up}" 
        
Sleep (1000
        
Send "{F4 down}" )
        
Sleep (500)
        
Send "{F4 up}" 
soweit in Ordnung

PHP Code:
...
        
Send "{F4 up}" )
        
Sleep (1000)
        
$Fischblase PixelSearch 297 95 468 284 0xFCF8FC )
... 
Hier ist ein Fehler. Dein Script wirft die Angel aus, wartet 1 Sekunde und schaut dann, ob eine Fischblase da ist. Logischer weise ist sie das nicht, also macht sie im Else Teil

PHP Code:
...
        
Sleep (1000)
        
$Fischblase PixelSearch 297 95 468 284 0xFCF8FC )
        If 
not @error then
    
...
        EndIf 
weiter.

Du musst deshalb mit While-Schleifen arbeiten. Genauer gesagt mit einer Endlosschleife ( while 1 ), die so lange nach der Fischblase sucht, bis diese auftaucht. Vorher darf das Script nicht weiterlaufen.

Schau dir doch mal diesen Guide hier an: [Only registered and activated users can see links. Click Here To Register...]

MFG MaToBe
11/18/2008 06:48 Jonskelib#3
ich habe das Problem bereits schon bhoben, aber trotzdem danke nochmal!

habe jetzt noch eine viel wichtigere frage, ist es möglich, dass ich irgendwie dort reinschreiben kann, das wenn das programm nicht mehr reagiert (für ne gewisse zeit keine tasten/maus aktion mehr aussführt) das programm von anfang neu startet?
11/18/2008 08:18 Quade#4
Wenn du meinst dass dein Bot an ist, aber ein Fehler im Spiel die Fischblase nicht zeigt.. dann empfehle ich dir ne counter variable^^ ist i.wo im Forum erklärt..
11/18/2008 11:55 Jonskelib#5
Ja genau da smeinte ich! also das mein bot durch nen Fehler des spieles nicht mehr funktioniert, also die angel nicht mehr raus/rein packt, die fischblase nicht findet....
Im normalfall läuft mein bod wie ne eins, doch öfters pasiert es, dass weenn ich ihn über nacht laufen lasse, dass er dann morgens einfach nciht mehr angelt....
Am besten würde es sein, wenn sich der sript mit einer funktion wieder an anfang setz, also wieder von neuem startet (wenn halt fehler auftreten wie oben benannt).



Kann mir einwer vielleicht sagen, wo ich etwas über die "counter variable" finde? habe über die sufu nix gefunden-.-

Danke Gruß Jonaske:mofo:
11/18/2008 14:42 Computerfreek#6
Wie er schon richtig gesagt hat, mach nen Counter mit Rollback-Funktion rein, müsste iwo beschribeen sein.
11/18/2008 16:51 °Remus°#7
wie man mit timern umgeht wird hier relativ verständlich erklärt
[Only registered and activated users can see links. Click Here To Register...]

sollte in etwa so gehen

Code:
Global $TimerInit
Global $Timer
Global $Rollbacktime = 60000 ;ms = 1min

$TimerInit = TimerInit()
While 1
 $Fischblase = PixelSearch ( 297 , 95 , 468 , 284 , 0xFCF8FC )
        If not @error then
        Sleep ( 2600 )
        Send("{F4 down}")
        Sleep(500)
        Send("{F4 up}")
        ExitLoop
EndIf  
$Timer = int(TimerDiff($TimerInit))
If $Timer >= $Rollbacktime Then ExitLoop
WEnd
11/18/2008 17:59 banjo1#8
Achte nächstes mal auf die richtige Kategorie
*moved

Mfg
banjo1
11/19/2008 14:27 Atheuz#9
Quote:
Originally Posted by °Remus° View Post
wie man mit timern umgeht wird hier relativ verständlich erklärt
[Only registered and activated users can see links. Click Here To Register...]

sollte in etwa so gehen

Code:
Global $TimerInit
Global $Timer
Global $Rollbacktime = 60000 ;ms = 1min

$TimerInit = TimerInit()
While 1
 $Fischblase = PixelSearch ( 297 , 95 , 468 , 284 , 0xFCF8FC )
        If not @error then
        Sleep ( 2600 )
        Send("{F4 down}")
        Sleep(500)
        Send("{F4 up}")
        ExitLoop
EndIf  
$Timer = int(TimerDiff($TimerInit))
If $Timer >= $Rollbacktime Then ExitLoop
WEnd
Timer sind eine feine Sache, trotzdem sollte man imo darauf verzichten wenn es einfacher geht.

Das hier im dem Teil angeben wo keine Angelblase gefunden wird;
ie = ie+1;
if( ie >= 1000 )
neustart();


Das hier im Script angeben wo die Angelblase gefunden wird;
ie = 0;


Sobald die Angelblase nicht gefunden wird, sollte die Variable ie hochzählen und ab einen gewissen Fehler-Wert wird die Funktion neustart() ausgeführt um den bot nochmal zu starten.
11/19/2008 21:42 °Remus°#10
Quote:
Originally Posted by Atheuz View Post
Timer sind eine feine Sache, trotzdem sollte man imo darauf verzichten wenn es einfacher geht.

Das hier im dem Teil angeben wo keine Angelblase gefunden wird;
ie = ie+1;
if( ie >= 1000 )
neustart();


Das hier im Script angeben wo die Angelblase gefunden wird;
ie = 0;


Sobald die Angelblase nicht gefunden wird, sollte die Variable ie hochzählen und ab einen gewissen Fehler-Wert wird die Funktion neustart() ausgeführt um den bot nochmal zu starten.
hab ich am anfang auch so gemacht, aber timer sind einfach viel preziser als so nen simpler Counter,
und du hast vergessen zu erwähnen das der counter resetet werden sollte wenn die angelblase gefunden wurde sonst überspringt der bot das warten auf die angelblase nach nen paar minuten immer
11/20/2008 15:30 Atheuz#11
Quote:
Originally Posted by °Remus° View Post
hab ich am anfang auch so gemacht, aber timer sind einfach viel preziser als so nen simpler Counter,
und du hast vergessen zu erwähnen das der counter resetet werden sollte wenn die angelblase gefunden wurde sonst überspringt der bot das warten auf die angelblase nach nen paar minuten immer
Ich zitiere mich selbst.. :

Quote:
Das hier im Script angeben wo die Angelblase gefunden wird;
ie = 0;
[Only registered and activated users can see links. Click Here To Register...]

Natürlich ist ie = 1000 nicht 1000 Sekunden, dafür hast du aber bei der ausführung ein Script welches zur gleichen Laufzeit deine gewünschte Funktion aufruft. Ein Timer dagegen hat vorallem in Autoit eine minimale Abweichung die je nach Länger der Laufzeit Probleme verursachen wird.
11/20/2008 17:36 °Remus°#12
Quote:
Originally Posted by Atheuz View Post
Ich zitiere mich selbst.. :



[Only registered and activated users can see links. Click Here To Register...]

Natürlich ist ie = 1000 nicht 1000 Sekunden, dafür hast du aber bei der ausführung ein Script welches zur gleichen Laufzeit deine gewünschte Funktion aufruft. Ein Timer dagegen hat vorallem in Autoit eine minimale Abweichung die je nach Länger der Laufzeit Probleme verursachen wird.
hab ich übersehen sry,
ich hatte noch nie probleme mit timern und ich setzt die aber auch nicht so oft ein

der threadersteller scheint sich ja auch nicht mehr zu melden