index.php:
PHP Code:
<?php
include("farben.inc.php");
include("config.inc.php");
include("functions.inc.php");
include("stats.php");
$status = new MinecraftServerStatus();
$response = $status->getStatus("join.craftplay.de", 25565);
//Der Header wird gesetzt (für das Bild)
if (!($config['debug']))
{
Header("Content-Type: image/png");
}
// Bild generieren
$img = ImageCreateFromPNG($config['hintergrundbild']);
// Texte schreiben
$status = $serverstatus['online-text'];
if (!$response)
{
$status = $serverstatus['offline-text'];
} else {
$farbe = getFarbcode($serverstatus['online-farbe'], $img);
}
ImageString($img, $config['schriftgröße'], $serverstatus['x-abstand'], $serverstatus['y-abstand'] + 1, $status, $farbe);
$farbe = getFarbcode($motd['farbe'], $img);
ImageString($img, $config['schriftgröße'], $motd['x-abstand'], $motd['y-abstand'], $werte['motd'], $farbe);
$farbe = getFarbcode($players['farbe'], $img);
ImageString($img, $config['schriftgröße'], $players['x-abstand'], $players['y-abstand'] + 1, $response["hostname"], $farbe);
$farbe = getFarbcode($slots['farbe'], $img);
ImageString($img, $config['schriftgröße'], $slots['x-abstand'], $slots['y-abstand'] + 5, $response["players"] . "/" . $response["maxplayers"], $farbe);
$farbe = getFarbcode($version['farbe'], $img);
ImageString($img, $config['schriftgröße'], $version['x-abstand'], $version['y-abstand'] + 5, $response['version'], $farbe);
//Das Bild wird ausgegeben und gelöscht
if (!($config['debug']))
{
ImagePNG($img);
}
ImageDestroy($img);
?>
config.inc.php:
PHP Code:
<?php
$config = array();
$config['debug'] = false; //Fehlerbehebung aktiviert oder nicht? Wenn aktiviert, wird das Bild nicht angezeigt aber die Fehlermeldungen.
$config['hintergrundbild'] = "http://www.elitepvpers.com/forum/images/background.png";//Hintergrundbild
$config['update_delay'] = 60; //300 = 5 Minuten
$config['schriftgröße'] = 5; //Schriftgröße. Geht von 1-5
$serverstatus = array();
$serverstatus['enabled'] = true; //Ist der Serverstatus aktiviert?
$serverstatus['x-abstand'] = 195; //Abstand von Links
$serverstatus['y-abstand'] = 35; //Abstand von Oben
$serverstatus['online-text'] = "Online";//Der Text, der angezeigt wird, wenn der Server online ist.
$serverstatus['offline-text'] = "Offline";//Der Text, der angezeigt wird, wenn der Server offline ist.
$serverstatus['offline-farbe'] = $farbe['rot'];//Die Farbe des Serverstatuses, wenn der Server offline ist.
$serverstatus['online-farbe'] = $farbe['grün'];//Die Farbe des Serverstatuses, wenn der Server online ist.
$motd = array();
$motd['enabled'] = false; //Ist der Motd aktiviert?
$motd['x-abstand'] = 120; //Abstand von Links
$motd['y-abstand'] = 286; //Abstand von Oben
$motd['farbe'] = $farbe['rot']; // Farbe von Motd. Farben können in der farben.inc.php nachgesehen werden.
$players = array();
$players['enabled'] = false; //Ist die Anzeige der Eingeloggten Spieler aktiviert?
$players['x-abstand'] = 100; //Abstand von Links
$players['y-abstand'] = 95; //Abstand von Oben
$players['farbe'] = $farbe['grau']; //Farbe der Spieleranzeige
$slots = array();
$slots['enabled'] = true; //Ist die Anzeige der Slots aktiviert?
$slots['x-abstand'] = 195; //Abstand von Links
$slots['y-abstand'] = 52; //Abstand von Oben
$slots['farbe'] = $farbe['schwarz']; //Farbe der Slots
$version = array();
$version['enabled'] = true; //Ist die Anzeige der Serverversion aktiviert?
$version['x-abstand'] = 365; //Abstand von Links
$version['y-abstand'] = 52; //Abstand von Oben
$version['farbe'] = $farbe['blau']; //Farbe der Serverversion
$server = array();
$server['ip'] = "join.craftplay.de"; //Welche Ip hat der Server?
$server['port'] = 25565; //Welchen Port hat der Server?
?>
functions.inc.php:
PHP Code:
<?php
function getServerdaten()
{
$daten = array();
if (!(file_exists("cache/serverstatus.txt")))
{
doCronjob();
}
$text = getTxtText("cache/serverstatus.txt");
if ($text == "offline")
{
$daten['status'] = false;
$daten['motd'] = "--";
$daten['players'] = "0";
$daten['slots'] = "--";
$daten['version'] = "--";
return $daten;
}
$werte = explode("\n", $text);
$daten['status'] = true;
$daten['motd'] = $werte[0];
$daten['players'] = $werte[1];
$daten['slots'] = $werte[2];
$daten['version'] = $werte[3];
return $daten;
}
function checkCronjobs()
{
global $config;
if (!(file_exists("cache/last_cronjob.txt")))
{
doCronjob();
return;
}
$lastCronjobText = getTxtText("cache/last_cronjob.txt");
if ($lastCronjobText == "")
{
doCronjob();
return;
}
$lastCronjob = intval($lastCronjobText);
$aktDatum = time();
$aktualisierDatum = $lastCronjob + $config['update_delay'];
if ($aktualisierDatum >= $aktDatum)
{
doCronjob();
}
}
function doCronjob()
{
global $server;
// Caches leeren oder wenn nicht vorhanden erstellen
if (is_dir("cache"))
{
if ($dh = opendir("cache")) {
while (($file = readdir($dh)) !== false) {
if ($file!="." AND $file !="..") {
unlink("cache/".$file);
}
}
closedir($dh);
}
}
else
{
mkdir("cache");
}
// Server online Status und Spieler online.
$spieler = QueryMinecraft($server['ip'], $server['port']);
if ($spieler == false)
{
$serverstatus = fopen("cache/serverstatus.txt", "w");
fwrite($serverstatus, "offline");
fclose($serverstatus);
}
else
{
$motd = $spieler['HostName'];
$players = $spieler['Players'];
$maxPlayers = $spieler['MaxPlayers'];
$version = $spieler['Version'];
$serverstatus = fopen("cache/serverstatus.txt", "w");
$text = $motd."\n".$players."\n".$maxPlayers."\n".$version;
fwrite($serverstatus, $text);
fclose($serverstatus);
}
$aktTime = time();
$timeTxt = fopen("cache/last_cronjob.txt", "w");
fwrite($timeTxt, $aktTime);
fclose($timeTxt);
}
function getTxtText($file)
{
if (!(file_exists($file)))
{
return "";
}
$handle = fopen($file, "r");
$text = "";
while(!feof($handle)) {
$text = $text.fgets($handle);
}
fclose($handle);
return $text;
}
function QueryMinecraft($IP, $Port = 25565, $Timeout = 2)
{
$Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP);
Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => (int)$Timeout, 'usec' => 0));
if( $Socket === FALSE || @Socket_Connect( $Socket, $IP, (int)$Port ) === FALSE)
{
return FALSE;
}
Socket_Send( $Socket, "\xFE\x01", 2, 0 );
$Len = Socket_Recv( $Socket, $Data, 256, 0 );
Socket_Close( $Socket );
if( $Len < 4 || $Data[ 0 ] !== "\xFF" )
{
return FALSE;
}
$Data = SubStr( $Data, 3 ); // Strip packet header (kick message packet and short length)
$Data = iconv( 'UTF-16BE', 'UTF-8', $Data );
// Are we dealing with Minecraft 1.4+ server?
if( $Data[ 1 ] === "\xA7" && $Data[ 2 ] === "\x31" )
{
$Data = Explode( "\x00", $Data );
return Array(
'HostName' => $Data[ 3 ],
'Players' => IntVal( $Data[ 4 ] ),
'MaxPlayers' => IntVal( $Data[ 5 ] ),
'Protocol' => IntVal( $Data[ 1 ] ),
'Version' => $Data[ 2 ]
);
}
$Data = Explode( "\xA7", $Data );
return Array(
'HostName' => SubStr( $Data[ 0 ], 0, -1 ),
'Players' => isset( $Data[ 1 ] ) ? IntVal( $Data[ 1 ] ) : 0,
'MaxPlayers' => isset( $Data[ 2 ] ) ? IntVal( $Data[ 2 ] ) : 0,
'Protocol' => 0,
'Version' => '1.3'
);
}
function getFarbcode($farbe, $img)
{
$f = explode(",", $farbe);
$farbcode = ImageColorAllocate($img, $f[0], $f[1], $f[2]);
return $farbcode;
}
?>
Ich habe mal alle Files in einer Zip hinzugefügt.







