1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Farberkennungs Klickbot

Dieses Thema im Forum "Support & Discussion" wurde erstellt von Kuja, 2. November 2017.

  1. Kuja

    Kuja New Member

    Registriert seit:
    2. November 2017
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo Leute...

    ich kenne mich mit AutoIt überhaupt nicht aus und bin meine bisherigen Ansätze mit einem Mouserecorder angegangen.
    Zwar geht es um ein Browsergame/App namens "BitHeroes". Zu diesem besagtem Spiel möchte ich gerne einen Bot schreiben, welcher automatisch für mich Raids durchläuft. Um dies zu bewerkstelligen braucht er 6 einfache Klicks bei Farberkennung.

    Bin mittlerweile bei
    Code (AutoIt):
    While 1
       $pixellila = PixelGetColor(2460, 663)
       $hexlila = "0x" & Hex($pixellila)
       If $hexlila = 0x83239B Then MouseClick("left"[, 2460, 663[, clicks = 1[, speed = 10]]] EndIf
    WEnd
    aber irgendwie klickt er nicht
     
    Zuletzt bearbeitet: 2. November 2017
  2. w33dt4k3r

    w33dt4k3r Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    55
    Zustimmungen:
    17
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    NRW
    moin,
    bitte benutze die Code Tags :)

    Leider kann ich nicht testen ob das bei deinem Spiel funktioniert, die Logik müsste aber stimmen.

    Ein linker Mausklick auf deine Koordinate funktioniert so:

    Code (AutoIt):
    mouseclick( "left", 2460, 663)
    Die [ ] stehen in der Autoit Doku für optionale Parameter, wenn du sie benutzten möchtest dann nur Komma getrennt und ohne '[' ']'.

    while 1 bedeutet das das Script nie damit aufhört zu klicken(Endlosschleife), im schlimmsten fall musst du deinen PC daher neustarten.

    Ich habe den Mausklick mal korrekt eingefügt und deinen code eingerückt.
    Code (AutoIt):
    HotKeySet("e", "_exit"); Hotkeysetzten => Wenn du auf 'e' drückst verlässt du schleife


    while 1
       $pixellila = pixelgetcolor ( 2460 , 663 )
       $hexlila = "0x" & hex($pixellila)
       If $hexlila = 0x83239B then
          mouseclick( "left" , 2460, 663);Linker mausklick auf deine Koordinate
       EndIf
       sleep(50); Ein kleiner Sleep => 50ms warten
    WEnd


    func _exit()
       exit
    EndFunc
     
    LG
     
    Zuletzt bearbeitet: 2. November 2017
    krusty gefällt das.
  3. Kuja

    Kuja New Member

    Registriert seit:
    2. November 2017
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Vielen Dank für die zügige Antwort,

    irgendwie scheint das Script dennoch nicht zu funktionieren... die Koordinaten hab ich aus dem "Mouserecorder" aber er klickt einfach nicht - zumindest tut sich im Browsergame nichts :/ Kann ich deinen Code nun so oft Wiederholen wie ich ihn brauche? Also einfach weitere Farben und Koordinaten unter einem anderen "$" zusammenfügen?

    bsp.:

    Code (AutoIt):
    HotKeySet("e", "_exit"); Hotkeysetzten => Wenn du auf 'e' drückst verlässt du schleife


    while 1
       $pixellila = pixelgetcolor ( 2460 , 663 )
       $hexlila = "0x" & hex($pixellila)
       If $hexlila = 0x83239B then
          mouseclick( "left" , 2460, 663);Linker mausklick auf deine Koordinate
       EndIf
       sleep(50); Ein kleiner Sleep => 50ms warten
    WEnd

    while 2
       $pixelorange = pixelgetcolor ( 2564 , 507 )
       $hexorange = "0x" & hex($pixelorange)
       if $hexorange = 0x2988F1 Then
          mouseclick ( "left" , 2564 , 507 )
       EndIf
       sleep (50)
    WEnd

    func _exit()
       exit
    EndFunc
     
     
  4. w33dt4k3r

    w33dt4k3r Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    55
    Zustimmungen:
    17
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    NRW
    Hallo,

    Ja aber das wäre sehr unschön, und so wie du das machst funktioniert das nicht.

    While 1 bedeuted While True. Der Code innerhalb der Whileschleife wird nur ausgeführt wenn die Bedingung Wahr ist(True).
    While 2 würde demnach vermutlich nicht funktionieren weil es von der Syntax her falsch ist.

    Das nichts passiert kann an 2 Dingen liegen.
    1. Deine If Bedingung trifft nicht zu (Falsche Farbe)
    2. Der Scite Editor meldet dir einen Fehler.

    Falls dieser Code bei dir einen Mausklick auslöst dann lieft der Fehler in deiner IF Bedingung.

    Code (AutoIt):
    HotKeySet("e", "_exit"); Hotkeysetzten => Wenn du auf 'e' drückst verlässt du schleife

    $i = 0
    while $i < 5
       mouseclick( "left" , 2460, 663);Linker mausklick auf deine Koordinate
       $i = $i +1
    WEnd


    func _exit()
       exit
    EndFunc
     
    LG
     
    krusty gefällt das.
  5. Kuja

    Kuja New Member

    Registriert seit:
    2. November 2017
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ok.. also dein Code funktioniert... Hab dann auch mal das "If" rausgenommen und es hat funktioniert, aber es hat nicht mehr aufgehört, obwohl die Farbe nicht mehr da war?
     
  6. w33dt4k3r

    w33dt4k3r Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    55
    Zustimmungen:
    17
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    NRW
    Super, dann wissen wir schon einmal wo hier der Fehler liegt.
    Ich habe dir ja bereits versucht zu erklären das es sich bei while um eine Kopfgesteuerte Schleife handelt.
    Das bedeutet das der Code innerhalb der While Schleife solange ausgeführt wird wie die Bedingung der Schleife zutrifft.
    Für manche Probleme benötigt man eine Endlosschleife, das bedeutet das die Schleife nie endet.
    Du hast in deinem Code eine endlosschleife, da deine Bedingung 1 ist (1 steht für True, True bedeutet Wahr und somit wird der Code immer ausgeführt)
    Da ich nicht genau verstanden habe wie oft du in die Whileschleife gehen möchtest, habe ich in meinem Beispiel eine Funktion eingefügt die die While Schleife verlässt sobald du die Taste 'e' auf deiner Tastatur drückst. Damit verhinderst du das du aufgrund der ständigen Klicks deinen PC neustarten musst.
    Es gibt noch andere Möglichkeiten eine Endlosschleife zu verlassen, diese werde ich hier aber nicht erläutern weil ich das Gefühl habe das dir die Basics fehlen.

    Hier habe eine eine einfache Erklärung einer While Schleife, zwar handelt es sich bei der Programmiersprache um C, aber das macht nichts.
    http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/008_c_kontrollstrukturen_008.htm

    LG
     
    krusty gefällt das.
  7. w33dt4k3r

    w33dt4k3r Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    55
    Zustimmungen:
    17
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    NRW
    Leider kann ich dir nicht dabei helfen die richtigen Farben anzuklicken da ich das Spiel nicht kenne.

    Hier wäre ein Beispielcode:
    Code (AutoIt):

    HotKeySet("e", "_exit"); Hotkeysetzten => Wenn du auf 'e' drückst verlässt du schleife


    $farbe1 = pixelgetcolor ( 111, 111)
    $farbe2 = pixelgetcolor ( 222, 222)
    $farbe3 = pixelgetcolor ( 333, 333)
    $farbe4 = pixelgetcolor ( 444, 444)
    $farbe5 = pixelgetcolor ( 555, 555)
    $farbe6 = pixelgetcolor ( 666, 666)


    while 1
       $farbe1 = pixelgetcolor ( 2460 , 663 )
       $hexFarbe1= "0x" & hex($farbe1)
       If $hexFarbe1 == 0x83239B then
         mouseclick( "left" , 2460, 663);Linker mausklick auf deine Koordinate
         ;2. Schleife wartet darauf das der 2. Pixel die passende Farbe hat
         while 1
            ;hier machst du genau das gleiche wie in der 1. schleife, nur das du deine Koordinate & die Pixelfarbe anpasst
           
         WEnd
       EndIf
       sleep(50); Ein kleiner Sleep => 50ms warten
    WEnd


    func _exit()
       exit
    EndFunc

     
    Außerdem ist das wichtig das du bei der IF Abfrage "==" benutzt und nicht "=".

    = ist ein Zuweisungsoperator, das heisst er fügt einer Variable einen Wert zu.
    Code (AutoIt):
    $test = 5 ; $test hat den Wert 5
    == ist ein Vergleichsoperator, == wird also benutzt um Werte zu vergleichen
    Code (AutoIt):
    if $test == 5 Then; Prüfen ob die Variable $test den Wert 5 hat
       MsgBox(0, "$Test hat den Wert 5", "")
    Else
       MsgBox(0, "$Test hat NICHT den Wert 5", "")
    EndIf
    Ich hoffe ich konnte dir das gut erklären.

    LG
     
    krusty gefällt das.
  8. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    27
    Zustimmungen:
    22
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Hallo Kuja und herzlich willkommen im Forum,

    wie du bereits erwähnt hast, bist du noch ziemlich neu auf dem Gebiet der Programmierung.
    Bevor du anfängst wild Code hin und her zu kopieren, rate ich dir einfach mal 2 oder 3 Tage lang die Grundlagen von AutoIT zu lernen. Sobald du grundlegendes kannst, können wir dir besser helfen.

    Sobald du If-Abfragen, Schleifen, Variablen und Funktionen kannst, kannst du richtig loslegen und wir können dich besser unterstützen.

    Wenn es sich nur um 6 Klicks handelt, dann könnte man auch einen Browser fernsteuern.
    Dann muss das Browserfenster auch nicht immer im Vordergrund sein.
     
    Zuletzt bearbeitet: 2. November 2017
    3HMonkey, SilverHazard und w33dt4k3r gefällt das.
  9. Kuja

    Kuja New Member

    Registriert seit:
    2. November 2017
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    @w33dt4k3r ich glaube das "==" war das problem... das hatte ich nicht gewusst. Ich glaube du hast mein Problem gelöst ^^ vielen Dank
     
  10. w33dt4k3r

    w33dt4k3r Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    55
    Zustimmungen:
    17
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    NRW
    Das freut mich!
    Wenn du dich bedanken möchtest dann gib mir doch einfach die "Best Answer" :)


    LG
     
  11. Kuja

    Kuja New Member

    Registriert seit:
    2. November 2017
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo w33dt4k3r,

    hab noch etwas rumprobiert und folgendes "gezaubert"
    Code (AutoIt):
    HotKeySet("e", "_exit"); Hotkeysetzten ==> Wenn du auf 'e' drückst verlässt du schleife



    while 1
       $pixelraid = pixelgetcolor ( 2460 , 663 )
       If $pixelraid == 10167171 then
          mouseclick( "left" , 2460, 663 )
          while 1
             $pixelherausforderung = pixelgetcolor (2564,507)
             if $pixelherausforderung == 15829033 Then
                mouseclick ( "left" , 2564, 507 )
                while 1
                   $pixelannehmen = pixelgetcolor (2432,731)
                   if $pixelannehmen == 10211358 Then
                      mouseclick ( "left" , 2432,731)
                      while 1
                         $pixelbestechen = pixelgetcolor (2515,578)
                         $pixelschliessen = pixelgetcolor (2225,620)
                         if $pixelbestechen = 10211358 Then
                            mouseclick ( "left" , 2515,578) Else
                            if $pixelschliessen == 10211358 Then
                               mouseclick ( "left", 2225,620)
                            EndIf
                         EndIf
                      WEnd
                   EndIf
                WEnd
             EndIf
          WEnd
       EndIf
    WEnd
       sleep(50)

    func _exit()
       exit
    EndFunc
    nun hab ich hierbei das Problemchen, dass das letzte IF nach dem Else nicht funktioniert
     
    Zuletzt bearbeitet: 4. November 2017
  12. Kuja

    Kuja New Member

    Registriert seit:
    2. November 2017
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Also ich hab noch etwas rumgebastelt und hab noch ein kleines Problemchen. Ich habe zwei "Else" Abfragen und wenn die Zutreffen soll das Script wieder von vorne beginnen.

    Code (AutoIt):
    HotKeySet("{ESC}", "_exit"); Hotkeysetzten ==> Wenn du auf 'e' drückst verlässt du schleife


    while 1
       $pixelraid = pixelgetcolor ( 2460 , 663 )
       If $pixelraid == 10167171 then
          mouseclick( "left" , 2460, 663 )
          while 1
             $pixelherausforderung = pixelgetcolor (2564,507)
             if $pixelherausforderung == 15829033 Then
                mouseclick ( "left" , 2564, 507 )
                while 1
                   $pixelannehmen = pixelgetcolor (2432,731)
                   if $pixelannehmen == 10211358 Then
                      mouseclick ( "left" , 2432,731)
                      while 1
                         $pixelbestechen = pixelgetcolor (2515,578)
                         $pixelschliessen = pixelgetcolor (2225,620)
                         if $pixelbestechen = 10211358 Then
                            mouseclick ( "left" , 2515,578)
                         Else
                            if $pixelschliessen == 10211358 Then
                               mouseclick ( "left", 2225,620) ; hier neu starten<<<<<<<<<<<<<
                               while 1
                                  $pixelbestechen = pixelgetcolor (2515,578)
                                  $pixelschliessen = pixelgetcolor (2225,620)
                                  if $pixelbestechen = 10211358 Then
                                     mouseclick ( "left" , 2515,578) ;
                                  Else
                                     if $pixelschliessen == 10211358 Then
                                     mouseclick ( "left", 2225,620); hier neu starten<<<<<<<<<<<<
                                        while 1
                                           $pixelschliessen = pixelgetcolor (2225,620)
                                           if $pixelschliessen = 10211358 Then
                                              mouseclick ( "left" , 2225 , 620 )
                                           EndIf
                                        WEnd
                                     EndIf
                                  EndIf
                               WEnd
                            EndIf
                         EndIf
                      WEnd
                   EndIf
                WEnd
             EndIf
          WEnd
       EndIf
       sleep(50)
    WEnd

    func _exit()
       exit
    EndFunc
     
  13. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    58
    Zustimmungen:
    34
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Hallo,

    auch nochmal von mir willkommen in unserer Community.
    Ich persönlich schließe mich der Meinung meiner Vorredner an dich erstmal mit den Grundlagen etc. zu beschäftigen. Evtl. entscheidest du dich dann sogar für eine andere Skript- oder Hochsprache. Vom Style her ist deine ebenbezogene Schachtelung nicht gerade das "Gelbe" vom Ei. Ich würde da eher mit States und Funktionen arbeiten oder sogar eventbasierend. Sauber und effizient würde sich das ganze in C# beispeilsweise umsetzen lassen. Wieschoo hat diesbezüglich sogar eine Library vorgehalten.
    Falls du Interesse hast : https://github.com/wieschoo/BotSuite

    Nichtsdestotrotz zu deiner Frage mit den "ELSE"-Zweigen. Packe deinen ganzen Code, der etwas abarbeitet in eine Funktion. Solltest du dann zu deinem ELSE kommen, rufst du recursiv die eigene Funktion wieder auf:

    Beispiel (geht natürlich so nicht, soll nur zur Veranschaulichung dienen):
    Code (AutoIt):


    meineFunktion(); //Erster Funktionsaufruf

    Func meineFunktion()
           if bedingung then
              machwascooles;
          if bedingung2 then
              machwasnochcooleres;
          else
          meineFunction();
     
    EndFunc;

     
    Es gibt auch (auch wenn ich AutoIt nicht beherrsche) einen guten Wiki hier : https://www.autoitscript.com/wiki/Recursion

    Bei deinem Code KÖNNTE (ungetestet) das dann so funktionieren. Ich wiederhole an der Stelle nochmal, dass ich von AutoIt keine Ahnung habe!! Also bitte nochmal gegenprüfen lassen :)

    Code (AutoIt):
    HotKeySet("{ESC}", "_exit"); Hotkeysetzten ==> Wenn du auf 'e' drückst verlässt du schleife

    meineFunktion()

    Func meineFunktion()
    while 1
       $pixelraid = pixelgetcolor ( 2460 , 663 )
       If $pixelraid == 10167171 then
          mouseclick( "left" , 2460, 663 )
          while 1
             $pixelherausforderung = pixelgetcolor (2564,507)
             if $pixelherausforderung == 15829033 Then
                mouseclick ( "left" , 2564, 507 )
                while 1
                   $pixelannehmen = pixelgetcolor (2432,731)
                   if $pixelannehmen == 10211358 Then
                      mouseclick ( "left" , 2432,731)
                      while 1
                         $pixelbestechen = pixelgetcolor (2515,578)
                         $pixelschliessen = pixelgetcolor (2225,620)
                         if $pixelbestechen = 10211358 Then
                            mouseclick ( "left" , 2515,578)
                         Else
                            if $pixelschliessen == 10211358 Then
                               mouseclick ( "left", 2225,620) ; hier neu starten<<<<<<<<<<<<<
                                meineFunktion(); // NEUSTART
                               while 1
                                  $pixelbestechen = pixelgetcolor (2515,578)
                                  $pixelschliessen = pixelgetcolor (2225,620)
                                  if $pixelbestechen = 10211358 Then
                                     mouseclick ( "left" , 2515,578) ;
                                  Else
                                     if $pixelschliessen == 10211358 Then
                                    mouseclick ( "left", 2225,620); hier neu starten<<<<<<<<<<<<
                                     meineFunktion(); // NEUSTART
                                        while 1
                                           $pixelschliessen = pixelgetcolor (2225,620)
                                           if $pixelschliessen = 10211358 Then
                                              mouseclick ( "left" , 2225 , 620 )
                                           EndIf
                                        WEnd
                                     EndIf
                                  EndIf
                               WEnd
                            EndIf
                         EndIf
                      WEnd
                   EndIf
                WEnd
             EndIf
          WEnd
       EndIf
       sleep(50)
    WEnd

    func _exit()
       exit
    EndFunc

     
     
    Zuletzt bearbeitet: 4. November 2017

Diese Seite empfehlen

Die Seite wird geladen...