Informationen über das BF2-Query Protokoll
Auf dem sogenannten Queryport (Standardportnummer 29900) sendet ein BF2-Server Informationen über sich selbst und benutzt dafür das sogenannte BF2-Query Protokoll.
Mit einer speziellen Sendeanfrage wird dem Server mitgeteilt, dass er Daten über den BF2-Server senden soll.
In diesen Informationen stecken die Infos über den Server selbst zum Beispiel, allgemeine Server-informationen, die Anzahl der Spieler welche max. auf dem Server spielen dürfen und vieles mehr.
Zusätzlich kommen hier auch Infos über den aktuellen Spielverlauf, welche Spieler sind auf dem Server, wie viel Punkte hat dieser Spieler und vieles mehr.
Anfrage
Für einen Normalen BF2-Server ist die Serveranfrage im Hexformat geschrieben
FE FD 00 74 65 73 74 FF FF FF 01
Erklärung der Daten
- FE FD –> Der Datenkopf. (bleibt immer gleich)
- 00 –> Ein Trennzeichen
- 74 65 73 74 –> Eine 4-Byte-Zufallssequenz, diese Sequenz wird in den zurückgegebenen Daten wieder gegeben. Diese Sequenz hier einfach nur „Sendekennung“ genannt.
Somit ist eine kleine Kontrolle möglich.
- FF –> Abfrage der Serverdaten gewünscht.
- FF –> Abfrage der Spielerdaten gewünscht.
- FF –> Abfrage der Teamdaten gewünscht.
Sollte ein Datenpaket nicht erwünscht sein, wird es mit setzten des Wertes 0x00 nicht abgefragt.
(Sieht so aus als wenn die Auswahl, welche Datenpakete erwünscht sind, ignoriert wird. Es kommen grundsätzlich alle!)
- 01 –> Endezeichen
Empfang
Paketinformationen
Standardmäßig ist die Paketgröße (max.) 1400 Byte. Sollten mehr Daten unterwegs sein, wird das im Datenpaket angekündigt.
Beispiel einen Datenpakets: (Die Zeichen ## sind nur als Optische Trennung eingefügt)
00 74 65 73 74 73 70 6C 69 74 6E 75 6D 00 80 00 ## .testsplitnum.€. 68 6F 73 74 6E 61 6D 65 00 44 50 46 20 54 65 73 ## hostname.DPF Tes 74 73 65 72 76 65 72 00 67 61 6D 65 6E 61 6D 65 ## tserver.gamename 00 62 61 74 74 6C 65 66 69 65 6C 64 32 00 67 61 ## .battlefield2.ga 6D 65 76 65 72 00 31 2E 31 2E 32 39 36 35 2D 37 ## mever.1.1.2965-7 39 37 2E 30 00 6D 61 70 6E 61 6D 65 00 57 61 72 ## 97.0.mapname.War 6C 6F 72 64 00 67 61 6D 65 74 79 70 65 00 67 70 ## lord.gametype.gp 6D 5F 63 6F 6F 70 00 67 61 6D 65 76 61 72 69 61 ## m_coop.gamevaria 6E 74 00 78 70 61 63 6B 00 ## nt.xpack.
- 00 –> Trennzeichen,
- 74 65 73 74 –> „Sendekennung“, wie aus der Anfrage.
- 73 70 6C 69 74 6E 75 6D –> Ein beschreibender Text der drei nachfolgenden Zeichen.
- 00 80 00 –> Meldung der Datenpaketanzahl und welches Paket gerade empfangen wurde.
Möglich sind:
1 Paket -> 00,80,00 2 Pakete -> 00,00,00 -> 00,81,01 3 Pakete -> 00,00,00 -> 00,01,00 -> 00,82,01 4 Pakete -> 00,00,00 -> 00,01,00 -> 00,02,01 -> 00,82,02
Beispiel:
00 74 65 73 74 73 70 6C 69 74 6E 75 6D 00 02 01 ## .testsplitnum...
Hier sind wir am Anfang des dritten Pakets und danach kommt noch ein letztes Packet.
Die Serverdaten
Getrennt werden alle Daten mit 0x00
Hier kommen jeweils abwechselnd zuerst die Bezeichnung und dann der Datenwert zur Bezeichnung.
68 6F 73 74 6E 61 6D 65 --> hostname (Ist die Beizeichnung für den Servername) 44 50 46 20 54 65 73 74 73 65 72 76 65 72 --> DPF Testserver (Der Datenwert für die vorangegangene Bezeichnung) 67 61 6D 65 6E 61 6D 65 --> gamename (Bezeichnung) 62 61 74 74 6C 65 66 69 65 6C 64 32 --> battlefield2 (Der Datenwert für die vorangegangene Bezeichnung)
usw.
Die Spielerdaten
Die Spielerdaten sind durch drei Zeichen 00 00 01 von den Serverdaten getrennt.
Nach denn drei Zeichen kommen die Gruppenüberschrift. In jeder Gruppe sind die Daten vollständig, vom ersten bis zum Letzten Spieler angeordnet.
Mögliche Gruppenüberschriften (werden auch in dieser Reihenfolge gesendet):
- „player_“ = Die Namen der Spieler.
- „score_“ = Die Punkte des Spielers.
- „ping_“ = Der Ping des Spielers.
- „team_“ = Das Team in dem der Spieler spielt, wobei dies eigendlich die Armee ist (und nicht das richtige Team).
- „death_“ = Wie oft der Spieler gestorben ist.
- „pid_“ = Die Spieler ID.
- „kill_“ = Wie oft der Spieler getötet hat.
- „AIBot_“ = Ist der Spieler ein Bot (0 = Der Spierl ist real, 1 = Der Spielr ist ein Bot).
Die Spielerdaten enden mit 00 00 02
Sollten die Spielerdaten mehrere Packete lang sein, dann wird der letzte Eintrag im alten Packet unvollständig gesendet. Im neuen Packet wird wieder der Packetkopf gesendet und mit der Gruppenüberschrift geht es weiter. Hiernach kommt wieder der letzte Eintrag aus dem alten Packet, aber diesmal ist ein Zeichen vor dem Eintrag, dieses Zeichen trägt die Position (Spielerposition) des letzten unvollständigen Eintrages in sich.
Ein Packetumbruch kann auch in der Gruppenüberschrift stattfinden. In diesem Fall beginnt das neue Packet wieder mit dem normalen Packetkopf und dann wird nochmals die (unvollständige) Gruppenüberschrift gesendet.
Die Teamdaten
Die Teamdaten werden nicht vollständig übertragen und sind so nicht zu gebrauchen. Die Daten beginnen mit 00 00 02 und gehen bis zum Ende. Nach dieser Anfangssequenze kommt die Gruppenüberschrift „team_t“ hiernach zwei 00 00 und dann die Armeebeschreibung (z.B.MEC US) die Armeen sind durch ein weiters 00 getrennt.
Als Trenner kommt wieder ein 00 00 und dann eine neue Gruppenüberschrift „score_t“ der rest wird nicht richtig Übertragen und die Gesamte Übertrageung ist zuende.