Показать сообщение отдельно

  #3  
Старый 07.06.2009, 00:34
Player#1
Познающий
Регистрация: 11.11.2008
Сообщений: 77
С нами: 9208644

Репутация: 99
Thumbs up

Вот отличный рабочий скрипт.
Могу помочь поставить его на сайт, пиши в личку...

Код:
<?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>";



?>
 
Ответить с цитированием