Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   скрипты по типу http://cs-monitoring.ru/ (https://forum.antichat.xyz/showthread.php?t=123855)

mixdw 06.06.2009 02:06

скрипты по типу http://cs-monitoring.ru/
 
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 серваки... хотя это извращение)
лучше купи у кого-нить.


Время: 20:41