Sie sind nicht angemeldet.

1

Donnerstag, 3. Juli 2008, 10:09

Allgemeines Anfänger Tutorial

Ich verweise hier mal auf das sehr Gute Tutorial von www.autoit.de.

Hier geht's lang...

Edit by Deathly Assassin
Dieses tutorial ist wesentlich Hilfreicher und noch dazu von dieser Seite (siehe 2er Post)
Signatur

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Deathly Assassin« (20. November 2009, 19:27)


Helfen Sie, die Vielfalt des Amazonas zu bewahren

2

Freitag, 4. Juli 2008, 17:08

Ich werd dein Tut mal weiter fortsetzen...

Um mithilfe dieses TuTs zu botten braucht ihr:
  • AutoIt
  • Einen Internetexplorer (Flash unterstützung)
  • Etwas Zeit
Also für den Anfang sind Flashgames am einfachsten (davon findet ihr reichlich bei google oder auf albinoblacksheep...
Ich nehme als Beispiel Curveball, denn das Spiel versteht glaub ich jeder, es hat kaum/keine Ladezeit und es ist einfach für den Anfang...

Schritt 1: Get Ready for Action
Also ihr startet das Spiel <Link>
Nun erstellt ihr ein neues AutoIt-Dokument...
Rechtsklick auf Desktop => Neu => AutoIt v3 Script

Ihr müsstet darin jetzt ungefähr sowas stehn haben:

AutoIt-QuellCode

1
2
3
4
5
6
7
8
9
10
11
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.2.12.1
 Author:     myName

 Script Function:
Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your autoit below here

Das könnt ihr alles löschen...
Als nächstes geht ihr in euren Autoitordner (z.B.: C:\Programme\AutoIt3) und öffnet Au3Info.exe
Dieses Tool zeigt uns alle Daten an die wird von einem Spiel brauchen (Namen, Farbautoits, Position...)
Jetzt können wir loslegen...

Schritt 2: Sammeln der Informationen
Um einen Bot zu machen müssen wir uns erstmal klar machen, was der Bot machen soll...
In unserem Fall ist es nicht schwer: Er soll die Maus automatisch dahinbewegen wo auch der Ball ist...
Der einfachste Befehl einen Bot zu programmieren ist der "PixelSearch" befehl...
Wie der Name schon sagt sucht der Befehl Pixel einer bestimmten Farbe. Euer Bildschirm ist in kleine Pixel aufgeteilt (Die Auflösung euers Bildschirms z.B.: 800x600 sagt euch wieviel Pixel ihr habt bei 800x600 wärn das 480000 Pixel), jeder dieser Pixel zeigt euch eine Farbe aus diesen vielen Farben ergbit sich nachher dann das gesamt wie z.B. diesre Smilie :cursing: wir sehn für ihn wurden hauptsächlich rote, weiße und ein paar schwarze Pixel für die Umrandung verwendet... Nun zurück zu Pixelsearch... Der Befehl ist wiefolgt aufgebaut:

AutoIt-QuellCode

1
PixelSearch( linke Begrenzung, obere Begrenzung, rechte Begrenzung, untere Begrenzung, Farbautoit, Farbautoitabweichung)

Pixelsearch sucht also aus einem eingegrenzten 4-eck einen bestimmten Pixel mit der Farbe... Die Begrenzung könnt ihr mit dem Tool "Au3Info.exe" herausbekommen...
Ihr habt beim Tool ein kleines Bild mit deinem Fadenkreuz. Das ist das Findertool.. Ihr geht mit der maus auf das Fadenkreuz und haltet die linke Maustate gedrückt... nun bewegt ihr das Fadenkreuz in die linke obere Ecke des Spielfensters und lasst los... Das Tool zeigt euch jetzt unter Position sowas wie 366, 245 an... das ist einmal die entfernung zum linken rand und einmal die entfernung zum oberen rand... dsa gleiche macht ihr noch mit der rechten unteren ecke (ihr solltet versuchen die Anzeigen nicht mit rein zu nehemn^^) Bei mir kommt 909, 626 raus... Wir runden alle Werte also kommt insgesamt 365, 245 und 910, 625 raus...

Nun können wir schon 4 der 6 Felder von Pixelsearch ausfüllen:

AutoIt-QuellCode

1
PixelSearch( 365, 245, 910, 625, Farbautoit, Farbautoitabweichung)

Den Farbautoit des Balls könnt ihr nun auch mit dem Findertool herausbekommen
Dazu geht ihr wieder mit der Maus auf das Fadenkreuz, drückt und haltet die linke Maustaste und zieht das Fadenkreuz auf den Ball (Falls ihr noch keinen Ball habt Startet das Spiel :)) Nun sind im Fenster wieder neue Werte... wir brauchen aba nur den Colorautoit.. macht ein doppelklick auf ihn und dann könnt ihr ihn mit Strg+V oder per Rechtsklick einfügen...

