EngineGP/system/library/games/query/MtaQuery.php
2023-05-05 04:17:19 +03:00

91 lines
2.5 KiB
PHP

<?php
if (!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
class MtaQuery
{
private $stack = null;
public function __construct($ip, $port = 22003)
{
$this->stack = fsockopen('udp://' . $ip, $port + 123, $errorNum, $errorString, 2);
socket_set_timeout($this->stack, 2);
}
public function getInfo($pl = false)
{
fwrite($this->stack, 's');
$buffer = fread($this->stack, 4096);
if (!$buffer)
return NULL;
$buffer = substr($buffer, 4);
$server_info = array();
$server_info['gamename'] = $this->cut_pascal($buffer, 1, -1);
$server_info['hostport'] = $this->cut_pascal($buffer, 1, -1);
$server_info['hostname'] = $this->cut_pascal($buffer, 1, -1);
$server_info['gamemode'] = $this->cut_pascal($buffer, 1, -1);
$server_info['map'] = $this->cut_pascal($buffer, 1, -1);
$server_info['version'] = $this->cut_pascal($buffer, 1, -1);
$server_info['password'] = $this->cut_pascal($buffer, 1, -1);
$server_info['players'] = $this->cut_pascal($buffer, 1, -1);
$server_info['playersmax'] = $this->cut_pascal($buffer, 1, -1);
while ($buffer && $buffer[0] != "\x01") {
$item_key = strtolower($this->cut_pascal($buffer, 1, -1));
$item_value = $this->cut_pascal($buffer, 1, -1);
$server_info[$item_key] = $item_value;
}
if (!$pl)
return $server_info;
$buffer = substr($buffer, 1);
$i = 1;
while ($buffer) {
$bit_flags = $this->cut_byte($buffer, 1);
$field_list = array('name', '', '', '', 'ping', '');
foreach ($field_list as $item_key) {
$item_value = $this->cut_pascal($buffer, 1, -1);
if (!$item_key)
continue;
$server_info['players_list'][$i][$item_key] = $item_value;
}
$i += 1;
}
return $server_info;
}
private function cut_pascal(&$buffer, $start_byte = 1, $length_adjust = 0, $end_byte = 0)
{
$length = ord(substr($buffer, 0, $start_byte)) + $length_adjust;
$string = substr($buffer, $start_byte, $length);
$buffer = substr($buffer, $start_byte + $length + $end_byte);
return $string;
}
private function cut_byte(&$buffer, $length)
{
$string = substr($buffer, 0, $length);
$buffer = substr($buffer, $length);
return $string;
}
}
?>