Skip to content

Instantly share code, notes, and snippets.

@z0w0
Created June 3, 2011 09:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save z0w0/1006087 to your computer and use it in GitHub Desktop.
Save z0w0/1006087 to your computer and use it in GitHub Desktop.
A PHP script that displays the server status of a Blockland server, with image/json/xml output.
<?php
if(count($_GET) <= 0 || (!isSet($_GET[h]) && !isSet($_GET[a])) || $_GET["h"] == "")
{
return;
}
if(!isSet($_GET[t]) && $_GET[t] != 2 && $_GET[t] != 3)
{
$_GET[t] = 2;
}
if(!isSet($_GET[i]) || ($_GET[i] != "png" && $_GET[i] != "gif" && $_GET[i] != "jpeg"))
{
$_GET[i] = "png";
}
$servers = file("http://master2.blockland.us/");
foreach($servers as $index => $server)
{
$server = explode("\t",$server);
if(count($server) == 1)
continue;
$host = strpos($server[4],"'",0);
$host = substr($server[4],0,$host);
if(isSet($_GET[p]) && $server[1] != $_GET[p])
continue;
if($host == $_GET[h])
$target = $server;
else if($server[0] == $_GET[a])
$target = $server;
if(count($target) >= 9)
break;
}
if(count($target) > 1)
{
if(isSet($_GET["ot"]))
{
$output = $_GET["ot"];
$name = $target[4];
if(isSet($_GET["n"]))
$name = $_GET["n"];
$dedi = $target[3] == 1 ? true : false;
$passed = $target[2] == 1 ? true : false;
$players = (int) $target[5];
$maxplayers = (int) $target[6];
$bricks = (int) $target[8];
$map = $target[7];
$host = $_GET["h"];
if($output == "json")
{
$json = json_encode
(
array
(
"status" => true,
"host" => $host,
"name" => $name,
"dedicated" => $dedi,
"passworded" => $passed,
"players" => $players,
"maxplayers" => $maxplayers,
"bricks" => $bricks,
"map" => $map
)
);
$callback = $_GET["cb"];
if(isSet($callback))
die($callback . "(" . $json . ");");
else
die($json);
}
else if($output == "xml")
{
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
$xml .= "\n<server>";
$xml .= "\n\t<status>true</status>";
$xml .= "\n\t<host>" . $host . "</host>";
$xml .= "\n\t<name>" . $name . "</name>";
$xml .= "\n\t<dedicated>" . ($dedi ? "true" : "false") . "</dedicated>";
$xml .= "\n\t<passworded>" . ($passed ? "true" : "false") . "</passworded>";
$xml .= "\n\t<players>" . $players . "</players>";
$xml .= "\n\t<maxplayers>" . $maxplayers . "</maxplayers>";
$xml .= "\n\t<bricks>" . $bricks . "</bricks>";
$xml .= "\n\t<map>" . $map . "</map>";
$xml .= "\n</server>";
die($xml);
}
}
switch($_GET[t])
{
case "2":
$im = imagecreatefrompng("./images/template2.png");
$red = imagecolorallocate($im,255,0,0);
$purple = imagecolorallocate($im,255,0,255);
$green = imagecolorallocate($im,0,255,0);
$white = imagecolorallocate($im,255,255,255);
$black = imagecolorallocate($im,0,0,0);
if($_GET[wt])
$black = $white;
imagesavealpha($im,true);
if(isSet($_GET[o]))
{
$over = 0;
switch($_GET[o])
{
case "social":
$over = imagecreatefrompng("./images/overlay2_social.png");
break;
case "adventure":
$over = imagecreatefrompng("./images/overlay2_adventure.png");
break;
case "city":
$over = imagecreatefrompng("./images/overlay2_city.png");
break;
case "challenge":
$over = imagecreatefrompng("./images/overlay2_challenge.png");
break;
case "medieval":
$over = imagecreatefrompng("./images/overlay2_medieval.png");
break;
default:
$over = imagecreatefromstring(file_get_contents($_GET[o]));
break;
}
if($over)
{
imagecopy($im,$over,0,0,0,0,200,213);
imagedestroy($over);
}
}
$name = $target[4];
if(isSet($_GET[n]))
$name = $_GET[n];
$name = strLen($name) > 22 ? subStr($name,0,22) . "..." : $name;
$dedi = $target[3] == 1 ? "Yes" : "No";
$passed = $target[2] == 1 ? "Yes" : "No";
$players = $target[5] . "/" . $target[6];
$bricks = $target[8];
$map = $target[7];
if($target[5] >= $target[6])
imagettftext($im,12,0,11,36,$red,"./images/segoeUI.ttf",$name);
else if($target[2])
imagettftext($im,12,0,11,36,$purple,"./images/segoeUI.ttf",$name);
else if($target[5] < $target[6])
imagettftext($im,12,0,11,36,$green,"./images/segoeUI.ttf",$name);
else
imagettftext($im,12,0,11,36,$white,"./images/segoeUI.ttf",$name);
imagettftext($im,10,0,78,71,$black,"./images/segoeUI.ttf",$dedi);
imagettftext($im,10,0,88,99,$black,"./images/segoeUI.ttf",$passed);
imagettftext($im,10,0,59,128,$black,"./images/segoeUI.ttf",$players);
imagettftext($im,10,0,52,155,$black,"./images/segoeUI.ttf",$bricks);
imagettftext($im,10,0,45,183,$black,"./images/segoeUI.ttf",$map);
break;
case "3":
$im = imagecreatefrompng("./images/template3.png");
$red = imagecolorallocate($im,255,0,0);
$purple = imagecolorallocate($im,255,0,255);
$green = imagecolorallocate($im,0,255,0);
$white = imagecolorallocate($im,255,255,255);
imagesavealpha($im,true);
$name = $target[4];
if(isSet($_GET[n]))
$name = $_GET[n];
$dedi = $target[3] == 1 ? "Yes" : "No";
$passed = $target[2] == 1 ? "Yes" : "No";
$players = $target[5] . "/" . $target[6];
$bricks = $target[8];
$map = $target[7];
if($target[5] >= $target[6])
imagettftext($im,12,0,10,18,$red,"./images/segoeUI.ttf",$name);
else if($target[2])
imagettftext($im,12,0,10,18,$purple,"./images/segoeUI.ttf",$name);
else if($target[5] < $target[6])
imagettftext($im,12,0,10,18,$green,"./images/segoeUI.ttf",$name);
else
imagettftext($im,12,0,10,18,$white,"./images/segoeUI.ttf",$name);
imagettftext($im,10,0,30,42,$white,"images/segoeUI.ttf",$players);
imagettftext($im,10,0,100,42,$white,"images/segoeUI.ttf",$passed);
imagettftext($im,10,0,157,42,$white,"images/segoeUI.ttf",$dedi);
imagettftext($im,10,0,212,42,$white,"images/segoeUI.ttf",$bricks);
imagettftext($im,10,0,295,42,$white,"images/segoeUI.ttf",$map);
break;
}
}
else
{
if(isSet($_GET["ot"]))
{
$output = $_GET["ot"];
$host = $_GET["h"];
if($output == "json")
{
$json = json_encode
(
array
(
"status" => false,
"host" => $host
)
);
$callback = $_GET["cb"];
if(isSet($callback))
die($callback . "(" . $json . ");");
else
die($json);
}
else if($output == "xml")
{
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
$xml .= "\n<server>";
$xml .= "\n\t<status>false</status>";
$xml .= "\n\t<host>" . $host . "</host>";
$xml .= "\n</server>";
die($xml);
}
}
switch($_GET[t])
{
case "2":
$im = imagecreatefrompng("./images/template2.png");
$white = imagecolorallocate($im,255,255,255);
$black = imagecolorallocate($im,0,0,0);
if($_GET[wt])
$black = $white;
imagesavealpha($im,true);
if(isSet($_GET[o]))
{
$over = 0;
switch($_GET[o])
{
case "social":
$over = imagecreatefrompng("./images/overlay2_social.png");
break;
case "adventure":
$over = imagecreatefrompng("./images/overlay2_adventure.png");
break;
case "city":
$over = imagecreatefrompng("./images/overlay2_city.png");
break;
case "challenge":
$over = imagecreatefrompng("./images/overlay2_challenge.png");
break;
case "medieval":
$over = imagecreatefrompng("./images/overlay2_medieval.png");
break;
default:
$over = imagecreatefromstring(file_get_contents($_GET[o]));
break;
}
if($over)
{
imagecopy($im,$over,0,0,0,0,200,213);
imagedestroy($over);
}
}
$name = isSet($_GET[h]) ? $_GET[h] . "'s Server" : $_GET[a];
if(isSet($_GET[n]))
$name = $_GET[n];
$name = strLen($name) > 22 ? subStr($name,0,22) . "..." : $name;
$dedi = "N/A";
$passed = "N/A";
$players = "N/A";
$bricks = "N/A";
$map = "N/A";
imagettftext($im,12,0,11,36,$white,"images/segoeUI.ttf",$name);
imagettftext($im,10,0,78,71,$black,"images/segoeUI.ttf",$dedi);
imagettftext($im,10,0,88,99,$black,"images/segoeUI.ttf",$passed);
imagettftext($im,10,0,59,128,$black,"images/segoeUI.ttf",$players);
imagettftext($im,10,0,52,155,$black,"images/segoeUI.ttf",$bricks);
imagettftext($im,10,0,45,183,$black,"images/segoeUI.ttf",$map);
break;
case "3":
$im = imagecreatefrompng("./images/template3.png");
$white = imagecolorallocate($im,255,255,255);
imagesavealpha($im,true);
$name = isSet($_GET[h]) ? $_GET[h] . "'s Server" : $_GET[a];
if(isSet($_GET[n]))
$name = $_GET[n];
$dedi = "N/A";
$passed = "N/A";
$players = "N/A";
$bricks = "N/A";
$map = "N/A";
imagettftext($im,12,0,10,18,$white,"images/segoeUI.ttf",$name);
imagettftext($im,10,0,30,42,$white,"images/segoeUI.ttf",$players);
imagettftext($im,10,0,100,42,$white,"images/segoeUI.ttf",$passed);
imagettftext($im,10,0,157,42,$white,"images/segoeUI.ttf",$dedi);
imagettftext($im,10,0,212,42,$white,"images/segoeUI.ttf",$bricks);
imagettftext($im,10,0,295,42,$white,"images/segoeUI.ttf",$map);
break;
}
}
if($im)
{
header("Content-type: image/" . $_GET[i]);
switch($_GET[i])
{
case "png":
imagepng($im);
break;
case "gif":
imagegif($im);
break;
case "jpeg":
imagejpeg($im);
break;
}
imagedestroy($im);
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment