Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
php_server_query_script [2009/10/24 14:00] 127.0.0.1 Externe Bearbeitung |
— (aktuell) | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== PHP HL² Server-Query Script ====== | ||
- | Dieses Script kann Informationen von einem HL2/CS:S-Server auslesen und anzeigen. | ||
- | ===== Funktionen ===== | ||
- | Um nur die Informationen zu bekommen (z.B. Servername, Map usw) | ||
- | * Verbindung zum Server herstellen | ||
- | * Einen Wert zum Server schicken | ||
- | * Die Daten die der Server zurückschickt auffangen und auswerten | ||
- | * Daten ins Array laden | ||
- | Um Spieler vom Server ab zu fragen (z.B. Playername, Frags usw.), muss eine Art "Ticket" angefordert werden. Dieses Ticket ist eine begrenzte Zeit gültig und ermöglicht es die Informationen zu bekommen. | ||
- | * Verbindung zum Server herstellen | ||
- | * Ein Ticket anfordern (Challenge) | ||
- | * Einen Wert zum Server schicken mit angehängten Ticket (das was wir vorher abgefragt haben) | ||
- | * Die Daten die der Server zurückschickt auffangen und auswerten | ||
- | * Daten ins Array laden | ||
- | Serversettings sind ähnlich wie die Player, auch mit einem Ticket | ||
- | ===== PHP-Code ===== | ||
- | Wir wollen das ganze in einer Klasse zusammenfassen, damit man es später leicht anpassen und für verschiedene Server verwenden kann. | ||
- | Oder z.B. nur um die Serverinfo´s abfragen und auf den Rest zu verzichten. | ||
- | <code=php>class HLServerAbfrage { | ||
- | }</code> | ||
- | Jetzt werden die wichtigsten Variablen deklariert und einige schon mit Werten füllen um diese Werte dann später zu unserem Gameserver zu senden: | ||
- | <code=php>var $server_address; | ||
- | var $ip; | ||
- | var $port; | ||
- | var $fp; | ||
- | var $challenge; | ||
- | var $serverinfo; | ||
- | var $playerlist; | ||
- | var $cvarlist; | ||
- | var $A2S_SERVERQUERY_GETCHALLENGE = "\x57"; // challenge | ||
- | var $A2S_INFO = "TSource Engine Query\x00"; // info | ||
- | var $A2S_PLAYER = "\x55"; // player | ||
- | var $A2S_RULES = "\x56"; // rules</code> | ||
- | ==== Funktionen ==== | ||
- | === IP und PORT aus der Serveradressen Variable zu trennen === | ||
- | <code=php>function hlserver($server_address = 0) { | ||
- | list($this->ip, $this->port) = explode(":", $server_address); | ||
- | }</code> | ||
- | === Verbindung zum Server aufzubauen === | ||
- | <code=php>function connect() { | ||
- | $this->fp = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3); | ||
- | if (!$this->fp) { | ||
- | $Fehler = 1; | ||
- | } | ||
- | }</code> | ||
- | Damit wird eine und Verbindung zu dem Server hergestellt und speichern sie in der Variable "$this->fp". | ||
- | Die Funktion ''fsockopen'' brauch dazu die beiden Variablen mit der IP und dem PORT. | ||
- | === Mit dem Server zu kommunizieren === | ||
- | <code=php>function [b]send_strcmd[/b]($strcmd) { | ||
- | fwrite($this->fp, sprintf('%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, $strcmd, 0x00)); | ||
- | }</code> |