http://cs-monitoring.ru/ http://control-strike.ru/ Есть какие-нибудь бесплатные в паблике аналоги данных скриптов?
$data=monitor_cs(ip, port, halflife, info); echo $data[hostname], $data[mapname], etc... Code: 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; } } а дальше сам )) не думаю что найдешь
Вот отличный рабочий скрипт. Могу помочь поставить его на сайт, пиши в личку... Code: <?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>"; ?>
Спасибо конечно,но такие маленькие скрипты у меня есть. Лучше я уже поспользуюсь Phgstats если на то пошло.
юзай lgsl, туда вполне реально прикрутить голосовалку да vip серваки... хотя это извращение) лучше купи у кого-нить.