Komme nicht weiter..... Counter Zähler Imagesearch etc

10/23/2015 15:04 kaynewild#1
Ich hoffe ihr könnt mir hilfestellung geben! ich möchte bei folgendem code, dass die func _start nur 5 mal abläuft. wie zu sehen ist, ist es aneinanderkettung von imagesearch functions. die eine greift auf die anderen zu. darin besteht auch glaub ich mein problem, dass wenn ich von der func suche auf die nächste func zugreife (script), das script keinen wert bekommen hat, wie oft er schon ausgeführt wurde. quasi befindet er sich in einer endlosschleife? ich möchte, dass entweder die func suche "x" mal ausgeführt wird und dann eine andere func auffruft, oder er nach "x" minuten auf eine andere func zugreift.... ich grübel schon seit zwei tagen daran, hab es mit do und do not versucht, klassischer counter.... nix hat bislang funktioniert. entweder es bleibt eine endlosschleife oder ich habe errors drin.... ich freue mich von euch zu lesen und vielen dank im vorraus

Code:

    #include<ImageSearch.au3>
    $x = 0
    $y = 0
    $xd = @DesktopHeight
    $yd = @DesktopWidth
    HotKeySet("{ESC}", "Close")
    HotKeySet("s", "_Start")
    HotKeySet("p", "Pause")
    _Startup()
    Func _Startup()
       ToolTip("Startup",0,0)
       While 1
          Sleep(100)
          WEnd
       EndFunc
    Func Close()
       Exit
    EndFunc
    Func Pause()
       ToolTip("Pause",0,0)
       While 1
          Sleep(100)
       WEnd
    EndFunc
    Func _Start()
       ToolTip("",0,0)
       For $iZahler = 1 to 4
             _Suche()
            Next
             _Shop()
    EndFunc
    Func _Suche()
       While 1
          $Suche = _ImageSearch(@ScriptDir & "\Suche.png",1,$x,$y,25)
          If $Suche = 1 Then
             MouseClick("left",$x,$y,1,10)
             _Anwahl()
          EndIf
       WEnd
       EndFunc
    Func _Nichtsgefunden()
          $Nichtsgefunden = _ImageSearch(@ScriptDir & "\keine_suchergebnisse_ok.png",1,$x,$y,10)
          If $Nichtsgefunden = 1 Then
             MouseClick("left",$x,$y,1,25)
             _Start()
          EndIf
    EndFunc
    Func _Anwahl()
       While 1
          $Anwahl = _ImageSearch(@ScriptDir & "\tawoon3.png",1,$x,$y,25)
          If $Anwahl = 1 Then
             MouseClick("left",$x,$y,1,10)
             _Kaufen()
             Else
             _Nichtsgefunden()
          EndIf
       WEnd
    EndFunc
    Func _Kaufen()
       While 1
          $Sofortkauf = _ImageSearch(@ScriptDir & "\sofortkauf.png",1,$x,$y,10)
          If $Sofortkauf = 1 Then
             MouseClick("left",$x,$y,1,10)
             _Nachfrage()
          EndIf
       WEnd
    EndFunc
    Func _Nachfrage()
       While 1
          $Nachfrage = _ImageSearch(@ScriptDir & "\sofortkaufnachfrage_ok.png",1,$x,$y,10)
          If $Nachfrage = 1 Then
             Mouseclick("left",$x,$y,1,10)
             _AufTP()
          EndIf
       WEnd
    EndFunc
    Func _AufTP()
       While 1
          $AufTP = _ImageSearch(@ScriptDir & "\transferliste_verschieben.png",1,$x,$y,10)
          If $AufTP = 1 Then
             MouseClick("left",$x,$y,1,10)
             _Transfermarkt()
          EndIf
       WEnd
    EndFunc
    Func _Transfermarkt()
       While 1
          $Transfermarkt = _ImageSearch(@ScriptDir & "\transfermarkt.png",1,$x,$y,10)
          If $Transfermarkt = 1 Then
             MouseClick("left",$x,$y,1,10)
             _Start()
          EndIf
       WEnd
    EndFunc
    Func _Shop() 
       While 1
          $Shop = _ImageSearch(@ScriptDir & "\shop.png",1,$x,$y,10)
          If $Shop = 1 Then
             MouseClick("left",$x,$y,1,10)
             Sleep(5000)
             _Start()
          EndIf
       WEnd
       EndFunc
10/23/2015 16:58 Moneypulation#2
...
For $i = 1 To 4
Suche()
Next
...

Func Suche()
While 1
...
...
WEnd
EndFunc

Siehst du den Fehler?

Außerdem ist es hilfreich, wenn du zu Testzwecken sowas wie ConsoleWrite("Nichts gefunden" & @CRLF) schreibst. Dann weißt du auch direkt welche funktionen aufgerufen wurden
10/23/2015 17:50 kaynewild#3
ja er greift auf die while schleife zu und diese ist endlos... wie schreibe ich es denn um?
10/23/2015 17:57 warfley#4
Ich empfehle dir mal die Grundlagen des programmierens zu lernen, dann wüsstest du was eine for schleife ist
10/24/2015 10:43 kaynewild#5
danke für die empfehlung, ich werde dem nach kommen. allerdings komme ich immernoch nicht weiter.... kann mir nun jemand bei dem code helfen? nicht nur sagen, was ich alles zu lernen habe....
10/24/2015 11:12 alpines#6
Das Problem ist nicht das du dein Problem zu lösen hast sondern das du nicht erkennst das dir die elementarsten Sachen fehlen. Wenn du von alleine nicht darauf kommst eine For-Schleife zu nutzen oder eine Variable hochzählen zu lassen die dafür sorgt das man aus der While Schleife rausgeht wenn sie einen bestimmten Wert hat dann solltest du dir die Basics auch mal anschauen.
10/25/2015 20:02 kaynewild#7
ok vielen dank. habe nun versucht eine globale variable zu definieren um diese hochzu zählen. ergebnis ist, dass es einfach weiter läuft und nicht meine gewünschte funktion nach x malen hat.

wenn ich die endlosschleifen (while) aus allen meinen funcs rausnehme,
läuft der bot nicht, bzw führt er die erste func (suche) aus und bleibt
dann stehen. habe nun versucht eine globale vaiable zu definieren um sie
hochzählen zu lassen. das ergebnis ist, dass er dennoch weiter durch
läuft
zudem habe ich versucht weitere start funcs zu erstellen, dies hat mich
aber auch nicht weiter gebracht. Grundsätzlich habe ich den bot so
aufgebaut, dass er auf ein suchbtn klicken soll (parameter stelle ich im
spiel vorher ein), wenn er etwas findet, soll er dies anwählen, auf
sofortkaufen klicken, auf ok (nachfrage) klicken, auf transferliste
verschieben klicken und wieder zur start func gehen. da er aber zu 80%
nichts findet, ist in der anwahl func eine if else schleife, dass wenn
er das entsprechende btn nicht findet (nix gefunden) auf func nichts
gefunden klickt und wieder von vorne anfängt. da es aber in dem spiel
eine überwachung für zu viele anfragen in der std. gibt, möchte ich,
dass der bot nach x anfragen bzw durchläufen oder auch x minuten eine
andere func aufruft (shop). in diese func habe ich ein sleep eingebaut,
drt soll er verweilen und nach dem sleep, wieder x durchläufe oder x
minuten arbeiten. und dies halt immer so weiter.....

gibt es eine globale funktion, dass ein script x anzahl an minuten läuft?

hier nochmal der code, evtl habt ihr ja eine idee...