Frage zu PixelSearch

  • Ich post erst mal den Code den der sagt am meisten aus:

    [autoit]


    Func _beispiel()
    Do
    ;----------------------------
    If $Irelewant = $egal Then ;|--> Der Teil ist ja erst mal fast egal,
    $auchegal ;|--> Weil der untere Teil soll ja verhindern, das dieser Teil ausgeübt werden kann,
    EndIf ;|--> in dem der zweite teil einfach mal so lange sleept bis der pixel weg ist
    ;----------------------------
    $cord = PixelSearch(651, 19, 659, 22, 0xCD3B3C) ; nach jeder do runder gucken ob der pixel da ist
    If Not @error Then ; wenn er da ist dann --->
    Do
    Sleep(1000) ; sleep, hmmm und muss jetzt hier noch mal pixelSearch rein?
    Until $cord = @error ; auf alle fälle wenn der pixel weg ist (bzw. der pixel mit der bestim. Frabe) solls normal weiter gehen
    EndIf ; und erst wieder stopen wenn der pixel da ist
    Until $blub = 999999

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>_beispiel

    [/autoit]


    Jo wie im code zu erkennen soll das script eine bestimmte sache machen, bis an einer bestimmten ein Pixel auftaucht ---> da solls dann so lange sleep´en bis der pixel wieder weg
    ist, und dan normal weiter machen. Jo und dan geht das ganze von vorne los. Aber falls der pixel nicht gefunden wurde solls einfach normal weiter machen.

    Hier noch mal nen par schrit folge beispiele:

    A ---> B ---> C---> (Test ob der Pixel da ist) ---->
    Wenn ja, dann sleep bisser weg ist, danach normal weiter --->D --->E usw.
    Wenn nein, dann normal weiter --->D --->E usw.

    Würde das so wie in meinen Code gehen oder was müsste ich noch verändern bzw. wie müsste das aussehen. Thx, im Voraus.

    PS: Nein, es soll kein "Bot" werden!


    mmfg. TheLol :thumbup:

    3 Mal editiert, zuletzt von TheLol (15. April 2008 um 16:45)

  • Moin,

    [autoit]


    Func _beispiel()
    Do
    ;----------------------------
    If $Irelewant = $egal Then ;|--> Der Teil ist ja erst mal fast egal,
    $auchegal ;|--> Weil der untere Teil soll ja verhindern, das dieser Teil ausgeübt werden kann,
    EndIf ;|--> in dem der zweite teil einfach mal so lange sleept bis der pixel weg ist
    ;----------------------------
    $cord = PixelSearch(651, 19, 659, 22, 0xCD3B3C) ; nach jeder do runder gucken ob der pixel da ist
    If Not @error Then
    Do
    Sleep(1000)
    $cord = PixelSearch(651, 19, 659, 22, 0xCD3B3C) ;Es muss noch mal geprüft werden ob der Pixel noch gefunden werden kann
    Until @error ;Wenn Fehler dann Do beenden und weiter gehts.
    EndIf
    Until $blub = 999999

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>_beispiel

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    • Offizieller Beitrag

    Hallo,

    oder etwas kürzer:


    [autoit]

    Func _beispiel()
    Do
    ;----------------------------
    If $Irelewant = $egal Then ;|--> Der Teil ist ja erst mal fast egal,
    $auchegal ;|--> Weil der untere Teil soll ja verhindern, das dieser Teil ausgeübt werden kann,
    EndIf ;|--> in dem der zweite teil einfach mal so lange sleept bis der pixel weg ist
    ;----------------------------
    Do
    $cord = PixelSearch(651, 19, 659, 22, 0xCD3B3C) ; nach jeder do runder gucken ob der pixel da ist
    If @error Then ExitLoop ; wenn er da ist dann --->
    Sleep(1000) ; sleep, hmmm und muss jetzt hier noch mal pixelSearch rein?
    Until 0 ; auf alle fälle wenn der pixel weg ist (bzw. der pixel mit der bestim. Frabe) solls normal weiter gehen
    Until $blub = 999999

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>_beispiel

    [/autoit]
  • :sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping:

    Wohl war, aber es ist noch früh am morgen und ich habe erst 0,5 l Kaffee drinne, da hatte ich noch keine Lust was zu optimieren ;)

    :sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping::sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping: :sleeping:

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • thx, für die preziesen Antworten. Und noch mal ein spezial Thx An McPoldy, wegen den guten Video Tutorials :D8o

  • Ich musses noch mal auf machen, weil es erkennt war den pixel aber erkennt nicht dasser wieder weg ist :wacko:

    Wisst ihr eine Lösung?

    [autoit]


    Global $x1 = 210 ; <---- ein test wert
    Global $y1 = 153 ; <---- ein test wert
    Global $x2 = 359 ; <---- ein test wert
    Global $y2 = 236 ; <---- ein test wert
    $GesuchteFarbe = 0x00FF00 ; <---- ein test wert
    $timer1a = TimerInit()
    $timer1b = TimerInit()
    $minAusLastZeit = 50 ; <---- ein test wert
    $BuffLadeZeit = 2000 ; <---- ein test wert
    $WarteZeitSlot1a = 10000 ; <---- ein test wert
    $WarteZeitSlot1b = 10000 ; <---- ein test wert
    $blub = 0
    $InSlot1a = 1 ; <---- ein test wert
    $InSlot1b = 1 ; <---- ein test wert
    Do
    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    If Not @error Then
    Do
    Sleep(1000)
    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    ToolTip ("farbe erkannt 1")
    Until $cord = @error
    EndIf
    If $InSlot1a = 1 Then
    Sleep($minAusLastZeit)
    If TimerDiff($timer1a) >= $WarteZeitSlot1b Then
    $timer1a = TimerInit()
    Sleep($BuffLadeZeit)
    Send('1')
    EndIf
    EndIf
    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    If Not @error Then
    Do
    Sleep(1000)
    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    ToolTip ("Farbe erkannt 2")
    Until $cord = @error
    EndIf
    If $InSlot1b = 1 Then
    Sleep($minAusLastZeit)
    If TimerDiff($timer1b) >= $WarteZeitSlot1b Then
    $timer1b = TimerInit()
    Sleep($BuffLadeZeit)
    Send('2')
    EndIf
    EndIf
    ;---
    Until $blub = 999999

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    wenn @error die Abbruchbendingung für die Until-Schleife sein soll, muss der letzte Befehl vor Until Pixelsearch sein! Jeder Befehl wirkt sich auf @error aus, Du fragst also immer das Ergebnis von ToolTip ab! Ausserdem wird die Bedingung Until $cord = @error nicht funktionieren, weil $cord immer ungleich @error ist und somit die Until-Schleife endlos läuft, einfach Until @error schreiben!

    Wenn Du den ToolTip unbedingt nach Pixelsearch ausgeben willst solltest Du mein oben geschriebenes Beispiel einbauen, damit funktioniert es immer!

    @edit:

    ersetze einfach:

    [autoit]

    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    If Not @error Then
    Do
    Sleep(1000)
    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    ToolTip ("Farbe erkannt X")
    Until $cord = @error
    EndIf

    [/autoit]

    durch:


    [autoit]

    Do
    $cord = PixelSearch($x1, $y1, $x2, $y2, $GesuchteFarbe)
    If @error Then ExitLoop
    ToolTip ("Farbe erkannt X")
    Sleep(1000)
    Until 0

    [/autoit]
  • €dit: hats sicher erledigt, thx
    _____
    Erledigt

    Einmal editiert, zuletzt von TheLol (15. April 2008 um 16:45)