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

  #2  
Старый 06.06.2009, 11:19
Winst0n
Участник форума
Регистрация: 19.08.2008
Сообщений: 104
Провел на форуме:
573945

Репутация: 13
По умолчанию

$data=monitor_cs(ip, port, halflife, info);
echo $data[hostname], $data[mapname], etc...

Код:
 function monitor_cs($ip, $port, $game, $request)
    {
		   $fp = @fsockopen("udp://$ip", $port, $errno, $errstr, 1);

			if (!$fp) { return FALSE; } 

			    stream_set_timeout($fp, 1, 0);
			    stream_set_blocking($fp, true);  

	 if (($request == "settings" || $request == "players"))
	     {
	    $challenge_code = "\xFF\xFF\xFF\xFF\x57"; 
	          fwrite($fp, $challenge_code);
	         $buffer = fread($fp, 4096);
	        if (!trim($buffer)) { fclose($fp); return FALSE; }
			$challenge_code = substr($buffer, 5, 4);
    }

		   if ($request == "info")     { $challenge = "\xFF\xFF\xFF\xFFTSource Engine Query\x00"; }
		  if ($request == "players")  { $challenge = "\xFF\xFF\xFF\xFFU".$challenge_code;        }
		        if ($request == "settings") { $challenge = "\xFF\xFF\xFF\xFFV".$challenge_code;        }


		     fwrite($fp, $challenge);

		  $buffer = fread($fp, 4096);

		      if (!$buffer) { fclose($fp); return FALSE; }     

		   if ($request == "settings")
		       {
		$second_packet = fread($fp, 4096);

		 if (strlen($second_packet) > 0)
		{
		 $reverse_check = dechex(ord($buffer[8]));      

		  if ($reverse_check[0] == "1")
		   {
		      $tmp           = $buffer;                 
		         $buffer        = $second_packet;
		            $second_packet = $tmp;
		      }

		$buffer        = substr($buffer, 13);         
		 $second_packet = substr($second_packet, 9);   
		  $buffer        = trim($buffer.$second_packet);
		 }
		    else
		   {
		    $buffer = trim(substr($buffer, 4)); 
		   }
		}
		    else
		 {
		       $buffer = trim(substr($buffer, 4)); 
		    }

		        fclose($fp);

		     if (!trim($buffer)) { return FALSE; }
		     //---------------------------------------------------------+
		   if ($request == "info")
		{

		   unset($data);

		  $tmp = explode("\x00", $buffer);

		 $place = strlen($tmp[0].$tmp[1].$tmp[2].$tmp[3].$tmp[4]) + 5;
		$data['gamemod']        = $tmp[3];
		      $data['hostname']       = $tmp[1];
		     $data['mapname']        = $tmp[2];
		    $data['players']        = ord($buffer[$place]);
		   $data['maxplayers']     = ord($buffer[$place + 1]);
		         $data['password']       = ord($buffer[$place + 5]);
				 $data['cs_players']	=	$cs_players;
		  //--- NONSTANDARD INFORMATION ----------------------------+
		      $data['datatype']       = $buffer[0];               // m for steam info
		      $data['version']        = ord($buffer[$place + 2]); // Network Version
		      $data['description']    = $tmp[4];
		      $data['server_type']    = $buffer[$place + 3];      // D edicated or L isten
			  $data['server_os']      = $buffer[$place + 4];      // W indows or L inux
			  $data['server_secure']  = ord($tmp[14]);            // VAC
			  $data['server_bots']    = ord($tmp[15]);            // Number of Bots
			  $data['ip']     		 = $ip;
			  $data['port']     		= $port;
					      //--------------------------------------------------------+
					            return $data;  
						        }
							//---------------------------------------------------------+
							    if ($request == "players")
							        {

									          $player_number = 0;
										        $position = 2;                                          

		do
		      {
		       $player_number++;                                      

		        $player[$player_number]['id'] = ord($buffer[$position]);
		         $position ++;                                             

		          while($buffer[$position] != "\x00" && $position < 4000)   
		           {
		              $player[$player_number]['name'] .= $buffer[$position];  
			                $position ++;
					        }
						        $player[$player_number]['score'] = (ord($buffer[$position + 1]))
							                                         + (ord($buffer[$position + 2]) * 256)
		                     + (ord($buffer[$position + 3]) * 65536)
		                           + (ord($buffer[$position + 4]) * 16777216);

		if ($player[$player_number]['score'] > 2147483648) { $player[$player_number]['score'] -= 4294967296; }  

		 $time = substr($buffer, $position + 5, 4);               
		  if (strlen($time) < 4) { return FALSE; }               
		   list(,$time) = unpack("f", $time);                
		    $time = mktime(0, 0, $time);                          
		     $player[$player_number]['time'] = date("H:i:s", $time);  

		      $position += 9;
		     }
		    while ($position < strlen($buffer));                   
		          return $player;
		       }
		//---------------------------------------------------------+
		    if ($request == "settings")
		        {

			           $tmp     = substr($buffer, 2); 
				         $rawdata = explode("\x00", $tmp);

		for($i=1; $i<count($rawdata); $i=$i+2)
		      {
		       $rawdata[$i] = strtolower($rawdata[$i]);  
		        $setting[$rawdata[$i]] = $rawdata[$i+1];  
		       }

		      return $setting; 
		   }
 }
а дальше сам ))
не думаю что найдешь
 
Ответить с цитированием