Sie sind nicht angemeldet.

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

1

Montag, 15. Oktober 2007, 10:13

HL2 Server: PHP Klasse?

Hi, ich suche einen PHP-Klasse womit ich HL2 Daten wie Spieler, Mapname, Slots, Hostname usw. abfragen kann, ich habe leider noch keine gefunden. Es sollte möglichst nur eine Klasse sein, den ganzen Schnickschnack mit der Auflistung und so will ich garnicht.

So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

2

Montag, 15. Oktober 2007, 14:10

Re: HL2 Server: PHP Klasse?

Das habe ich mal im Netz gefunden.

Habe leider die HP nicht mehr.
Aber den Code habe ich mir mal gespeichert.

Habe es nie getestet!

HL2 Querry PHP Script

PHP - CS:S Server abfragen
Tutorial für ein PHP Server-Query Script, das Informationen von einem HL2/CS:S Server auslesen und anzeigen kann.





Da sich beim letzten Steam Update die Server Queries verändert haben und alle Scripts die es vorher gab nicht mehr gehen, musste ich meins natürlich auch anpassen.

Man muss sich das ganz so vorstellen:

# Um nur die Informationen zu bekommen (z.B. Servername, Map usw)
1. Verbindung zum Server herstellen
2. Einen Wert zum Server schicken
3. Die Daten die der Server zurückschickt auffangen und auswerten
4. Daten ins Array laden

# Player vom Server abfragen (z.B. Playername, Frags usw.)
# Und das ist nun das Interessante was sich geändert hat. Man muss sich nun, um diese # Informationen vom Server zu bekommen, eine art "Ticket" anfordern. Dieses Ticket ist # eine begrenzte Zeit gültig und ermöglicht es die Informationen zu bekommen.
1. Verbindung zum Server herstellen
2. Ein Ticket anfordern (Challenge)
3. Einen Wert zum Server schicken mit angehängten Ticket (das was wir vorher abgefragt haben)
4. Die Daten die der Server zurückschickt auffangen und auswerten
5. Daten ins Array laden

# Serversettings sind ähnlich wie die Player, auch mit einem Ticket


--------------------------------------------------------------------------------


OK, soweit zum Prinzip.

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 die Serverinfo´s abfragen und auf den Rest verzichten.



Code:

class source_server
(
var $ip; // ip des servers
var $port; // port des servers
var $fp; // verbindung zum server

var $serverinfo; //info array
var $playerlist; //player array
var $cvarlist; //rules array
)



Hier haben wir die für uns wichtigen Variablen erstellt:
var $Ip = Ip des Server´s
var $Port = Port des Server´s
var $fp = Verbindungstyp

var $serverinfo = Aray mit Serverinfos
var $playerlist = Aray mit Playern
var $cvarlist = Aray mit Serverregeln


--------------------------------------------------------------------------------


Jetzt kommen wir zu den Funktionen die wir brauchen:

Funktion um eine Verbindung zum Server aufzubauen:



Code:

function connect()
(
$this->fp = fsockopen("udp://".$this->ip, $this->port);
)



Damit stellen wir eine und Verbindung zu unserem Server her und speichern sie in der Variablen "$this->fp". Die funktion fsockopen brauch dazu die beiden Variablen mit der IP und dem PORT.


--------------------------------------------------------------------------------



OK, nun brauchen wir eine Funktion um mit dem Server kommunizieren zu können:



Code:

