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; } }
<?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; }
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; }