Здравствуйте.
Собственно испокон веков стоял маленький мониторинг позволяющий посредством IRC скрипта выводить с бота на канале информацию с сервера. Но недавно, после обновления сервера до последнего билда (4554), часть запросов, а именно amx_nextmap и amx_timeleft, показывать перестало. При том обычные info запросы отображаются отлично.
Вот веб часть мониторинга:
CODE
<?php
/* Config */
$server = "твой ИП";
$port = твой порт;
/* End of config */
$info = query($server, $port);
$settings = settings($server, $port);
echo "<cut>" . $info['name'] . " - ".$server.":".$port."</cut>\n";
echo "<cut>\002Сейчас карта:\002 " . $info['map'] . "; \002Следушия карта:\002 " . $settings['amx_nextmap'] . "</cut>\n";
echo "<cut>\002До смены карты осталось:\002 " . $settings['amx_timeleft'] . "; \002Игроков:\002 " . $info['slots'] . "</cut>\n";
/* Query Common Function */
function query($server, $port)
{
$fp = fsockopen ("udp://".$server,$port);
if ($fp)
{
fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
socket_set_timeout($fp,1);
if ( $fp )
{
$st=fread($fp,1);
$r=socket_get_status($fp);
$r=$r["unread_bytes"];
if ( $r == 0 ) { $r = 1; }
$st.=fread($fp,$r);
fclose($fp);
$st=substr($st,5);
$address=SubStr($st,0,StrPos($st,chr(0)));
$address=str_replace(chr(0),"|",$address);
$st=SubStr($st,StrPos($st,chr(0))+1);
$name=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$map=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$current=ord(SubStr($st,0,1));
$max=ord(SubStr($st,1,1));
$serverSlots = $current . "/" . $max;
}
else
{
$name = 'n/a';
$map = 'n/a';
$serverSlots = 'n/a';
}
}
$data = array ("name" => $name, "map" => $map, "slots" => $serverSlots);
return $data;
}
/* Query Settings Function */
function settings($ip, $port)
{
$fp = @fsockopen("udp://$ip", $port, $errno, $errstr, 1);
if (!$fp) { return FALSE; }
stream_set_timeout($fp, 1, 0); stream_set_blocking($fp, true);
$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);
$challenge = "\xFF\xFF\xFF\xFFV".$challenge_code;
fwrite($fp, $challenge);
$buffer = fread($fp, 4096);
if (!$buffer) { fclose($fp); return FALSE; }
$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));
}
fclose($fp);
if (!trim($buffer)) { return FALSE; }
// $buffer[0] = datatype = E for steam rules
// ord($buffer[1]) = number of rules returned
$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;
}
?>
Есть ли знающие люди которые смогли бы помочь в решении данной проблемы? Мозг уже кипит, в каком направлении думать уже не представляю. Заранее спасибо.