Jetzt haben wir alles bis auf die Farbautoitabweichung... die stell ich standartgemäß immer auf 15... ist halt damit er nicht nur genau diese eine Farbe sondern auch ähnliche Farben auswählt...
Unser autoit sieht nun so aus:

AutoIt-QuellCode

1
PixelSearch( 365, 245, 910, 625, 0xB6FFA4, 15)

Somit haben wir alle Informationen die wir braucehn...

Schritt 3: Das Programmieren
Nun geht es daran das der Bot auch wirklich was macht... Pixelsearch liefert uns jetzt also 2 Werte: Die X-Koorinate und die Y-Koordinate des Pixels...
Die müssen wir in eine Variabel Speichern... das sieht dann so aus:

AutoIt-QuellCode

1
$Ballposition = PixelSearch( 365, 245, 910, 625, 0xB6FFA4, 15)

Anstatt Ballposition kann man natürlich auch jeden andern Namen nehmen... man muss aba bei einen Namen bleiben^^
Jetzt wollen wir das die Maus zu diesem Punkt geht... dafür ist der Befehl "Mousemove" natürlich unsere erste Wahl^^
Also auch Mousemove hat wieder 3 Sachen die man Angeben kann:

AutoIt-QuellCode

1
MouseMove( X-Koordinate, Y-Koordinate, Geschwindigkeit)

Wir wollen das sich die Maus zu dem gefunden Pixel bewegt, also setzen wir die Variabel ein... Es gibt nun eine Besonderheit: Normalerweise kann in eine Variabel nur ein Wert.. wir haben jetzt aba 2... Aba es gibt auch sogenannte Arrays... wo mehrere Werte reinkönnen... und AutoIt hat aus der Variabel $Ballposition automatisch ein Array gemacht.. nun können wir aba nicht schreiben MouseMove($Ballposition, $Ballposition) sonder müssen auch sagen welchen Wert von den Werten er nehmen soll... das machen wir mit den Zahlen 1, 2, 3 usw... bei Array ist es aba so das wir mit 0 anfangen müssen d.h. 0, 1, 2, 3, 4... unsere Variabel sieht jetzt also für den ersten Wert (X-Koordinate) so aus: $Ballposition[0] und für den 2. Wert dann: $Ballposition[1]... Bei Geschwindigkeit haben wir die Wahl von einer Zahl zwischen 0 und 101 (also 1, 2...99, 100). 1 Ist hierbei das schnellste und 100 das langsamste... Wir wollen natürlich das sich die Maus schnell bewegt und nehmen deswegen 1...
Unser autoit sieht also nun so aus:

AutoIt-QuellCode

1
2
$Ballposition = PixelSearch( 365, 245, 910, 625, 0xB6FFA4, 15)
MouseMove( $Ballposition[0], $Ballposition[1], 1)


Nun kann es im moment aba bei diesem autoit zu Fehlern kommen, nämlich dann wenn er keinen Pixel mit der Farbe findet... dann soll die maus zu einer nicht gesetzen Koordinate sich bewegen und das macht AutoIt nicht mit... deswegen müssen wir das ganz so gestallten das sie das nur tut wenn die variabel gesetzt ist... Also benutzten wir eine IF-Funktion (zu deutsch:-Wenn-Funktion) mit der Bedingung IsArray($Ballposition) = True.. Also wird der Dann-Teil nur passieren wenn Ballposition ein Array ist, sprich mehrere Werte hat...
Der autoit sieht nun so aus:

AutoIt-QuellCode

