PDA

Просмотр полной версии : скрипты по типу http://cs-monitoring.ru/


mixdw
06.06.2009, 02:06
http://cs-monitoring.ru/
http://control-strike.ru/
Есть какие-нибудь бесплатные в паблике аналоги данных скриптов?

Winst0n
06.06.2009, 11:19
$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;
}
}

а дальше сам ))
не думаю что найдешь :rolleyes:

Player#1
07.06.2009, 00:34
Вот отличный рабочий скрипт.
Могу помочь поставить его на сайт, пиши в личку...

<?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>";



?>

mixdw
07.06.2009, 02:31
Спасибо конечно,но такие маленькие скрипты у меня есть.
Лучше я уже поспользуюсь Phgstats если на то пошло.

gLuk!
07.06.2009, 09:59
юзай lgsl, туда вполне реально прикрутить голосовалку да vip серваки... хотя это извращение)
лучше купи у кого-нить.