Ich habe keine bessere Überschrift gefunden, also habe ich diese genommen.
Das Tutorial soll jedoch nicht erklären, wie ihr euch genau einen Bot schreibt, sondern eher wie einer funktioniert.
Aber glaubt mir, solltet ihr einen Bot schreiben wollen, werdet ihr unweigerlich auf diesen Beitrag stoßen.
Zunächst müssen wir uns fragen, was denn so ein Bot überhaupt macht.
Grundsätzlich erledigt er für uns lästige Dinge um uns bspw. Rohstoffe zu sammeln.
Das heißt, wir müssen jetzt herausfinden, wie der Client mit dem Server kommuniziert und welche "Packets" sich diese zusenden.
Dazu verwende ich mein eigenes Programm, ihr könnt aber auch "WPE Pro" nehmen. Einfach googlen.
Sagen wir, wir fliegen gerade mit unserem Schiff durch die Gegend.
Jetzt sehen wir neben uns eine Bonus Box.
D.h. der Client sendet dem Server seine aktuelle Position.
Der Server sagt dann: "Nenene, stop, du bist gerade in der nähe einer Bonus Box.", und sendet die Informationen der Bonus Box wie ID, Position und Inhalt zu.
Der Client erstellt diese dann und "zeichnet" sie auf den Bildschirm.
Genau dieses Packet müssen wir jetzt abfangen.
Dazu erstellen wir in der Programmiersprache unseres Vertrauens einen "TCPClient" (auch googlen) und verbinden zum Darkorbit Server.
Die aktuelle IP und der aktuelle Port lautet 62.146.191.117 und 8080.
Das Login Packet sieht so aus:
Code:
LOGIN|USERID|SESSIONID|CLIENTVERSION
Beispiel:
Code:
LOGIN|120301|123919dkdfkalksdj1j381|3.0.5
Dieses Packet senden wir jetzt über unseren StreamWriter an den Darkorbit Server.
Als Beweis, das wir auch wirklich ein Mensch sind, und kein Bot senden wird gleich danach das Packet "PNG", was für "Ping" steht.
Also sieht das bis jetzt so aus:
Code:
LOGIN|120301|123919dkdfkalksdj1j381|3.0.5
PNG
Das sind natürlich 2 einzelne Packets, nicht ein Packet mit einem Zeilenumbruch.
Als Antwort bekommen wir jetzt vom Server ein großes Packet, in dem alles steht, was wir zu beginn brauchen.
Das sieht bspw. so aus:
Dieses Packet können wir jetzt mit einem "Split" Befehl (dieser ist in jeder Programmiersprache verschieden) "filtern" und uns die Daten holen, die wir brauchen.
Zum Beispiel UserID, Username, Hitpoints, Shield und den Cargoinhalt.
Aber jetzt zum eigentlichen Bot.
Dieser soll ja für uns rumfliegen, das heißt er muss irgendwie dem Server mitteilen, das er sich bewegen will.
Das geht wie folgend:
Code:
0|1|PosX|PosY
Beispiel:
Code:
0|1|10319|12391
Dieser bewegt sich jetzt an die Koordinaten 10.319 und 12.391.
Die Kommastellen sind eigentlich unwichtig.
Erst beim sammeln von Rohstoffen etc. werden sie relevant.
Sobald unser Schiff an der Position angekommen ist, erhalten wir ein weiteres Packet:
Code:
0|D|PosX|PosY
In unserem Fall wäre das:
Code:
0|D|10319|12391
Da der Bot aber auch Sachen aufsammeln soll, müssen wir noch überprüfen, ob etwas in der Nähe ist ("streamed-in"), das wir aufsammeln können.
Das finden wir heraus, indem wir überprüfen, ob der Server dem Client die Anweisung gibt, ein Item zu erstellen.
Das wäre das Packet dafür:
Code:
0|c|ItemID|PosX|PosY|Content
Beispiel:
Code:
0|c|13|11220|12000|500
Das wäre eine Bonusbox mit 500 Credits Inhalt.
(Nein, man kann keine Packets an sich selbst senden und den Inhalt verändern).
Dann lassen wir den Client das Item wie folgt aufsammeln:
Code:
0|C|13|11220|12000
Weitere Commands findet ihr leicht mit WPE Pro heraus, da sie nicht verschlüsselt sind.
Vergleicht einfach die Werte mit denen, von eurem Schiff etc. und schon findet ihr heraus, welche Werte zu welchen gehören.
Ich hoffe das hat euch etwas geholfen.
Und das war nur ein sehr kleiner Einblick in den "Arbeitstag eines Bots".
genau das ist sozumsagen 30% der arbeit aber ein bisschen zu kurz beschrieben
Da liegst du aber falsch, das ist noch nicht mal 10 % der Arbeit.
Damit fängt die Arbeit erst an.
Allerdings kann man ja das Tutorial in mehreren Teilen weiterführen.
hmm naja so nach seiner sicht aus wär das 30% mann muss ja alles erst schreiben & konfig. ein richtiges gutes tut wär fast 1-10 seiten vollgeschrieben ohne space...
Wie gesagt, es soll garnicht ein Step-by-step tutorial o. Ä. sein, es soll einfach mal zeigen, was dahinter steckt.
Ich finde, das "schöne" am Bot schreiben ist dieser "Woa, es funktioniert wirklich"-Effekt.
Und den erziele ich nur, wenn ich etwas selbst mache .
Ich finde es gut, dass du soetwas hier erstellt, doch solltest du darauf achten auch die richtigen Befehle hier rein zu stellen!
z.B. ist der Befehl um eine Koordinate anzufligen nicht wie du geschrieben hast:
Code:
0|1|12000|11000
sondern:
Code:
1|12000|11000|aktuelle_x_position|aktuelle_y_pos
"Dieser bewegt sich jetzt an die Koordinaten 10.319 und 12.391."
Er würde sich wohl eher nach 103|123 bewegen (wenn der Flugbefehl richtig wäre)
Außerdem ist auch deine Aussage mit der Gameserverip so nicht richtig
"Die aktuelle IP und der aktuelle Port lautet 62.146.191.117 und 8080."
Diese gilt gerade jetzt für deinen Server und deine aktuelle Map! Nachlesen lassen sich die Maps unter (Man achte auf den Quelltext):
das de1 ist mit dem jeweiligen Serverkürzel zu ersetzen!
eig ist das ganze ja ganz einfach. sniffen, tcp clienten proggen, und packete senden empfangen. aber dann komtm ja noich die ganze arbeit beim auswerten vom sniffen und das wep pro )oider wie das heißt) bei mir nur errors auspuckt^^
also über mehr richtige packlets würde man sich freuen^^
die packets rauszufinden ist doch ganz einfach, wpe starten ausführen was zu wissen willst wpe stoppen und dann suchen...
Wenn man jetzt nen Bot schreiben will, ist das eig. nicht so hilfreich(ist meine Meinung)
Ein Thread wo man auf die Auswertung der Daten eingeht wäre nichts schlechtes, da hab ich nähmlich meine Probleme...
Die Schwierigkeit besteht nicht in der Paketanalyse.
Es ist bspw. viel Mathematik notwendig.
Ein Bann fast schon garantiert, wenn man die Positionsangaben des Servers nutzt. Ein Bot muss seine Position selbst berechnen können.
Zum anderen darf ein Bot nicht sofort seine Position ändern, wenn eine Box auftaucht und er darf auch nicht genau die Position der Box ansteuern.
Und das sind nur ein paar Beispiele.
Übrigens finde ich es wirklich richtig blöd von Bigpoint, ein so selbstverständliches Protokoll zu benutzen.
Sie hätten von Anfang an auf Byte-ebene operieren sollten, wie es z.B. bei Warpfire der Fall ist. Dann wäre der Bot-markt wesentlich "sauberer"