1
2
3
4
$Ballposition = PixelSearch( 365, 245, 910, 625, 0xB6FFA4, 15)
if IsArray($Ballposition) = True Then
MouseMove( $Ballposition[0], $Ballposition[1], 1
EndIf

Jetzt haben wirs fast geschaft... aba: er macht das ganze nur einmal... wir wollen aba das er das durchgehend macht... also brauchen wir eine Schleife... dafür benutzen wir die While funktion: sie ermöglicht uns etwas solange zu tun wie eine Bedingung wahr ist...
Wir nehmen also folgenden autoit:

AutoIt-QuellCode

1
While true

ein true direkt hinterm while bedeutet er soll den while-teil immer machen... es gibt also keine bedingung.. (true kann auch durch 1 ersetzt werden)
unser gesamt autoit nun:

AutoIt-QuellCode

1
2
3
4
5
6
while True
$Ballposition = PixelSearch( 365, 245, 910, 625, 0xB6FFA4, 15)
if IsArray($Ballposition) = True Then
MouseMove( $Ballposition[0], $Ballposition[1], 1
EndIf
WEnd

Ihr könnt jetzt noch Hotkeys zum beenden hinzufügen... und euer erster Bot ist fertig... (den autoit gibts auch im Forum unter: Bots -> Flashbots)

MfG AMrK

EDIT: AutoItBot Wiki Tut
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »AMrK« (14. Februar 2009, 15:19)


3

Freitag, 4. Juli 2008, 17:56

ROAAHHEE


LEVEL 7 RAUSGEFOLGEN WEGEN DIR :cursing: :cursing: :cursing: :cursing: :cursing:
:D :D :D :D :D :D :P 8) :D


Guter Bot trotzdem.
Und gutes tut auch noch xD
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

4

Freitag, 4. Juli 2008, 18:37

jo thy^^ bei mir geht er in lvl 7 auch immer down^^ liegt daran das der ball zu schnell wird^^
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

5

Samstag, 5. Juli 2008, 10:58

ha

bin bis lvl 9 gekommen xD da hält er dann aber keinen einzigen ball mehr xD
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

6

Samstag, 5. Juli 2008, 11:03

zeig ma deinen code plz^^ will wissen wie du das gemacht hast :)
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

7

Samstag, 5. Juli 2008, 11:21

hab eigentlich dienen genommen :D

