示例#1
0
文件: swat4.php 项目: nopuls/dzcp
function server_query_swat4($ip, $port, $q_port, $request)
{
    global $server_timeout;
    $q_port = empty($q_port) ? $port + 1 : $q_port;
    if ($request == "info") {
        $challenge = "\\basic\\\\info\\\\rules\\";
    }
    if ($request == "players") {
        $challenge = "\\players\\";
    }
    @set_time_limit(2);
    $fp = @fsockopen("udp://{$ip}", $q_port, $errno, $errstr, $server_timeout);
    if (!$fp) {
        return FALSE;
    }
    stream_set_timeout($fp, 1, 0);
    stream_set_blocking($fp, true);
    fwrite($fp, $challenge);
    $buffer = fread($fp, 4096);
    if (!$buffer) {
        fclose($fp);
        return FALSE;
    }
    if (!strstr($buffer, "\\final\\")) {
        $buffer .= fread($fp, 4096);
    }
    if ($request == "players" && !strstr($buffer, "\\player_0\\") && strstr($buffer, "\\final\\")) {
        $buffer = fread($fp, 4096) . $buffer;
    }
    fclose($fp);
    $buffer = trim($buffer);
    if ($request == "info") {
        $buffer = explode("\\player_0", $buffer);
        $buffer = $buffer[0];
        $buffer = explode("\\leader_0", $buffer);
        $buffer = $buffer[0];
        $rawsetting = explode("\\", $buffer);
        for ($i = 1; $i < count($rawsetting); $i++) {
            $rawsetting[$i] = strtolower("{$rawsetting[$i]}");
            if ($rawsetting[$i] != "final" && $rawsetting[$i] != "queryid") {
                $setting[$rawsetting[$i]] = $rawsetting[$i + 1];
            }
            $i++;
        }
        unset($data);
        $data['gamemod'] = $setting['gamename'];
        $data['hostname'] = $setting['sv_hostname'];
        if (!$data['hostname']) {
            $data['hostname'] = $setting['hostname'];
        }
        $data['hostname'] = parse_color($data['hostname'], 'swat4');
        $data['mapname'] = str_replace("_", " ", $setting['mapname']);
        $data['players'] = $setting['numplayers'];
        $data['maxplayers'] = $setting['maxplayers'];
        $data['password'] = $setting['password'];
        return $data;
    }
    if ($request == "players") {
        $rawsetting = explode("\\", $buffer);
        for ($i = 1; $i < count($rawsetting); $i++) {
            if (!strstr($rawsetting[$i], "_")) {
                $i++;
                continue;
            }
            $rawsetting[$i] = strtolower("{$rawsetting[$i]}");
            $buffer = explode("_", $rawsetting[$i], 2);
            if ($buffer[0] == "player") {
                $buffer[0] = "name";
            }
            if ($buffer[0] == "playername") {
                $buffer[0] = "name";
            }
            if ($buffer[0] == "frags") {
                $buffer[0] = "score";
            }
            if ($buffer[0] == "ngsecret") {
                $buffer[0] = "stats";
            }
            if ($buffer[0] == "ping" && !$rawsetting[$i + 1]) {
                $buffer[0] = "null";
            }
            if (is_numeric($buffer[1])) {
                $player[$buffer[1] + 1][$buffer[0]] = $rawsetting[$i + 1];
            }
            $i++;
        }
        return $player;
    }
}
示例#2
0
<?php

$height = 18;
$width = 18;
$colors_list = array("000000", "ffffff", "ff0000", "ffc000", "ffff00", "92d050", "00b050", "00b0f0", "0070c0");
for ($i = 0; $i < count($colors_list); $i++) {
    $color = parse_color($colors_list[$i]);
    $im = imagecreate($width, $height);
    $color = imagecolorallocate($im, $color['R'], $color['G'], $color['B']);
    imagefilledrectangle($im, 0, 0, $width, $height, $color);
    imagepng($im, "../imgs/icons/colors/color_" . $colors_list[$i] . ".png");
}
function parse_color($color)
{
    $final = array();
    $final['R'] = hexdec(substr($color, 0, 2));
    $final['G'] = hexdec(substr($color, 2, 2));
    $final['B'] = hexdec(substr($color, 4, 2));
    return $final;
}
示例#3
0
文件: farcry.php 项目: nopuls/dzcp
function server_query_farcry($ip, $port, $q_port, $request)
{
    global $server_timeout;
    $q_port = empty($q_port) ? $port + 123 : $q_port;
    @set_time_limit(2);
    $fp = @fsockopen("udp://{$ip}", $q_port, $errno, $errstr, $server_timeout);
    if (!$fp) {
        return FALSE;
    }
    stream_set_timeout($fp, 1, 0);
    stream_set_blocking($fp, true);
    fwrite($fp, "s");
    $buffer = fread($fp, 4096);
    fclose($fp);
    if (!$buffer) {
        return FALSE;
    }
    $buffer = substr($buffer, 4);
    $buffer_part = explode("", $buffer, 2);
    $buffer = $buffer_part[0];
    $position = 0;
    do {
        $rawsetting[] = substr($buffer, $position + 1, ord($buffer[$position]) - 1);
        $position = $position + ord($buffer[$position]);
    } while ($position < strlen($buffer));
    $setting['game'] = $rawsetting[0];
    $setting['port'] = $rawsetting[1];
    $setting['hostname'] = parse_color(preg_replace("/\\\$\\d/", "", $rawsetting[2]), 'farcry');
    $setting['mode'] = $rawsetting[3];
    $setting['mapname'] = $rawsetting[4];
    $setting['version'] = $rawsetting[5];
    $setting['password'] = $rawsetting[6];
    $setting['players'] = $rawsetting[7];
    $setting['maxplayers'] = $rawsetting[8];
    for ($i = 9; $i <= count($rawsetting); $i = $i + 2) {
        if (!trim($rawsetting[$i])) {
            continue;
        }
        $rawsetting[$i] = strtolower("{$rawsetting[$i]}");
        $setting[$rawsetting[$i]] = $rawsetting[$i + 1];
    }
    $data['gamemod'] = $setting['gr_ssmod'];
    $data['hostname'] = $setting['hostname'];
    $data['mapname'] = $setting['mapname'];
    $data['players'] = $setting['players'];
    $data['maxplayers'] = $setting['maxplayers'];
    $data['password'] = $setting['password'];
    if ($request == "info") {
        return $data;
    }
    $buffer = $buffer_part[1];
    if (!$buffer[0]) {
        return FALSE;
        exit;
    }
    $player_id = 0;
    $position = 0;
    do {
        unset($field_list);
        if (ord($buffer[$position]) & 1) {
            $field_list[] = "name";
        }
        if (ord($buffer[$position]) & 2) {
            $field_list[] = "team";
        }
        if (ord($buffer[$position]) & 4) {
            $field_list[] = "skin_NOTUSED";
        }
        if (ord($buffer[$position]) & 8) {
            $field_list[] = "score";
        }
        if (ord($buffer[$position]) & 16) {
            $field_list[] = "ping";
        }
        if (ord($buffer[$position]) & 32) {
            $field_list[] = "time";
        }
        $player_id++;
        $position++;
        foreach ($field_list as $field) {
            $increment = ord($buffer[$position]);
            $player[$player_id][$field] = substr($buffer, $position + 1, $increment - 1);
            if ($field == "name") {
                $player[$player_id] = preg_replace("/\\\$\\d/", "", $player[$player_id]);
            }
            $position += $increment;
        }
    } while ($position < strlen($buffer));
    return $player;
}