new_forward
Профессор
- Регистрация
- 5 Май 2008
- Сообщения
- 673
- Реакции
- 44
- Автор темы
- #1
Доброго времени суток! Есть ли кого такая функция, что бы нормально список игроков вытягивала...?
Вот нашел одну, так она либо не правильно тянет...видно из-за имен игроков со всякими закарлючками...
Для просмотра ссылки Войдиили Зарегистрируйся: стоит приводить полный скрипт, у тебя функций не хватает.
Похоже что взято отсюда Для просмотра ссылки Войдиили Зарегистрируйся
Вот нашел одну, так она либо не правильно тянет...видно из-за имен игроков со всякими закарлючками...
PHP:
function getString(&$packet){
$str = "";
$n = strlen($packet);
for($i=0;($packet[$i]!=chr(0)) && ($i < $n);++$i)
$str .= $packet[$i];
$packet = substr($packet, strlen($str));
return trim($str);
}
function playersInfo($server) {
list($ip,$port) = explode(":", $server);
$array = array();
$fp = @fsockopen('udp://'.$ip, $port);
if($fp) {
stream_set_timeout($fp, 2);
$command = pack("V", -1) . 'W';
fwrite($fp, $command, strlen($command));
$temp = fread($fp, 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, 4);
$status = socket_get_status($fp);
if($status['unread_bytes']>0) {
//echo $status['unread_bytes'];
$temp = fread($fp, $status['unread_bytes']);
while(strlen($temp) > 0) {
$player['name'] = getString($temp);
$temp = substr($temp, 1);
$lo = (ord($temp[1]) << 8) | ord($temp[0]);
$hi = (ord($temp[2]) << 8) | ord($temp[3]);
$player['kills'] = ($hi << 16) | $lo;
$temp = substr($temp, 4);
$f = @unpack("f1float", $temp);
$temp = substr($temp, 4);
$player['time'] = gmdate("H:i:s", (int)$f['float']);
$array[] = $player;
}
usort($array, "sortByKills");
}
}
return $array;
}
Для просмотра ссылки Войди
Похоже что взято отсюда Для просмотра ссылки Войди