Diese Klasse erlaubt es, Befehle an einen Half-Life (HL), Counter-Strike (Cs), etc. Server zu senden. So lassen sich z.B. aktuelle Statistiken über Karte (Map), Spieler, etc. ausgeben
<?php
/*
RCON Halflife Admin Klasse
Aktion: PHP Scripte für die armen dieser Welt
Der Erlös geht für mein Pausenbrot drauf
Copyright (c) 2004 by Phillip 'Firebird' Berndt
*/
class hlAdmin
{
var $sockId;
function hlAdmin($server, $port)
{
$this->sockId = fsockopen('udp://'.$server, $port, &$errno, &$errstr, 15);
if(!$this->sockId)
die("<br /><br />Error($errno): $errstr<br />");
}
function executeCommand($command)
{
$cmdIdentifier = "\xFF\xFF\xFF\xFF";
fwrite($this->sockId, $cmdIdentifier.$command);
$retVal = fread($this->sockId, 5);
if(substr($retVal, 0, 4) != $cmdIdentifier)
return false;
return substr($retVal, 4);
}
function getString()
{
while(ord($mChar = fgetc($this->sockId)) != 0)
{
$retVal .= $mChar;
}
return $retVal;
}
function readBytes($count)
{
return fread($this->sockId, $count);
}
}
// Testscript
$testServer = new hlAdmin('213.202.198.59', 27015);
// Server informationen
if($testServer->executeCommand('info') == 'C')
{
echo('Server IP: '.$testServer->getString().'<br />
Server Host: '.$testServer->getString().'<br />
Server Map: '.$testServer->getString().'<br />
Server Mod: '.$testServer->getString().'<br />
Server Description: '.$testServer->getString().'<br />');
$testServer->readBytes(3);
echo('<br />
');
}
else
{
echo('Verbindung fehlgeschlagen');
}
// WICHTIG:
// Vor Rcon Befehlen immer den Text "rcon " senden
// Also z.B. ('rcon rcon_password 123'), sonst kommt ein
// Fehler!!
// Irgendwas zum Beweisen, dass auch andere Befehle gehen :D
// Müsste kommen, dass ich keine rcon Rechte hab ;)
if($testServer->executeCommand('rcon mp_foobar = 1'))
echo($testServer->getString());
?>