Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 09:41

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[AutoIt] Pixelbot erstellen

Discussion on [AutoIt] Pixelbot erstellen within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1

 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
Arrow [AutoIt] Pixelbot erstellen

Hallo,

ich möchte euch mit diesem Tutorial zwei bekannte und auch hilfsreiche Funktionen nutzen, die die Programmiersprache AutoIt zur Verfügung stellt, Image- und PixelSearch. Nach diesem Tutorial solltet ihr in der Lage sein, beide Funktionen nutzen zu können, um so auf Pixel basierende Bots zu schreiben. Pixelbots haben den Vorteil, dass sie nur mit dem arbeiten, was ihnen der Bildschirm anzeigt. Daher sind diese auch schwierig vom Spielehersteller zu detecten. Ein Nachteil dagegen ist jedoch, dass sie eure Maus steuern werden und das Spiel immer im Vordergrund sein muss, sodass ihr, während der bot läuft, euren PC nicht benutzen könnt. Wie man z.B. an der DarkOrbit Sektion sieht, gibt es aber auch Wege, Pixelbots im minimierten Fenster, also Background, laufen zu lassen.



Voraussetzungen:

- Programmiergrundlagen (If-Abfragen, While-Schleifen etc.)
- AutoIt (Ich werde in diesem Tutorial nicht auf die Syntax von AutoIt eingehen oder wie man es installiert. Wer jedoch eine andere Programmiersprache kann, AutoIt jedoch nicht, der wird keine großen Probleme haben)
- Man sollte ImageSearch und PixelSearch kennen




In diesem Tutorial werde ich mit euch einen kleinen Raidbot für das Spiel Seafight erstellen. Wer das Spiel nicht kennt, hier die Kurzfassung: Es befinden sich NPCs auf der Map, welche wir abschießen wollen, um Spielwährung zu erhalten. Das ist alles

Bevor wir aber dazu kommen, erstmal ein paar Dinge, die wir davor erledigen müssen. Zuerst erstellen wir einen neuen Ordner, nennen wir ihn mal Raidbot. Im Ordner erstellen wir dann unsere AutoIt Datei, sowie einen neuen Ordner namens Bilder.



So, kommen wir jetzt wirklich zum Spiel. Schauen wir uns mal das Spielfenster an:



Zwei Dinge sind jetzt essentiell.

1. Die Minimap



Hier werden uns NPCs in der Nähe durch einen orangenen Punkt angezeigt. Abgesehen von den NPCs brauchen wir die Minimap auch um durch die Map zu fahren.

2. Die Seekarte



In diesem Bereich werden wir später ImageSearch durchlaufen lassen, um die NPCs zu finden und anzugreifen


Wenn man einen Bot schreibt, möchte man auch, dass er auf anderen PCs funktioniert. Wie stellt man das jedoch an, wenn alle verschiedene Bildschirmauflösungen haben und ihre Minimap beispielsweise ganz wo anders liegt, als bei mir? Die Antwort ist ImageSearch. Wir nutzen diese Funktion, um die Koordinaten der Seekarte sowie Minimap auf jedem Rechner herauszubekommen. Beide sehen bei jedem PC gleich aus, befinden sich bloß auf verschiedenen Koordinaten des Bildschirms.

Für die Minimap nehmen wir ein Stück von der oberen linken Ecke:



Diese Ecke wird sich niemals verändern. Egal wo die Minimap platziert ist, diese Ecke wird durch ImageSearch immer gefunden. Schneidet diese Ecke mit Paint aus und speichert das Bild in eurem Bilder Ordner als minimap.bmp (Format: 24-Bit Bitmap)
Jetzt definieren wir den Bereich, der nach NPCs auf der Minimap durchsucht werden soll. Bei ImageSearch können wir uns aussuchen, ob wir bei einem gefundenen Bild die Koordinaten der oberen linken Ecke oder der Mitte haben wollen. Nehmen wir beispielsweise die obere linke Ecke. Wenn man nun 3 Pixel nach Rechts und 4 Pixel nach unten geht, hat man die perfekte obere linke Ecke der Minimap.



Mit der AutoIt Window Info finden wir heraus, dass die Minimap 90x90 Pixel groß ist. Mit dieser Info können wir nun die Minimap definieren:

PHP Code:
$MiniMap _ImageSearch(@ScriptDir "\Bilder\minimap.bmp",0,$mmX,$mmY,10)
    If 
$MiniMap 1 Then
        $MiniMapX 
$mmx+3
        $MiniMapY 
$mmy+4
    
EndIf 
In den Bilder Ordner kommen all die Bilder rein. $MinimapX und $MinimapY sind globale Variablen. Sie werden später in der Hauptfunktion genutzt. $MinimapX+90 bzw. $MinimapY+90 ist dann die untere rechte Ecke der Minimap. Und damit haben wir es geschafft. Mit MouseMove($MinimapX,$MinimapY) könnt ihr euren Bot schonmal testen, indem ihr die Minimap immer verschiebt und nachschaut, ob eure Maus an die richtige Stelle bewegt wird.