Hab halt nochn paar Sachen verändert. aber seit der letzten änderung geht er i-wie netmehr. Wollte reinbaun das man manuell immer den Pixelsearch-Berecih festlegen kann mti der maus aber i- wie bekomme ich denhier:
(29) : ==> Variable used without being declared.:
$Ballposition = PixelSearch($ObenL[0], $ObenL[1], $UntenR[0],$UntenR[1], 0xB6FFA4, 15)
$Ballposition = PixelSearch(^ ERROR

hier der code:

AutoIt-QuellCode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
HotKeySet("!e","_Ende")
HotKeySet("!s","_Start")
HotKeySet("!1","_ObenL")
HotKeySet("!2","_UntenR")
HotKeySet("!p","_Pause")


Do
Sleep(100)
Until ""

Dim $ObenL, $UntenR,

Func _ObenL()
$ObenL = MouseGetPos()
EndFunc
Func _UntenR()
$UntenR = MouseGetPos()
EndFunc



Func _Start()

while True
$Ballposition = PixelSearch($ObenL[0], $ObenL[1], $UntenR[0],$UntenR[1], 0xB6FFA4, 15)
if IsArray($Ballposition) = True Then
MouseMove( $Ballposition[0], $Ballposition[1], 1)
EndIf 
WEnd
Endfunc
Func _Pause()
Do
Sleep(100)
Until ""
EndFunc

Func _Ende()
Exit 0
EndFunc


Eigentlich klappts so in all meinen andern Scripten au ?( :thumbdown:
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AMrK« (20. September 2008, 17:33)


8

Samstag, 5. Juli 2008, 11:29

mhh also endweder es liegt daran das du nicht alle variabeln gesetz hast, oda es liegt daran das du sie vertauscht hast also einmal obenl[0] mir [1] oda so^^
ansonsten würde ich noch nach dem die maus zum gefunden pixel bewegt wurde ein click einbauen dann macht der bot alles automatisch siehe mein source code... und wegen dem Fenster geb ich dir nen tipp...: such dir irgendeine besondere Farbe im Spiel (das grüne gitter zum beispiel) und lass pixelsearch darüber laufen... er wird zuerst den punkt linksoben finden... dann guckste wie breit das spiel ist und schon hast du das spielfenster (Kopieren für den Wettbewerb strengstens Verboten):

AutoIt-QuellCode

1
2
3
4
5
6
7
8
func _findwindow()
$leftuppercorner = PixelSearch(0, 0,@desktopwidth, @DesktopHeight,<Farbe des Grünen Kasten>, 0)
if IsArray($leftuppercorner) Then
$rightborder = $leftuppercorner[0]+<Breite des Spiels (also nur vom Grünen Kasten... mehr brauchst du ja net)>
$bottomborder = $leftuppercorner[1]+<Höhe des Spiels (also nur vom Grünen Kasten... mehr brauchst du ja net)>
EndIf
EndIf
EndFunc
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AMrK« (20. September 2008, 17:34)


9

Samstag, 5. Juli 2008, 11:35

ja aber wie gebe ich die breite und höhe des Spiels an?


und egal was ich auch amch: ich bekomme den fehler net aus script un hab keinen plan wieso der überhaupt da is :cursing:

kannst es mir au per pm schicken nehme eh net am wettbewerb teil

und wieso sind da 2 endifs drin?
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

10

Samstag, 5. Juli 2008, 11:42

Also breite und höhe bekommst du so raus:
-Öffne das Spiel
-Mach einen Screenshot
-Füge ihn in Paint ein
-nun makiere den Teil den der Bot überprüfen soll und schneide ihn aus
-gehe bei paint unter bild -> attribute (Strg+E) und stell breite und höhe auf 1 drücke ok
-Füge nun den screenshot ein... peint wird das Bildformat automatisch an den Screenshot anpassen
-gehe bei paint wieder unter attribute und schon steht da jetzt unter höhe und breite die höhe und breite des spiels...

Nun nurnoch in meinen code passend einfügen und schon passt alles
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

11

Samstag, 5. Juli 2008, 11:51

sry für die dummheit aber

1. wo speiche mozilla seine screenshots (finds um verrecken net) und
2. wie einfugen? kann mir schwer vorstellen dass da einfach +66 oder so stehen muss odeR? :S
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

12

Samstag, 5. Juli 2008, 12:04

also screenshot: du gehst auf die page und drückst den [Druck] Knopf^^
dannach öffnest du paint und gehtst auf bearbeiten und dann einfügen (oder auch Strg+V) :D
und das mit +66 ist schon richtig :thumbsup:
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

13

Samstag, 5. Juli 2008, 12:07

lool

das mit druck usw is alles klar.

Dachte nur das des irgendwo gespeichert wird net in der zwischenablage :rolleyes:

najia ty :D
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

14

Samstag, 5. Juli 2008, 12:08

k^^ sag bescheid wenns funktioniert hat :)
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

15

Samstag, 5. Juli 2008, 12:21

Soweit so gut

AutoIt-QuellCode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
HotKeySet("!e","_Ende")
HotKeySet("!s","_Start")

HotKeySet("!p","_Pause")
HotKeySet("!1","_FensterFinden")

Do
Until ""


func _FensterFinden()
$leftuppercorner = PixelSearch(0, 0,@desktopwidth, @DesktopHeight,0x00FF63, 0)
if IsArray($leftuppercorner) Then
$rightborder = $leftuppercorner[0]+1024
 $bottomborder = $leftuppercorner[1]+768

EndIf
EndFunc




Func _Start()

while True
$Ballposition = PixelSearch($leftuppercorner[0],$leftuppercorner[1],$rightborder,$bottomborder, 0xB6FFA4, 15)
if IsArray($Ballposition) = True Then
MouseMove( $Ballposition[0], $Ballposition[1], 1)
EndIf 
WEnd
Endfunc
Func _Pause()
Do
Sleep(100)
Until ""
EndFunc

Func _Ende()
Exit 0
EndFunc


Aber wieder:
(26) : ==> Variable used without being declared.:
$Ballposition = PixelSearch($leftuppercorner[0],$leftuppercorner[1],$rightborder,$bottomborder, 0xB6FFA4, 15)
$Ballposition = PixelSearch(^ ERROR

arrg :cursing: :cursing: wieso is da ein fehler?
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AMrK« (20. September 2008, 17:32)


16

Samstag, 5. Juli 2008, 12:30

Bau vor Line 26 nochmal so ein:

AutoIt-QuellCode

1
2
3
4
5
If IsArray($leftuppercorner) Then
...
Else
MsgBox(0, "Error", "LeftUpperCorner nicht gefunden")
EndIf
Signatur

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AMrK« (24. Juli 2008, 22:05)


17

Samstag, 5. Juli 2008, 12:32

wieso net glei des? :

AutoIt-QuellCode

1
2
3
If NOT IsArray($leftuppercorner) Then
MsgBox(0, "Error", "LeftUpperCorner nicht gefunden")
EndIf


?
aber ich machs mal

EDIT:

(24) : ==> Variable used without being declared.:
If IsArray($leftuppercorner) Then
If IsArray(^ ERROR

:cursing:
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AMrK« (24. Juli 2008, 22:05)


18

Samstag, 5. Juli 2008, 12:35

2 Sachen:
1. Das Spiel ist nie im Leben 1024x768 Groß xD (das sind max 500x500 oda so)
2. Vlt findet er die farbe nicht, setzt deswegen den Array net und dann kommt es zum fehler...
Benutzt den code für fensterfinden:

AutoIt-QuellCode

1
2
3
4
5
6
7
8
9
10
func _FensterFinden()
     $leftuppercorner = PixelSearch(0, 0,@desktopwidth, @DesktopHeight,0x00FF63, 0)
     if IsArray($leftuppercorner) Then
         $rightborder = $leftuppercorner[0]+1024
         $bottomborder = $leftuppercorner[1]+768
         MsgBox(0, "Fenster", "Fenster gefunden!")
     Else
         MsgBox(0, "Fenster", "Fenster nicht gefunden!")
     EndIf
EndFunc


EDIT: Warum bin ich nur solangsam in schreiben :pinch: :sleeping:
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AMrK« (20. September 2008, 17:28)


19

Samstag, 5. Juli 2008, 12:40

hm war des was paint angegeben hat aber ich schau nomal
uno momento

EDIT: Hattest recht Paint hat mnir vorhin falsche Maße geliefert, fenster wird gefunden (durch msgbox bestätigt aber trotzdem:
26) : ==> Variable used without being declared.:
If IsArray($leftuppercorner) Then
If IsArray(^ ERROR

nochmal der jetztige code:

AutoIt-QuellCode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
HotKeySet("!e","_Ende")
HotKeySet("!s","_Start")

HotKeySet("!p","_Pause")
HotKeySet("!1","_FensterFinden")

Do
Until ""


func _FensterFinden()
 $leftuppercorner = PixelSearch(0, 0,@desktopwidth, @DesktopHeight,0x00FF63, 0)
 if IsArray($leftuppercorner) Then
     $rightborder = $leftuppercorner[0]+527
     $bottomborder = $leftuppercorner[1]+509
     MsgBox(0, "Fenster", "Fenster gefunden!")
 Else
     MsgBox(0, "Fenster", "Fenster nicht gefunden!")
 EndIf
EndFunc




Func _Start()
If IsArray($leftuppercorner) Then

Else
MsgBox(0, "Error", "LeftUpperCorner nicht gefunden")
EndIf


while True
$Ballposition = PixelSearch($leftuppercorner[0],$leftuppercorner[1],$rightborder,$bottomborder, 0xB6FFA4, 15)
if IsArray($Ballposition) = True Then
MouseMove( $Ballposition[0], $Ballposition[1], 1)
EndIf 
WEnd
Endfunc
Func _Pause()
Do
Sleep(100)
Until ""
EndFunc

Func _Ende()
Exit 0
EndFunc
 
Signatur
Wenn freundlich sein Lügen bedeutet, bin ich gerne ein Arschloch.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AMrK« (20. September 2008, 17:37)


20

Samstag, 5. Juli 2008, 13:18

mhh finde keinen fehler aba tu das while in den then-teil vom if isarray... dann dürfte die fehlermeldung nicht mehr kommen..
Signatur
Ich bin vom 6.9. an eine Woche wech :)
Ich kann mir richtige Ladebalken leisten und muss zwischen den GuiCtrlSetData's keine Sleeps einbaun 8|