
07.06.2009, 00:34
|
|
Познающий
Регистрация: 11.11.2008
Сообщений: 77
С нами:
9208644
Репутация:
99
|
|
Вот отличный рабочий скрипт.
Могу помочь поставить его на сайт, пиши в личку...
Код:
<?php
if(!function_exists('getmicrotime'))
{
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
}
$ip="217.170.80.4";
$port="27015";
$ip = gethostbyname($ip);
$timeStart = getmicrotime();
$fp = fsockopen('udp://'.$ip, $port) or die("ERROR!!!");
stream_set_timeout($fp, 2);
if($fp)
{
fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\0\r");
$temp = fread($fp, 4);
$status = socket_get_status($fp);
if($status['unread_bytes']>0)
{
$temp = fread($fp, $status['unread_bytes']);
$server['ping'] = (int)((getmicrotime() - $timeStart)*1000);
$array = array();
$pos = 0;
while($pos !== false)
{
$pos2 = strpos($temp, "\0", $pos+1);
$array[] = substr($temp, $pos+1, $pos2-$pos)."\n";
$pos = $pos2;
}
$server['status'] = 'on';
if( strpos($array[0], $ip) !== 0)
{
$server['players'] = ord($array[5][0]);
$server['maxplayers'] = ord($array[5][1]);
$server['name'] = trim(substr($array[0], 1));
$server['map'] = trim($array[1]);
$server['game'] = trim($array[2]);
}
else
{
$server['players'] = ord($array[5][0]);
$server['maxplayers'] = ord($array[5][1]);
$server['name'] = trim($array[1]);
$server['map'] = trim($array[2]);
$server['game'] = trim($array[3]);
}
$command = pack("V", -1) . 'W';
fwrite($fp, $command, strlen($command));
$temp = fread($fp, 1500);
$temp = substr($temp, 5);
$lo = (ord($temp[1]) << 8) | ord($temp[0]);
$hi = (ord($temp[3]) << 8) | ord($temp[2]);
$data = "\xFF\xFF\xFF\xFF\x55".pack("V", ($hi << 16) | $lo);
fwrite($fp, $data);
$temp = fread($fp, 5);
$status = socket_get_status($fp);
if($status['unread_bytes']>0)
{
$temp = fread($fp, $status['unread_bytes']);
$array = array();
$temp = substr($temp, 1);
for($i=1;$i<=$server['players'];$i++)
{
$temp = substr($temp, 1);
$pos = strpos($temp, "\0");
$name = substr($temp, 0, $pos);
$temp = substr($temp, $pos+1);
$lo = (ord($temp[1]) << 8) | ord($temp[0]);
$hi = (ord($temp[2]) << 8) | ord($temp[3]);
$temp = substr($temp, 4);
$kills = ($hi << 16) | $lo;
$f = @unpack("f1float", $temp);
$temp = substr($temp, 4);
$time = (int)$f['float'];
if(trim($name))
$server['stats'][] = array("name" => $name, "kills" =>
$kills,
"time" =>
gmdate("H:i:s", $time));
}
}
}
else
$server['status'] = 'off';
}
echo "<pre>";
print_r($server);
echo "</pre>";
?>
|
|
|