Da gibt es mehrere Möglichkeiten, ich mache mal ein Beispiel anhand von Darkorbit
Also bei meiner Entwicklung, benutze ich packet hacking. [TCP/IP Packet, Socket]
Das funktioniert im Prinzip so:
Methode NR. 1:
Das Spiel spielen und nebenher, einen Packet Sniffer laufen lassen.
Dabei werden die einzelnen Pakete die vom Server an den Client und vom Client an den Server geschickt werden ausgelesen.
Im Falle von Darkorbit sind diese nicht verschlüsselt, und in Text Form [Binary / Asci Transmission]
Beispiel:
Code:
0|C|46417093|7|2|ETA|louset1|19249|1040|2|996|11|0|0|0|0|0|0.
0|C|49071223|1|1||degmetrostars|18700|1300|2|0|1|0|0|0|0|0|0.
0|C|46217847|30|2||inferno65|18863|1495|2|0|9|0|0|0|0|0|0.
0|C|48788935|9|2||Phoenixxxeyes|19500|1000|2|0|9|0|0|0|0|0|0.
0|C|47676800|1|1||Hallo1010170|18700|1300|2|0|5|0|0|0|0|0|0.
0|C|45820307|10|4|C4|Leon1278|18700|1300|2|3141|16|0|0|2|0|0|0.
0|C|49071668|1|1||magnusschippmann|18700|1300|2|0|1|0|0|0|0|0|0.
0|C|36681920|10|4|VSF|...Yo......-C..sar...[VSF]|18168|2132|3|211|18|1|0|4|0|0|0.
0|C|45955419|2|2||-Cooper77-|17757|-209|2|0|8|0|0|0|0|0|0.
0|C|107700233|2|1||-=[ Streuner ]=-|20265|607|0|0|0|0|0|0|0|1|0.
Anhand von dem Beispiel erkennt man das die Daten in unverschlüsselter Text Form gesendet und empfangen werden.
Außerdem erkennt man das diese durch ein Trennzeichen in unserem Fall (|) getrennt werden. [Text delimited]
Anhand von diesen Daten lassen sich ein paar Dinge direkt erkennen, das in diesem Packet Nicknamen gesendet werden, die meisten anderen Daten sind erstmals nicht so ersichtlich.
Die Aufgabe des Bot Entwicklers besteht also erstmals darin, die Packet Struktur zu analysieren (80% cause and effect, 20% Erfahrung)
Als Beispiel wie das aussehen könnte:
Code:
0|C|48788935|9|2||Phoenixxxeyes|19500|1000|2|0|9|0|0|0|0|0|0
ErrorCode = 0;
Command = C;
? = 48788935;
? = 9;
? = 2;
? = ?;
Nickname = Phoenixxxeyes;
...............
Wie man sieht sind die meisten Daten erstmals nicht einfach ersichtlich und können meist nur durch viel ausprobieren und vorheriger Erfahrung erkannt werden.
So Der Coder beschäftigt sich nun Weiter mit diesem Packet und logt noch mehr von diesen Paketen, dabei fällt im auf das er ein Paket mit seinem Nickname geloggt hat.
Dabei fällt ihm auf das in diesem Packet auch seine User ID enthalten ist, also geht er erstmals davon aus das Abschnitt drei des Packet die User ID enthält
Code:
0|C|[COLOR="red"]48788935[/COLOR]|9|2||Phoenixxxeyes|19500|1000|2|0|9|0|0|0|0|0|0
ErrorCode = 0;
Command = C;
[COLOR="Red"]UserID[/COLOR] = 48788935;
? = 9;
? = 2;
? = ?;
Nickname = Phoenixxxeyes;
...............
Und schon kennt er das Packet ein wenig besser.
Der Coder beschäftigt sich weiterhin mit dem Packet und seiner mittlerweile 3dritten Kaffe Kanne.
Hat er die komplette Packet Struktur verstanden, die dann in etwa so aussieht:
Code:
0|C|48788935|9|2||Phoenixxxeyes|19500|1000|2|0|9|0|0|0|0|0|0
ErrorCode|Command|UserID (Entity ID)|ShipPatternID|ExpansionStage|ClanTag|Name|PositionX|PositionY|CompanyID|ClanID|DailyRank|SetWarnIcon|ClanDiplomacy|GalaxyGatesDone|?|?|?
Naja also ist ihm nun Klar das dieses Packet vom Server versendet wird wenn ein Objekt zum ersten mal erstellt wird. Da er nun das Packet versteht, macht er sich an die Arbeit und programmiert erstmals einen Parser für dieses Create Packet und anschließend einige Klassen und Funktionen die mit diesen Informationen die aus dem Packet gewonnen wurden etwas anfangen können.
Code:
string Packetdata = 0|C|48788935|9|2||Phoenixxxeyes|19500|1000|2|0|9|0|0|0|0|0|0
string data[] = funktionDieDasPacketAuseinanderNimmt(Packetdata);
PacketStructure packet = funktionDieDasPacketAnalysiert(data);
FunktionDieAlleFeindSchiffeAngreift(packet);
So da er nun damit fertig ist fällt ihm aber auf das es noch 200 weitere dieser Pakete gibt!!
Also überlegt er sich etwas neues
Fortsetzung im nächsten Post!
Anmerkung: Alles was in eckigen [] Klammern ist sind Stichworte die dem Leser weiterhelfen werden um zusätzliches Material zu diesem Thema zu finden.
Also
Wenn ich Lust und Zeit habe ergänz ich diese mit Links.