Nachdem ihr wisst, wie man die Minimap definiert, sollte euch nichts daran hindern, das selbe mit der Seekarte zu machen. Denkt daran, ein Stück der Seekarte auszusuchen, welches sich niemals ändert und von ImageSearch immer gefunden werden kann. Orientiert euch von dort aus nach $SeekarteX und $SeekarteY.

Bevor der Bot also anfängt zu botten, sollte euer Programm nach der Minimap und Seekarte suchen, um diese zu lokalisieren. Jetzt beginnt das eigentliche botten. Wir wollen erstmal erreichen, dass unser Schiff durch die Map segelt um Ausschau nach NPCs bzw. orangenen Punkten auf der Minimap zu halten. Schauen wir uns die Minimap nochmal genau an



Auf den blauen Pixeln, also auf dem Wasser, können wir den Kurs setzen. Da der Blauton nicht immer gleich ist, müssen wir die shade-variation von PixelSearch verwenden. Entnehmen wir mit der AutoIt Window Hilfe einen Farbton eines blauen Pixels auf der Minimap, erhalten wir beispielsweise 0x254563.

PHP Code:
While True 
    $RandomX 
Random($MinimapX,$MinimapX+90,1
    
$RandomY Random($MinimapY,$MinimapY+90,1
    
$PS PixelSearch($RandomX,$RandomY,$RandomX,$RandomY,0x254563,30
    If 
IsArray($PSThen 
        MouseClick
("left",$RandomX,$RandomY,1,2
        
Sleep(500
        
Send("c"
        
NpcSuchen($RandomX,$RandomY
    EndIf 
WEnd 
Mithilfe der Random Funktion suchen wir eine zufällige Stelle auf der Minimap. Falls diese Stelle den gewünschten Farbton enthälft, wird durch das Anklicken auf die Stelle und das Drücken von c Kurs gesetzt, ansonsten passiert nichts, sodass die Schleife sich immer und immer wieder wiederholt, bis eine Stelle mit gewünschtem blauen Farbton gefunden wurde. Ich habe die Funktion NpcSuchen mit den Parametern $RandomX und $RandomY aufgerufen. Die 2 Parameter beschreiben die Stelle, zu der wir gerade hinsegeln. Falls wir dort angekommen sind, ohne ein NPCs gefunden zu haben, wollen wir ja wieder Kurs setzen. Nebenbei wird der Spieler durch einen grünen Farbton dargestellt:



Ihr habt also den Farbton des Spielers und die Koordinaten zu denen er hinsegelt. Wie ihr herausbekommt, dass der Spieler an der Stelle angekommen ist und ihr einen neuen Kurs setzen müsst, überlasse ich euch mal.

Wie der Funktionsname NpcSuchen schon erahnen lässt, gehts nun darum, die orangenen Punkte auf der Minimap zu finden. Den Farbton erhaltet ihr mithilfe von AutoIt Window Hilfe.


PHP Code:
$Pixel PixelSearch($MiniMapX,$MiniMapY,$MinimapX+90,$MinimapY+90,0xFF9900,0
Ich verwende 0 shade-variation, weil die NPCs immer mit diesem einen Farbton angezeigt werden. Falls dieser Pixel nun gefunden wird, dann klicken wir darauf:

PHP Code:
MouseClick("left",$Pixel[0],$Pixel[1],1,2)
NpcAnklicken() 
Jetzt haben wir den NPC vor unseren Augen auf der Seekarte.



In Seafight können die NPCs in vier verschiedene Richtungen segeln (oben links, oben rechts, unten links, unten rechts). Wir brauchen daher vier Bilder vom NPC, um diesen zu erkennen, egal in welche Richtung es fährt.



Zoomt in Paint ruhig ran und schneidet ein Teil aus, das sich niemals verändert. In diesem Fall könntet ihr beispielsweise den Fehler machen, ein Stück vom Wasser mitzuschneiden. Wenn ihr das tut, wird euer Bild nicht zu 100% gefunden, da das Wasser immer unterschiedlich ist.

Wenn das Bild gefunden worden ist, klickt ihr darauf und setzt mit c Kurs, sodass ihr dem NPC näher kommt. Es ist wichtig zu wissen, dass in Seafight der Angriffsbutton aufleuchtet, wenn man in Reichweite ist, den anvisierten Gegner anzugreifen:


Nicht in Reichweite


In Reichweite

Ihr sucht also einfach nach dem Bild, in dem man in Reichweite ist. Sobald gefunden, klickt ihr darauf, sodass der Spieler angreift. Wenn man jemanden angreift, leutet der "Angriff abbrechen" Button auf:



Solang dieses aufleuchtet, greift der Spieler noch an. Der NPC lebt also noch. Wenn es nicht mehr leuchtet, heißt das, dass der Spieler den NPC versenkt hat.

Damit hätten wirs. Ein Bot, der für dich NPCs schießt. Alles nur durch Image- und PixelSearch. Klar fehlen jetzt noch wichtige Features wie Schiff reparieren wenn man versunken wird, HP reparieren, falls man weniger als XY% HP hat und störende Ingamemeldungen wegklicken. Dies ist auch alles mit keinem großen Aufwand durch Image- und PixelSearch machbar, jedoch ging es mir in diesem Tutorial darum, zu verstehen wie ein Pixelbot funktioniert und wie man mit etwas Aufwand selbst eins schreiben kann.

Ein passendes Fenster dazu zu erstellen ist dank Koda auch keine Große Kunst:




Ich hatte vor einiger Zeit vor, einen Raidbot wie in diesem Thread beschrieben zu schreiben, jedoch fehlte mir irgendwann die Lust/Zeit dazu, weswegen ich das Projekt nie fertiggestellt habe. Sehr sehr wichig, was in diesem Thread nicht angesprochen wurde, ist Fehlerbehandlung. Ihr müsst schauen, wo Fehler auftreten können und diese z.B. mit MessageBoxen beschreiben. Ansonsten bekommt ihr von vielen Usern eures Bots Errors wie "variable used without being declared" zugespammt.

Generell möchte ich zu Pixelbots noch sagen, dass, egal für welches Spiel oder für welche Seite ihr ein Pixelbot erstellen wollt, ihr immer gucken müsst, wo sich was verändert, wenn man eine Aktion im Spiel ausführt. Wenn eine Fläche wie bei Seafight ausgegraut wird, falls man nicht mehr angreift, also wenn der Gegner zerstört wurde, dann soll euer Bot natürlich nicht blöd rumstehen, sondern ihr nutzt diese Information aus um dem Bot zu sagen, jetzt soll er weiter segeln und NPCs suchen. Sowas muss euch direkt ins Auge springen, wenn ihr eure Tests im Spiel macht.

Ich hoffe das Tutorial hat euch geholfen. Es ist extra kein Copy&Paste Tutorial, sondern eher theoriebasierend. Falls noch Fragen bestehen, oder man Verbesserungsvorschläge hat, schreibt es einfach hier rein.
Moneypulation is offline  
Thanks
3 Users
Old 07/20/2015, 12:48   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Super das du dir die Mühe gemacht hast. Wird sicherlich vielen Leuten weiterhelfen.
Die GUI kann man sicherlich noch ausbauen das man die aktuellen Koordinaten anzeigt aber das passt schon so.

Ich würde noch bei deinen Random-Funktionen den Parameter 1 verwenden, da MouseClicks auf ganze Pixel und nicht auf halbe Pixel stattfinden. (Klar die Funktion rundet das ab aber nur um das ganze sauber zu halten, und wenn du später die Infos im GUI anzeigst kriegst du auch saubere Werte.)
alpines is offline  
Thanks
1 User
Reply

Tags
autoit, bot, pixel, pixelbot, tutorial


Similar Threads Similar Threads
[TUT] How to write your own Pixelbot [AutoIT]
06/22/2017 - Coding Tutorials - 37 Replies
At first you need to find the right pixel colour... We will do it with the AutoIT Tool: AutoIT Window Info http://picpanda.com/images/xk1z5i2yeot12mc1zn2_th umb.png When we found the pixel we need to add that your ship moves:
Autoit Pixelbot für Browsergame
12/05/2012 - AutoIt - 5 Replies
Hy leute suche ein paar leute die lust und laune haben mit mir einen Pixelbot für das Spiel Darkorbit zu machen. Was ihr können müsst: ihr solltet etwas erfahrung haben
AutoIT PixelBot Hilfe
03/01/2010 - AutoIt - 3 Replies
Hey ich hätte mal ein paar Fragen... Also wie ja oben steht brauche ich Hilfe bei einem PixelBot zum Farmen. Der Bot soll davon unterscheiden können ob er einen Mob anvisiert hat oder nicht. Das funktioniert bei meinem Bot folgendermaßen: Er Scannt oben die Farbe von der HP Leiste des Monsters (Rot),wenn diese vorhaden ist dann fängt er an die Skills auszuführen und zu looten. Wenn sie nicht vorhaden ist drückt er einfach TAB um ein Mob anzuvisieren...und...danach...naja passiert gar...
Flyff-Autoit-Pixelbot
07/14/2009 - Flyff - 2 Replies
Pixelbot höhrt sich einfach an und schaffe ich auch nur bei flyff bin ich am verzweifeln *-*. Ich rede von Autoit. Die Funktionen Winactive und Send gehen auch nicht weil ich eigentlich einen bot schreien wollte der immer wieder eine Nachricht sendet(hallt für afk shouts). Weis wer wie ich es schaffe einen Pixelbot zu erstellen? Auch beim Wininfo tool werden ja keine Controls etc. angezeigt. Weis jemand wie ich es schaffen kann? Über Baipass?kann mir einer einen guten geben? Sunkist geht bei...



All times are GMT +1. The time now is 09:42.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.