Функция получения списка игроков CS сервера?

new_forward

Профессор
Регистрация
5 Май 2008
Сообщения
673
Реакции
44
Доброго времени суток! Есть ли кого такая функция, что бы нормально список игроков вытягивала...?

Вот нашел одну, так она либо не правильно тянет...видно из-за имен игроков со всякими закарлючками...

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;
}

Для просмотра ссылки Войди или Зарегистрируйся: стоит приводить полный скрипт, у тебя функций не хватает.
Похоже что взято отсюда Для просмотра ссылки Войди или Зарегистрируйся
 
latteo, полный скрипт тут не нужен эта функция как раз сама выводит массив игроков в онлайне... только вот с одних серверов правильно выводит а с других нет...
 
Покажи как неправильно выводит, либо дай ip сервера, т.к. у меня везде получается, что $status['unread_bytes'] === 0 и следовательно дальше не узнать как и что...
 
latteo, полный скрипт тут не нужен эта функция как раз сама выводит массив игроков в онлайне... только вот с одних серверов правильно выводит а с других нет...
Быть такого не может. У тебя есть строка $player['name'] = getString($temp); и без функции getString объявленной в скрипте, скрипт будет падать с Fatal error: Call to undefined function. А вот содержимое этой функции ты не привёл...
 
Да извиняюсь, думал она стандартная... добавил функцию getString в первый пост.
 
Назад
Сверху