За последние 24 часа нас посетили 17800 программистов и 1625 роботов. Сейчас ищут 1866 программистов ...

запрос к игровому серверу

Тема в разделе "PHP для новичков", создана пользователем Almere, 2 июн 2012.

  1. Almere

    Almere Активный пользователь

    С нами с:
    8 фев 2011
    Сообщения:
    53
    Симпатии:
    0
    Здраствуйте.

    Перейду сразу к делу. Есть проблема с функцией:

    Код (Text):
    1.  
    2.  
    3. <?php
    4. function playersInfo($server) {
    5.     list($ip,$port) = explode(":", $server);
    6.     $array = array();
    7.     $fp = @fsockopen("udp://".$ip, $port);
    8.     if($fp) {
    9.         stream_set_timeout($fp, 2);
    10.         $command = pack("V", -1) . "W";
    11.         fwrite($fp, $command, strlen($command));
    12.         $temp = fread($fp, 5);
    13.         $lo = (ord($temp[1]) << 8) | ord($temp[0]);
    14.         $hi = (ord($temp[3]) << 8) | ord($temp[2]);
    15.         $data = "xFFxFFxFFxFFx55".pack("V", ($hi << 16) | $lo);
    16.         fwrite($fp, $data);
    17.         $temp = fread($fp, 4);
    18.         $status = socket_get_status($fp);
    19.         if($status["unread_bytes"]>0) {
    20.             echo $status["unread_bytes"];
    21.             $temp = fread($fp, $status["unread_bytes"]);
    22.             while(strlen($temp) > 0) {
    23.                 $player["name"] = getString($temp);
    24.                 $temp = substr($temp, 1);
    25.                 $lo = (ord($temp[1]) << 8) | ord($temp[0]);
    26.                 $hi = (ord($temp[2]) << 8) | ord($temp[3]);
    27.                 $player["kills"] = ($hi << 16) | $lo;
    28.                 $temp = substr($temp, 4);
    29.                 $f = @unpack("f1float", $temp);
    30.                 $temp = substr($temp, 4);
    31.                 $player["time"] = gmdate("H:i:s", (int)$f["float"]);
    32.                 $array[] = $player;
    33.             }
    34.             usort($array, "sortByKills");
    35.         }
    36.     }
    37.     return $array;
    38. }
    39. ?>
    В итоге я получаю ответ от сервера - получаю имена игроков, но не все. Тоесть некоторые игроки отображаются. а некоторые места из массива пустые. Почему ? Подкиньте идею, я уже задолбался искать.

    Я вывожу так:

    Код (Text):
    1. <?php
    2.  
    3. require_once "maincore.php";
    4. require_once BASEDIR."include/function.php";
    5.  
    6.     if(empty($_GET['id'])){
    7.         die('Hacking attempt!');
    8.     }
    9.  
    10.     $servid =  strip_tags( stripslashes ( trim ( strtolower ( $_GET['id'] ))));
    11.     if(!is_numeric($servid)){
    12.         die('Hacking attempt!');
    13.     }
    14.  
    15. if($servid){
    16.         $q = dbquery("SELECT * FROM ".DB_SERVERS." WHERE server_id = ".$servid." ");
    17.         $serv=dbarray_fetch($q);
    18.  
    19.         if(count($serv['server_name']) <= 0){
    20.             die('server not found!');
    21.         }
    22.         echo $serv['server_ip'], "<br>";
    23.         $players_info = playersInfo($serv['server_ip']);
    24.         foreach($players_info as $v)
    25.         {
    26.             if(empty($v['name'])){
    27.                 echo 'empty here';
    28.             }
    29.             echo $v['name'], '<hr><br>';
    30.         }
    31. }
    подайте идею, люди добрые? Может библиотека какая нужна? Или что-то не правильно вывожу?

    Сам скрипт: http://cs-load.ru/servers/players.php?id=2