0, PRIVATE_FIRST_CLASS => 150, LANCE_CORP => 500, CORPORAL => 800, SERGANT => 2500, STAFF_SERGANT => 5000, GUNNERY_SERGANT => 8000, MASTER_SERGANT => 20000, FIRST_SERGANT => 20000, MASTER_GUNNERY_SERGANT => 50000, SERGEANT_MAJOR => 50000, SERGEANT_MAJOR_OF_CORPS => 50000, SECOND_LIEUTENANT => 60000, FIRST_LIEUTENANT => 75000, CAPTAIN => 90000, MAJOR => 115000, LIEUTENANT_COLONEL => 125000, COLONEL => 150000, BRIGADIER_GENERAL => 180000, MAJOR_GENERAL => 180000, LIEUTENANT_GENERAL => 200000, GENERAL => 200000 ); // web request stuff require_once("http.php"); $query = "nick=NOTHING"; if(isset($_GET['pid'])) { $query = "pid=".$_GET['pid']; }else if(isset($_GET['nick'])) { $query = "pid=".get_pid($_GET['nick']); } $req = new http_class(); $req->timeout = 0; $req->data_timeout = 0; $req->user_agent="GameSpyHTTP/1.0"; // this is overkill I know but as of November 8 2005, EA requires this // entire query. If all columns are not present, nothing is returned $url = "http://BF2Web.gamespy.com/ASP/getplayerinfo.aspx?".$query."&info=per*,cmb*,twsc,cpcp,cacp,dfcp,kila,heal,rviv,rsup,rpar,tgte,dkas,dsab,cdsc,rank,cmsc,kick,kill,deth,suic,ospm,klpm,klpr,dtpr,bksk,wdsk,bbrs,tcdr,ban,dtpm,lbtl,osaa,vrk,tsql,tsqm,tlwf,mvks,vmks,mvn*,vmr*,fkit,fmap,fveh,fwea,wtm-,wkl-,wdt-,wac-,wkd-,vtm-,vkl-,vdt-,vkd-,vkr-,atm-,awn-,alo-,abr-,ktm-,kkl-,kdt-,kkd-"; $args = null; $error = $req->GetRequestArguments($url, $args); if($error != "") { $img = imagecreatefromjpeg("./unavailable.jpg"); header("Content-type: image/jpeg"); imagejpeg($img); imagedestroy($img); die(); } $error = $req->Open($args); flush(); if($error != "") { $img = imagecreatefromjpeg("./unavailable.jpg"); header("Content-type: image/jpeg"); imagejpeg($img); imagedestroy($img); die(); } $req->SendRequest($args); flush(); $headers = array(); $req->ReadReplyHeaders($headers); if($req->response_status != "200") { $img = imagecreatefromjpeg("./unavailable.jpg"); header("Content-type: image/jpeg"); imagejpeg($img); imagedestroy($img); die(); } if($req->content_length_set && $req->content_length <= 0) { $img = imagecreatefromjpeg("./pid_change.jpg"); header("Content-type: image/jpeg"); imagejpeg($img); imagedestroy($img); die(); } // read the reply and parse the info out $score = 0; $rank_val = 0; $next = 0.0; do { $error=$req->ReadReplyBody($body, 4096); $lines = split("\n", $body); $get_data = false; for($i = 0; $i < count($lines); $i++) { $line = $lines[$i]; $pieces = split("\t", $line); for($j = 0; $j < count($pieces); $j++) { $part = $pieces[$j]; if($part == "H") { if($pieces[$j+1] != "asof") { $get_data = true; break; }else { $get_data = false; } } if($part == "D" && $get_data) { $score = $pieces[$j+3]; $rank_val = $pieces[$j+39]; break; } } } }while($error == "" && strlen($body) != 0); if($score == 0 || $rank_val == 0) { $img = imagecreatefromjpeg("./unavailable.jpg"); header("Content-type: image/jpeg"); imagejpeg($img); imagedestroy($img); die(); } switch ($rank_val) { case PRIVATE: { $next = ($score / $ranks[PRIVATE_FIRST_CLASS]) * PERCENT; }break; case PRIVATE_FIRST_CLASS: { $next = $std?($score / $ranks[LANCE_CORP]) * PERCENT : ((($score - $ranks[PRIVATE_FIRST_CLASS]) / ($ranks[LANCE_CORP] - $ranks[PRIVATE_FIRST_CLASS])) * PERCENT); }break; case LANCE_CORP: { $next = $std?($score / $ranks[CORPORAL]) * PERCENT : ((($score - $ranks[LANCE_CORP]) / ($ranks[CORPORAL] - $ranks[LANCE_CORP])) * PERCENT); }break; case CORPORAL: { $next = $std?($score / $ranks[SERGANT]) * PERCENT : ((($score - $ranks[CORPORAL]) / ($ranks[SERGANT] - $ranks[CORPORAL])) * PERCENT); }break; case SERGANT: { $next = $std?($score / $ranks[STAFF_SERGANT]) * PERCENT : ((($score - $ranks[SERGANT]) / ($ranks[STAFF_SERGANT] - $ranks[SERGANT])) * PERCENT); }break; case STAFF_SERGANT: { $next = $std?($score / $ranks[GUNNERY_SERGANT]) * PERCENT : ((($score - $ranks[STAFF_SERGANT]) / ($ranks[GUNNERY_SERGANT] - $ranks[STAFF_SERGANT])) * PERCENT); }break; case GUNNERY_SERGANT: { $next = $std?($score / $ranks[MASTER_SERGANT]) * PERCENT : ((($score - $ranks[GUNNERY_SERGANT]) / ($ranks[MASTER_SERGANT] - $ranks[GUNNERY_SERGANT])) * PERCENT); }break; case MASTER_SERGANT: { $next = $std?($score / $ranks[MASTER_GUNNERY_SERGANT]) * PERCENT : ((($score - $ranks[MASTER_SERGANT]) / ($ranks[MASTER_GUNNERY_SERGANT] - $ranks[MASTER_SERGANT])) * PERCENT); }break; case FIRST_SERGANT: { $next = $std?($score / $ranks[MASTER_GUNNERY_SERGANT]) * PERCENT : ((($score - $ranks[FIRST_SERGANT]) / ($ranks[MASTER_GUNNERY_SERGANT] - $ranks[FIRST_SERGANT])) * PERCENT); }break; case MASTER_GUNNERY_SERGANT: { $next = $std?($score / $ranks[SECOND_LIEUTENANT]) * PERCENT : ((($score - $ranks[MASTER_GUNNERY_SERGANT]) / ($ranks[SECOND_LIEUTENANT] - $ranks[MASTER_GUNNERY_SERGANT])) * PERCENT); }break; case SERGEANT_MAJOR: { $next = $std?($score / $ranks[SECOND_LIEUTENANT]) * PERCENT : ((($score - $ranks[SERGEANT_MAJOR]) / ($ranks[SECOND_LIEUTENANT] - $ranks[SERGEANT_MAJOR])) * PERCENT); }break; case SERGEANT_MAJOR_OF_CORPS: { $next = $std?($score / $ranks[SECOND_LIEUTENANT]) * PERCENT : ((($score - $ranks[SERGEANT_MAJOR_OF_CORPS]) / ($ranks[SECOND_LIEUTENANT] - $ranks[SERGEANT_MAJOR_OF_CORPS])) * PERCENT); }break; case SECOND_LIEUTENANT: { $next = $std?($score / $ranks[FIRST_LIEUTENANT]) * PERCENT : ((($score - $ranks[SECOND_LIEUTENANT]) / ($ranks[FIRST_LIEUTENANT] - $ranks[SECOND_LIEUTENANT])) * PERCENT); }break; case FIRST_LIEUTENANT: { $next = $std?($score / $ranks[CAPTAIN]) * PERCENT : ((($score - $ranks[FIRST_LIEUTENANT]) / ($ranks[CAPTAIN] - $ranks[FIRST_LIEUTENANT])) * PERCENT); }break; case CAPTAIN: { $next = $std?($score / $ranks[MAJOR]) * PERCENT : ((($score - $ranks[CAPTAIN]) / ($ranks[MAJOR] - $ranks[CAPTAIN])) * PERCENT); }break; case MAJOR: { $next = $std?($score / $ranks[LIEUTENANT_COLONEL]) * PERCENT : ((($score - $ranks[MAJOR]) / ($ranks[LIEUTENANT_COLONEL] - $ranks[MAJOR])) * PERCENT); }break; case LIEUTENANT_COLONEL: { $next = $std?($score / $ranks[COLONEL]) * PERCENT : ((($score - $ranks[LIEUTENANT_COLONEL]) / ($ranks[COLONEL] - $ranks[LIEUTENANT_COLONEL])) * PERCENT); }break; case COLONEL: { $next = $std?($score / $ranks[BRIGADIER_GENERAL]) * PERCENT : ((($score - $ranks[COLONEL]) / ($ranks[BRIGADIER_GENERAL] - $ranks[COLONEL])) * PERCENT); }break; case BRIGADIER_GENERAL: { $next = $std?($score / $ranks[LIEUTENANT_GENERAL]) * PERCENT : ((($score - $ranks[BRIGADIER_GENERAL]) / ($ranks[LIEUTENANT_GENERAL] - $ranks[BRIGADIER_GENERAL])) * PERCENT); }break; case MAJOR_GENERAL: { $next = $std?($score / $ranks[LIEUTENANT_GENERAL]) * PERCENT : ((($score - $ranks[MAJOR_GENERAL]) / ($ranks[LIEUTENANT_GENERAL] - $ranks[MAJOR_GENERAL])) * PERCENT); }break; case LIEUTENANT_GENERAL: { $next = $std?($score / $ranks[GENERAL]) * PERCENT : ((($score - $ranks[LIEUTENANT_GENERAL]) / ($ranks[GENERAL] - $ranks[LIEUTENANT_GENERAL])) * PERCENT); }break; case GENERAL: { $next = 100; }break; default: $next = -1; break; } if($next > 100) $next = 100; $img_path = "./rank_".$rank_val.".jpg"; $img = imagecreatefromjpeg($img_path); imagealphablending($img, true); $width = (($next / 100) * 76); $border = imagecolorallocatealpha($img, 255, 255, 255, 45); $color = imagecolorallocatealpha($img, 1, 1, 1, 50); if($do_text || $do_score) { $txt_shadow = imagecolorallocatealpha($img, 0, 0, 0, 25); $txt_color = imagecolorallocatealpha($img, 255, 255, 255, 25); // if the no_text option hasnt been selected, draw the text if($do_text && $std) { imagettftext($img, 8.25, 0, 4, 57, $txt_shadow, "./ARIALBD.TTF", "Next"); imagettftext($img, 8.25, 0, 3, 56, $txt_color, "./ARIALBD.TTF", "Next"); imagettftext($img, 8.25, 0, 4, 68, $txt_shadow, "./ARIALBD.TTF", "Rank: ".round($next, 1)."%"); imagettftext($img, 8.25, 0, 3, 67, $txt_color, "./ARIALBD.TTF", "Rank: ".round($next, 1)."%"); } // if the no_text option hasnt been selected, draw the text if($do_text && !$std) { imagettftext($img, 8.25, 0, 4, 57, $txt_shadow, "./ARIALBD.TTF", "Rank"); imagettftext($img, 8.25, 0, 3, 56, $txt_color, "./ARIALBD.TTF", "Rank"); imagettftext($img, 8.25, 0, 4, 68, $txt_shadow, "./ARIALBD.TTF", "Delta: ".round($next, 1)."%"); imagettftext($img, 8.25, 0, 3, 67, $txt_color, "./ARIALBD.TTF", "Delta: ".round($next, 1)."%"); } // if score option is present, add the score to the avatar if($do_score) { $txt_color_s = imagecolorallocatealpha($img, 255, 255, 255, 30); imagettftext($img, 8, 0, 4, 12, $txt_shadow, "./ARIALBD.TTF", "Score ".number_format($score)); imagettftext($img, 8, 0, 3, 11, $txt_color_s, "./ARIALBD.TTF", "Score ".number_format($score)); } } $light_background = imagecolorallocatealpha($img, 255, 255, 255, 105); imagefilledrectangle($img, 2, 69, 77, 77, $light_background); imagerectangle($img, 1, 70, 78, 78, $border); imagefilledrectangle($img, 3, 72, $width, 76, $color); header("Content-type: image/jpeg"); imagejpeg($img); imagedestroy($img); $req->Close(); function get_pid($player_nick) { $search_request = new http_class(); $search_request->timeout = 0; $search_request->data_timeout = 0; $search_request->user_agent="GameSpyHTTP/1.0"; $url = "http://BF2Web.gamespy.com/ASP/searchforplayers.aspx?where=x&nick=".$player_nick; $args = null; $error = $search_request->GetRequestArguments($url, $args); if($error != "") { $search_request->cl(); return -1; } $error = $search_request->Open($args); flush(); if($error != "") { $search_request->cl(); return -1; } $search_request->SendRequest($args); flush(); $headers = array(); $search_request->ReadReplyHeaders($headers); if($search_request->response_status != "200") { $search_request->cl(); return -1; } if($search_request->content_length_set && $search_request->content_length <= 0) { $search_request->cl(); return -1; } // read the reply and parse the unlocks info out $score = 0; $rank_val = 0; $next = 0.0; do { $error=$search_request->ReadReplyBody($body, 4096); $lines = split("\n", $body); $get_data = false; for($i = 0; $i < count($lines); $i++) { $line = $lines[$i]; $pieces = split("\t", $line); for($j = 0; $j < count($pieces); $j++) { $part = $pieces[$j]; if($part == "H") { if($pieces[$j+2] == "pid") { $get_data = true; break; }else { $get_data = false; } } if($part == "D" && $get_data) { $search_request->Close(); return $pieces[$j+2]; }else if(part == "$" && $get_data) { $search_request->Close(); return -1; } } } }while($error == "" && strlen($body) != 0); $search_request->Close(); return -1; } ?>