Function send_strcmd($strcmd)
(
fwrite($this->fp, sprintf('%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, $strcmd, 0x00));
)




Wir benutzten die Funktion "fwrite". Wir brauchen uns mit dem Rest nicht auseinander setzten, nur die Variable "$strcmd" ist noch interessant. Damit werden später die Daten übergeben, die wir zum Server schicken.


--------------------------------------------------------------------------------


Jetzt brauchen wir Funktionen, die die Daten auswerten die uns der Server zurück schick. Man muss sich das folgendermaßen vorstellen:

Der Server schick uns eine Kette mit Informationen, die alle hintereinander kommen. Die müssen wir an bestimmten stellen trennen, damit wir die Informationen unterteilen können.
Bsp. Server schickt uns das: "de_dust25161"
Da sind folgende Informationen enthelten: Map, Max Player, Player auf dem Server und Anzahl der Bots.



Code:

// 1 Byte vom Server holen
function get_byte()
(
return ord(fread($this->fp, 1));
)

// 1 Zeichen (1 Byte) vom Server holen
function get_char()
(
return fread($this->fp, 1);
)

// einen int16-Wert (2 Bytes) vom Server holen
function get_int16()
(
$unpacked = unpack('sint', fread($this->fp, 2));
return $unpacked[int];
)

// einen int32-Wert (4 Bytes) vom Server holen
function get_int32()
(
$unpacked = unpack('iint', fread($this->fp, 4));
return $unpacked[int];
)

// einen float32-Wert (4 Bytes) vom Server holen
function get_float32()
(
$unpacked = unpack('fint', fread($this->fp, 4));
return $unpacked[int];
)

// 4 bytes vom challenge
function get_4()
(
return fread($this->fp, 4);
)

// einen String vom Server holen
function get_string()
(
while(($char = fread($this->fp, 1)) != chr(0))
(
$str .= $char;
)

return $str;
)




Die Informationen die wir auswerten, sind von verschiedenen Datentypen. Mit den oben genannten Funktionen kann man sie auswerten. Darauf werde ich erst mal nicht genauer eingehen, ich denke das ist selbsterklärend.


--------------------------------------------------------------------------------


Nun brauchen wir eine Funktion, um ein Ticket anzufordern:



Code:

function ch()
(
$this->connect();
$this->send_strcmd("W");
$this->get_byte();
return $this->get_4();
fclose($this->fp);
)




Wir benutzen unsere Verbindungsfunktionen und übergeben den Wert "W". Also mit anderen Worten schicken wir ein "W" zum Server. Darauf antwortet der Server mit einem 4byte großen Datenpaket. Deswegen benutzen wir die Funktion "get_4" die wir vorher geschrieben haben. Zum Schluss trennen wir die Verbindung. Die Funktion gibt die Ticketnummer aus.


--------------------------------------------------------------------------------


Jetzt brauchen wir die Funktionen um den Server die Informationen zu entlocken, die wir wollen. Fangen wir mit den Server Informationen an:



Code:

function infos()
(
$this->connect();
$this->send_strcmd("TSource Engine Query");

$this->get_int32();
$this->get_byte();
$this->serverinfo["protokoll"] = $this->get_byte();
$this->serverinfo["name"] = $this->get_string();
$this->serverinfo["map"] = $this->get_string();
$this->serverinfo["directory"] = $this->get_string();
$this->serverinfo["discription"] = $this->get_string();
$this->serverinfo["steam_id"] = $this->get_int16();
$this->serverinfo["players"] = $this->get_byte();
$this->serverinfo["maxplayers"] = $this->get_byte();
$this->serverinfo["bot"] = $this->get_byte();

fclose($this->fp);
return $this->serverinfo;
)




Wir schicken wieder einen Wert zum Server (TSource Engine Query). Danach rufen wir unseren Auswertungsfunktionen auf, um die Daten die der Server schickt auszuwerten. Zum Schluss speichern wir das ganze im serverinfo Array.


--------------------------------------------------------------------------------


Mit der Funktion kann man die Player, Frags usw... vom Server abfragen:



Code:

function players()
(
$challenge = $this->ch;
$this->connect();

$this->send_strcmd("U".$challenge);
$this->get_int32();
$this->get_char();
$playercount = $this->get_byte();

for($i=0; $i < $playercount; $i++)
(
$this->playerlist[$i]["index"] = $this->get_byte();
$this->playerlist[$i]["name"] = $this->get_string();
$this->playerlist[$i]["frags"] = $this->get_int32();
$this->playerlist[$i]["time"] = date('H:i:s', round($this->get_float32(), 0)+82800);
)
fclose($this->fp);
return $this->playerlist;
)




Wir machen das wieder so wie bei den Info´s, nun allerdings hängen wir noch die Ticketnummer ran und rufen die Funktion auf um sie zu bekommen.


--------------------------------------------------------------------------------


Serverregeln auslesen:



Code:

function cvars()
(
$challenge = $this->ch;
$this->connect();

$this->send_strcmd("V".$challenge);
$this->get_int32();
$this->get_char();
$cvarcount = $this->get_int16();

for($i=0; $i < $cvarcount; $i++)
(
$this->cvarlist[$this->get_string()] = $this->get_string();
)
fclose($this->fp);
return $this->cvarlist;
)




Das ist das Gleiche wie bei den Playern, nur die Auswertfunktionen sind anders.

Jetzt ist die Klasse einsatzbereit. Nun muss nur noch auf sie zugegriffen werden, das bekommt ihr aber selber hin.



Aktueller Stand der Entwicklung:



Code:

class hlserver
(
var $ip;
var $port;
var $fp;
var $challenge = -1;

var $serverinfo;
var $playerlist;
var $cvarlist;

var $A2S_SERVERQUERY_GETCHALLENGE = "W"; // challenge
var $A2S_INFO = "TSource Engine Query\0"; // info
var $A2S_PLAYER = "U"; // player
var $A2S_RULES = "V"; // rules
var $S2C_CHALLENGE = "A"; // challenge


function hlserver($server_address=0)
(
list($this->ip, $this->port) = explode(':', $server_address);
)

function connect()
(
$this->fp = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3);
if (!$this->fp)
(
echo "Fehler: $errno - $errstr
\n";
$confail = 1;
)
)

// String-Command senden
function send_strcmd($strcmd)
(
fwrite($this->fp, sprintf('%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, $strcmd, 0x00));
)

// 1 Byte vom Server holen
function get_byte()
(
return ord(fread($this->fp, 1));
)

// 1 Zeichen (1 Byte) vom Server holen
function get_char()
(
return fread($this->fp, 1);
)

// einen int16-Wert (2 Bytes) vom Server holen
function get_int16()
(
$unpacked = unpack('sint', fread($this->fp, 2));
return $unpacked[int];
)

// einen int32-Wert (4 Bytes) vom Server holen
function get_int32()
(
$unpacked = unpack('iint', fread($this->fp, 4));
return $unpacked[int];
)

// einen float32-Wert (4 Bytes) vom Server holen
function get_float32()
(
$unpacked = unpack('fint', fread($this->fp, 4));
return $unpacked[int];
)

// einen String vom Server holen
function get_string()
(
while(($char = fread($this->fp, 1)) != chr(0))
(
$str .= $char;
)

return $str;
)

// Challenger vom Server holen
function challenge()
(
$this->connect();
$this->send_strcmd("$this->A2S_SERVERQUERY_GETCHALLENGE");
$this->get_byte();
$challenge = $this->get_int32();
$this->challenge = $challenge;
return $challenge;
fclose($this->fp);
)


// Infos vom Server holen
function infos()
(
echo $this->challenge;
$this->connect();
$this->send_strcmd("$this->A2S_INFO");
$this->get_int32();

$this->get_byte();
$this->serverinfo["protokoll"] = $this->get_byte();
$this->serverinfo["name"] = $this->get_string();
$this->serverinfo["map"] = $this->get_string();
$this->serverinfo["directory"] = $this->get_string();
$this->serverinfo["discription"]= $this->get_string();
$this->serverinfo["steam_id"] = $this->get_int16();
$this->serverinfo["players"] = $this->get_byte();
$this->serverinfo["maxplayers"] = $this->get_byte();
$this->serverinfo["bot"] = $this->get_byte();

return $this->serverinfo;
fclose($this->fp);
)

// Player-Liste vom Server holen
function players()
(
$this->challenge();
$this->connect();
$this->send_strcmd("$this_>A2S_PLAYER.".$this->challenge);
$this->get_byte();
$playercount = $this->get_byte();

for($i=0; $i < $playercount; $i++)
(
$this->playerlist[$i]["index"] = $this->get_byte();
$this->playerlist[$i]["name"] = $this->get_string();
$this->playerlist[$i]["frags"] = $this->get_int32();
$this->playerlist[$i]["time"] = date('H:i:s', round($this->get_float32(), 0)+82800);
)
fclose($this->fp);
return $this->playerlist;
)

// Rules-Liste (CVARs) vom Server holen
function cvars()
(
$this->challenge();
$this->connect();

$this->send_strcmd("$this->A2S_RULES.".$this->challenge);
$this->get_int32();
$this->get_char();

$cvarcount = $this->get_int16();

for($i=0; $i < $cvarcount; $i++)
(
$this->cvarlist[$this->get_string()] = $this->get_string();
)
fclose($this->fp);

return $this->cvarlist;
)
);
?>


MfG



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

3

Montag, 15. Oktober 2007, 14:18

Re: HL2 Server: PHP Klasse?

Cool, endlich mal ein Ansatz!
Ich teste und sag dir mal bescheid!

So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

4

Montag, 15. Oktober 2007, 14:28

Re: HL2 Server: PHP Klasse?

Spoiler Spoiler

<?php
class hlserver {

var $ip;
var $port;
var $fp;
var $challenge = -1;

var $serverinfo;
var $playerlist;
var $cvarlist;

var $A2S_SERVERQUERY_GETCHALLENGE = "W"; // challenge
var $A2S_INFO = "TSource Engine Query\0"; // info
var $A2S_PLAYER = "U"; // player
var $A2S_RULES = "V"; // rules
var $S2C_CHALLENGE = "A"; // challenge


function hlserver($server_address=0) {

list($this->ip, $this->port) = explode(':', $server_address);

}

function connect() {

$this->fp = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3);
if (!$this->fp) {

echo "Fehler: $errno - $errstr\n";
$confail = 1;

}

}

// String-Command senden
function send_strcmd($strcmd) {

fwrite($this->fp, sprintf('%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, $strcmd, 0x00));

}

// 1 Byte vom Server holen
function get_byte() {

return ord(fread($this->fp, 1));

}

// 1 Zeichen (1 Byte) vom Server holen
function get_char() {

return fread($this->fp, 1);

}

// einen int16-Wert (2 Bytes) vom Server holen
function get_int16() {

$unpacked = unpack('sint', fread($this->fp, 2));
return $unpacked[int];

}

// einen int32-Wert (4 Bytes) vom Server holen
function get_int32() {

$unpacked = unpack('iint', fread($this->fp, 4));
return $unpacked[int];

}

// einen float32-Wert (4 Bytes) vom Server holen
function get_float32() {

$unpacked = unpack('fint', fread($this->fp, 4));
return $unpacked[int];

}

// einen String vom Server holen
function get_string() {

while(($char = fread($this->fp, 1)) != chr(0)) {

$str .= $char;

}

return $str;

}

// Challenger vom Server holen
function challenge() {

$this->connect();
$this->send_strcmd("$this->A2S_SERVERQUERY_GETCHALLENGE");
$this->get_byte();
$challenge = $this->get_int32();
$this->challenge = $challenge;
return $challenge;
fclose($this->fp);

}


// Infos vom Server holen
function infos() {

echo $this->challenge;
$this->connect();
$this->send_strcmd("$this->A2S_INFO");
$this->get_int32();

$this->get_byte();
$this->serverinfo["protokoll"] = $this->get_byte();
$this->serverinfo["name"] = $this->get_string();
$this->serverinfo["map"] = $this->get_string();
$this->serverinfo["directory"] = $this->get_string();
$this->serverinfo["discription"]= $this->get_string();
$this->serverinfo["steam_id"] = $this->get_int16();
$this->serverinfo["players"] = $this->get_byte();
$this->serverinfo["maxplayers"] = $this->get_byte();
$this->serverinfo["bot"] = $this->get_byte();

return $this->serverinfo;
fclose($this->fp);

}

// Player-Liste vom Server holen
function players() {

$this->challenge();
$this->connect();
$this->send_strcmd("$this_>A2S_PLAYER.".$this->challenge);
$this->get_byte();
$playercount = $this->get_byte();

for($i=0; $i < $playercount; $i++) {

$this->playerlist[$i]["index"] = $this->get_byte();
$this->playerlist[$i]["name"] = $this->get_string();
$this->playerlist[$i]["frags"] = $this->get_int32();
$this->playerlist[$i]["time"] = date('H:i:s', round($this->get_float32(), 0)+82800);

}

fclose($this->fp);
return $this->playerlist;

}

// Rules-Liste (CVARs) vom Server holen
function cvars() {

$this->challenge();
$this->connect();

$this->send_strcmd("$this->A2S_RULES.".$this->challenge);
$this->get_int32();
$this->get_char();

$cvarcount = $this->get_int16();

for($i=0; $i < $cvarcount; $i++) {

$this->cvarlist[$this->get_string()] = $this->get_string();

}

fclose($this->fp);
return $this->cvarlist;

}
}
?>


Habe das jetzt mal ordentlich hervorgehoben und mal die ) und ( durch } und { ersetzt. Jetzt gibts keinen Fehler mehr - aber ich weiß ehrlich gesagt nicht wie ich die Daten abfragen soll ^^

So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

5

Montag, 15. Oktober 2007, 14:39

Re: HL2 Server: PHP Klasse?

Gute frage?
Habe es auch nie zum laufen bekommen.
Musst du nicht "$this" mit in die Funktion übergeben?
Da in der Funktion ja alle die Variablen neu definiert werden?

Quellcode

1
2
3
4
5
6
7
8
9
function connect() {

$this->fp = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3);
if (!$this->fp) {

echo "Fehler: $errno - $errstr\n";
$confail = 1;

}
ZU

Quellcode

1
2
3
4
5
6
7
8
9
function connect($this) {

$this->fp = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3);
if (!$this->fp) {

echo "Fehler: $errno - $errstr\n";
$confail = 1;

}


Natürlich auch beim Aufruf der Funktion das $this dann mit angeben!

MfG



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

6

Montag, 15. Oktober 2007, 14:41

Re: HL2 Server: PHP Klasse?

Scheint mir unlogisch ^^
Habe das mal gemacht:

Quellcode

1
<span class="syntaxdefault">$Verbindung </span><span class="syntaxkeyword">= new </span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"83.142.82.222:27016"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">players</span><span class="syntaxkeyword">(); </span><span class="syntaxdefault"></span>


Gibt keinen Fehler, hört aber auch nicht auf zu laden ^^
Der versucht anscheinend ne Verbindung aufzubauen was wohl nicht klappt!

EDIT: Habs jetzt so - jetz gehts zwar, aber er gibt immer -1 zurück ^^

Quellcode

1
<span class="syntaxdefault">$Verbindung </span><span class="syntaxkeyword">= new </span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"83.142.82.222:27016"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">infos</span><span class="syntaxkeyword">();<br />echo </span><span class="syntaxdefault">$serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"maxplayers"</span><span class="syntaxkeyword">]; </span><span class="syntaxdefault"></span>


So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

7

Montag, 15. Oktober 2007, 14:51

Re: HL2 Server: PHP Klasse?

Muha, ich habs. Es steht zwar jedes mal eine -1 davor, aber die Filtere ich einfach raus!

Quellcode

1
<span class="syntaxdefault">$Verbindung </span><span class="syntaxkeyword">= new </span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"83.142.82.222:27016"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">$Infos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">infos</span><span class="syntaxkeyword">();<br />echo </span><span class="syntaxdefault">str_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"-1"</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">NULL</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$Infos</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"map"</span><span class="syntaxkeyword">]); </span><span class="syntaxdefault"></span>


So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

8

Montag, 15. Oktober 2007, 14:55

Re: HL2 Server: PHP Klasse?

Also, läuft das ganze script?



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

9

Montag, 15. Oktober 2007, 15:07

Re: HL2 Server: PHP Klasse?

Ah, jetzt habe ich den Übeltäter mit der "-1":

Spoiler Spoiler

Quellcode

1
<span class="syntaxdefault"><?php<br /></span><span class="syntaxkeyword">class </span><span class="syntaxdefault">Server </span><span class="syntaxkeyword">{<br />      <br />      var </span><span class="syntaxdefault">$ip</span><span class="syntaxkeyword">;<br />      var </span><span class="syntaxdefault">$port</span><span class="syntaxkeyword">;<br />      var </span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">;<br />      var </span><span class="syntaxdefault">$challenge </span><span class="syntaxkeyword">= -</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">;<br />      <br />      var </span><span class="syntaxdefault">$serverinfo</span><span class="syntaxkeyword">;<br />      var </span><span class="syntaxdefault">$playerlist</span><span class="syntaxkeyword">;<br />      var </span><span class="syntaxdefault">$cvarlist</span><span class="syntaxkeyword">;<br />      <br />      var </span><span class="syntaxdefault">$A2S_SERVERQUERY_GETCHALLENGE </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"W"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// challenge<br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$A2S_INFO </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"TSource Engine Query\0"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// info<br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$A2S_PLAYER </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"U"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// player<br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$A2S_RULES </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"V"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// rules<br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$S2C_CHALLENGE </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"A"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// challenge<br />      <br />      <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$server_address </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">) {<br />            <br />            list(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">port</span><span class="syntaxkeyword">) = </span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">":"</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$server_address</span><span class="syntaxkeyword">);<br />            <br />      }<br />      <br />      function </span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">() {<br />            <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">fsockopen</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"udp://"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">port</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$errno</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$errstr</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">3</span><span class="syntaxkeyword">);<br />            if (!</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">) {<br />                  <br />                  </span><span class="syntaxdefault">$Fehler </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">;<br />                  <br />            }<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// String-Command senden<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$strcmd</span><span class="syntaxkeyword">) {<br />            <br />            </span><span class="syntaxdefault">fwrite</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">sprintf</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'%c%c%c%c%s%c'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$strcmd</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0x00</span><span class="syntaxkeyword">));<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// 1 Byte vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">() {<br />            <br />            return </span><span class="syntaxdefault">ord</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">));<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// 1 Zeichen (1 Byte) vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_char</span><span class="syntaxkeyword">() {<br />           <br />            return </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">);<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// einen int16-Wert (2 Bytes) vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_int16</span><span class="syntaxkeyword">() {<br />            <br />            </span><span class="syntaxdefault">$unpacked </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">unpack</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'sint'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">2</span><span class="syntaxkeyword">));<br />            return </span><span class="syntaxdefault">$unpacked</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">int</span><span class="syntaxkeyword">];<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// einen int32-Wert (4 Bytes) vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">() {<br />           <br />            </span><span class="syntaxdefault">$unpacked </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">unpack</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'iint'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">4</span><span class="syntaxkeyword">));<br />            return </span><span class="syntaxdefault">$unpacked</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">int</span><span class="syntaxkeyword">];<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// einen float32-Wert (4 Bytes) vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_float32</span><span class="syntaxkeyword">() {<br />            <br />            </span><span class="syntaxdefault">$unpacked </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">unpack</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'fint'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">4</span><span class="syntaxkeyword">));<br />            return </span><span class="syntaxdefault">$unpacked</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">int</span><span class="syntaxkeyword">];<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// einen String vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">() {<br />           <br />            while((</span><span class="syntaxdefault">$char </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)) != </span><span class="syntaxdefault">chr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)) {<br />                  <br />                  </span><span class="syntaxdefault">$str </span><span class="syntaxkeyword">.= </span><span class="syntaxdefault">$char</span><span class="syntaxkeyword">;<br />                  <br />            }<br />            <br />            return </span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">;<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// Challenger vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">() {<br />           <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"$this->A2S_SERVERQUERY_GETCHALLENGE"</span><span class="syntaxkeyword">);<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$challenge </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$challenge</span><span class="syntaxkeyword">;<br />            return </span><span class="syntaxdefault">$challenge</span><span class="syntaxkeyword">;<br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">);<br />            <br />      }<br />      <br />      <br />      </span><span class="syntaxcomment">// Infos vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">infos</span><span class="syntaxkeyword">() {<br />            <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">;<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"$this->A2S_INFO"</span><span class="syntaxkeyword">);<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">();<br />            <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"protokoll"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"name"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"map"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"directory"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"discription"</span><span class="syntaxkeyword">]= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"steam_id"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int16</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"players"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"maxplayers"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"bot"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            <br />            return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">;<br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">);<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// Player-Liste vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">players</span><span class="syntaxkeyword">() {<br />            <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"$this_>A2S_PLAYER."</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">);<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$playercount </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />            <br />            for(</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">$playercount</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">++) {<br />                  <br />                  </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">playerlist</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">][</span><span class="syntaxstring">"index"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br />                  </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">playerlist</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">][</span><span class="syntaxstring">"name"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">();<br />                  </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">playerlist</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">][</span><span class="syntaxstring">"frags"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">();<br />                  </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">playerlist</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">][</span><span class="syntaxstring">"time"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'H:i:s'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">round</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_float32</span><span class="syntaxkeyword">(), </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)+</span><span class="syntaxdefault">82800</span><span class="syntaxkeyword">);<br />                  <br />            }<br />            <br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">);<br />            return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">playerlist</span><span class="syntaxkeyword">;<br />            <br />      }<br />      <br />      </span><span class="syntaxcomment">// Rules-Liste (CVARs) vom Server holen<br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">cvars</span><span class="syntaxkeyword">() {<br />            <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br />            <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"$this->A2S_RULES."</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">);<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">();<br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_char</span><span class="syntaxkeyword">();<br />            <br />            </span><span class="syntaxdefault">$cvarcount </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int16</span><span class="syntaxkeyword">();<br />            <br />            for(</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">$cvarcount</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">++) {<br />                  <br />                  </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">cvarlist</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">()] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">();<br />                  <br />            }<br />            <br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">);<br />            return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">cvarlist</span><span class="syntaxkeyword">;<br />            <br />      }<br />}<br /></span><span class="syntaxdefault">?></span>


Ja, es läuft 1a :)
Danke nochmal!

So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

10

Montag, 15. Oktober 2007, 15:23

Re: HL2 Server: PHP Klasse?

Np :P , jetzt habe ich auch endlich ein Script das Funktioniert ^^

MfG



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

11

Freitag, 26. Oktober 2007, 09:25

Re: HL2 Server: PHP Klasse?

Hallo Leute,
Da das Script ja noch in der Entwicklung war,
waren einige Sachen noch nicht fertig oder doppelt.

Ich habe das ganze Script jetzt mal auf den Kopf gestellt und noch ein paar Sachen mit eingebaut.
z.b. "Dedicated", "OS", "Password", "Secure" und "Version"

Nu habe ich aber ein Problem:

Ich kann mir keine Player anzeigen lassen,
Besser gesagt das Script sagt das es 96 Player auf dem Server sind.
Denn jedes mal wenn ich ein "challenge" an den Server sende bekomme
ich kein brauchbares Ergebnis zurück.
Der "challenge" String den ich vom server anfordere ist auch der richtige,
da das 5 Bit 'A' (0x41) ist.
Hat jemand eine Lösung???

So Schaut das Packet aus was ich zurück erwarte,
wen die "anfrage" + "challenge" an den Gameserver gesendet wird:

Spoiler Spoiler



Hier ist der Valve Link zu den Querry's:
http://developer.valvesoftware.com/wiki/Server_Queries">http://developer.valvesoftware.com/wiki/Server_Queries</a>

Ich habe das ganze mal so aufgebaut das die Anzahl Player angezeigt werden:

Spoiler Spoiler

Quellcode

1
<span class="syntaxdefault"><?php <br /><br />$Verbindung </span><span class="syntaxkeyword">= new </span><span class="syntaxdefault">HLServerAbfrage</span><span class="syntaxkeyword">; <br /></span><span class="syntaxdefault">$Verbindung </span><span class="syntaxkeyword">-> </span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"85.14.227.237:27015"</span><span class="syntaxkeyword">); <br /><br /></span><span class="syntaxdefault">$Players </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$Verbindung</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">players</span><span class="syntaxkeyword">(); <br /><br />class </span><span class="syntaxdefault">HLServerAbfrage </span><span class="syntaxkeyword">{ <br /><br />      var </span><span class="syntaxdefault">$ip</span><span class="syntaxkeyword">; <br />      var </span><span class="syntaxdefault">$port</span><span class="syntaxkeyword">; <br />      var </span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">; <br />      var </span><span class="syntaxdefault">$challenge</span><span class="syntaxkeyword">; <br />      var </span><span class="syntaxdefault">$serverinfo</span><span class="syntaxkeyword">; <br />      var </span><span class="syntaxdefault">$playerlist</span><span class="syntaxkeyword">; <br />      var </span><span class="syntaxdefault">$cvarlist</span><span class="syntaxkeyword">; <br /><br />      var </span><span class="syntaxdefault">$A2S_SERVERQUERY_GETCHALLENGE </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"\x57"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// challenge <br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$A2S_INFO </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"TSource Engine Query\x00"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// info <br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$A2S_PLAYER </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"\x55"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// player <br />      </span><span class="syntaxkeyword">var </span><span class="syntaxdefault">$A2S_RULES </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"\x56"</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">// rules <br /><br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">hlserver</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$server_address </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">) { <br />            list(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">port</span><span class="syntaxkeyword">) = </span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">":"</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$server_address</span><span class="syntaxkeyword">); <br />      } <br /><br />      </span><span class="syntaxcomment">// Verbindung zum Server aufbauen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">() { <br /><br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">fsockopen</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"udp://"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">port</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$errno</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$errstr</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">3</span><span class="syntaxkeyword">); <br />            if (!</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">) { <br />                  </span><span class="syntaxdefault">$Fehler </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">; <br />            } <br />      } <br /><br />       </span><span class="syntaxcomment">// String-Command" senden <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$strcmd</span><span class="syntaxkeyword">) { <br />       </span><span class="syntaxdefault">fwrite</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">sprintf</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'%c%c%c%c%s%c'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0xFF</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$strcmd</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0x00</span><span class="syntaxkeyword">)); <br />      } <br /><br />      </span><span class="syntaxcomment">// 1 Byte vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">() { <br />            return </span><span class="syntaxdefault">ord</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)); <br />      } <br /><br />      </span><span class="syntaxcomment">// 1 Zeichen (1 Byte) vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_char</span><span class="syntaxkeyword">() { <br />            return </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">); <br />      } <br />      <br />      </span><span class="syntaxcomment">// einen int16-Wert (2 Bytes) vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_int16</span><span class="syntaxkeyword">() { <br />            </span><span class="syntaxdefault">$unpacked </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">unpack</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'sint'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">2</span><span class="syntaxkeyword">)); <br />            return </span><span class="syntaxdefault">$unpacked</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">int</span><span class="syntaxkeyword">]; <br />      } <br /><br />      </span><span class="syntaxcomment">// einen int32-Wert (4 Bytes) vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">() { <br />            </span><span class="syntaxdefault">$unpacked </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">unpack</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'iint'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">4</span><span class="syntaxkeyword">)); <br />            return </span><span class="syntaxdefault">$unpacked</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">int</span><span class="syntaxkeyword">]; <br />      } <br /><br />      </span><span class="syntaxcomment">// einen float32-Wert (4 Bytes) vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_float32</span><span class="syntaxkeyword">() { <br />            </span><span class="syntaxdefault">$unpacked </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">unpack</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'fint'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">4</span><span class="syntaxkeyword">)); <br />            return </span><span class="syntaxdefault">$unpacked</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">int</span><span class="syntaxkeyword">]; <br />      } <br /><br />      </span><span class="syntaxcomment">// einen String vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">() { <br />            while((</span><span class="syntaxdefault">$char </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)) != </span><span class="syntaxdefault">chr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)) { <br />                  </span><span class="syntaxdefault">$str </span><span class="syntaxkeyword">.= </span><span class="syntaxdefault">$char</span><span class="syntaxkeyword">; <br />            } <br />            return </span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">; <br />      } <br /><br />      </span><span class="syntaxcomment">// Challenger vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">() { <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">A2S_SERVERQUERY_GETCHALLENGE</span><span class="syntaxkeyword">); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$challenge </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">(); <br /><br />            return </span><span class="syntaxdefault">$challenge</span><span class="syntaxkeyword">; <br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">); <br /><br />      } <br />      <br />      </span><span class="syntaxcomment">// Infos vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">infos</span><span class="syntaxkeyword">() { <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this </span><span class="syntaxkeyword">-> </span><span class="syntaxdefault">A2S_INFO</span><span class="syntaxkeyword">); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br /><br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"network_version"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"name"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"map"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"directory"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"discription"</span><span class="syntaxkeyword">]= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"steam_id"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int16</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"players"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"maxplayers"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"bot"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"dedicated"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_char</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"os"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_char</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"password"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"secure"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"version"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">(); <br /><br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">); <br />            return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">serverinfo</span><span class="syntaxkeyword">; <br /><br /><br />      } <br /><br />      </span><span class="syntaxcomment">// Player-Liste vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">players</span><span class="syntaxkeyword">() { <br /><br />              </span><span class="syntaxdefault">$challenge </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">(); <br />              </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">(); <br />              </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this </span><span class="syntaxkeyword">-></span><span class="syntaxdefault">A2S_PLAYER</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$challenge</span><span class="syntaxkeyword">); <br />              </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">(); <br />              </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br /><br />           </span><span class="syntaxdefault">$playercount </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">(); <br />           echo  </span><span class="syntaxstring">'Anzahl der Spieler: '</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$playercount</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'<br><br>'</span><span class="syntaxkeyword">; <br /><br />          </span><span class="syntaxcomment">/*  for($i=0; $i < $playercount; $i++) { <br />                  $this->playerlist[$i]["index"] = $this->get_byte(); <br />                  $this->playerlist[$i]["name"] = $this->get_string(); <br />                  $this->playerlist[$i]["frags"] = $this->get_int32(); <br />                  $this->playerlist[$i]["time"] = date('H:i:s', round($this->get_float32(), 0)+82800); <br /><br />            }    */ <br />            <br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">); <br />            return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">playerlist</span><span class="syntaxkeyword">; <br />      } <br /><br />      </span><span class="syntaxcomment">// Rules-Liste (CVARs) vom Server holen <br />      </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">cvars</span><span class="syntaxkeyword">() { <br /><br />            </span><span class="syntaxdefault">$challenge </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">challenge</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this </span><span class="syntaxkeyword">-></span><span class="syntaxdefault">A2S_RULES</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$challenge</span><span class="syntaxkeyword">); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">(); <br />            </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_char</span><span class="syntaxkeyword">(); <br /><br />            </span><span class="syntaxdefault">$cvarcount </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int16</span><span class="syntaxkeyword">(); <br /><br />            for(</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">$cvarcount</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">++) { <br />                  </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">cvarlist</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">()] = </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_string</span><span class="syntaxkeyword">(); <br />            } <br /><br />            </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">); <br />            return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">cvarlist</span><span class="syntaxkeyword">; <br />      } <br />} <br /></span><span class="syntaxdefault">?></span>


MfG HSFighter



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

12

Freitag, 26. Oktober 2007, 14:58

Re: HL2 Server: PHP Klasse?

So....
nach langem hin und her Probieren, und 20 mal Durchlesen von:
http://developer.valvesoftware.com/wiki/Server_Queries
Habe ich es jetzt zum laufen bekommen.
Es lag wirklich an der "challenge".
Habe sie nicht richtig ausgelesen!

Lösung:

Neue Funktion eingebaut:

Quellcode

1
<span class="syntaxdefault">function get_4</span><span class="syntaxkeyword">()<br />{<br /></span><span class="syntaxdefault">   return fread</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 4</span><span class="syntaxkeyword">);<br />}</span><span class="syntaxdefault"> </span>
Challenge Funktion geändert:

Quellcode

1
<span class="syntaxdefault">function challenge</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">            $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">connect</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">            $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">send_strcmd</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">A2S_SERVERQUERY_GETCHALLENGE</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">            $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_int32</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">            $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_byte</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">            $challenge </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">get_4</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">            return $challenge</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fp</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">      </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> </span>
Noch schnell eine html ausgabe dazu...Fertig! :P

MfG HSFighter



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

HSFighter

Administrator

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

13

Montag, 10. Dezember 2007, 10:28

Re: HL2 Server: PHP Klasse?

So,

Ich habe das Script mit einem Template von mir verknüpft.
Hier mal ein kleines Anwendungsbeispiel wie man die HL2 Server: PHP Klasse verwenden könnte:

http://www.server.hsfighter.net

MfG HSFighter



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

Chrisber

Administrator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 1 030

Wohnort: localhost

Rootserver vorhanden: Ja

  • Nachricht senden

14

Donnerstag, 27. Dezember 2007, 02:18

Re: HL2 Server: PHP Klasse?

http://forum.sourceserver.info/viewtopic.php?f=64&t=952&p=6165#p6165">viewtopic.php?f=64&t=952&p=6165#p6165<

So long, Chris
Und das letzte, was gesagt wird, wenn die Welt untergeht, ist: das ist technisch unmöglich.