• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Status Script Minecraft

oOFlaashOo

Schafhirte
Registriert
3 Oktober 2012
Beiträge
111
Diamanten
0
Minecraft
oOFlaashOo
Hallo zusammen.
Ich bin dabei mir ein Script zu basteln das mir die aktuelle Spieleranzahl ausgibt.

Ich benutze dazu folgendes: http://hastebin.com/qajeniwumu.php

Dies funktioniert auch bis auf dass mir die Spieleranzahl und die Slots in die gleiche Variable gepackt werden ($playersOnline)
Dass sieht dann ausgegeben so aus: http://www.craftcore.net/stats/stats.php?ip=mc.craftcore.net

X20 sind Spieleranzahl + Slots dabei ist X die Spieleranzahl und 20 die Slotanzahl

Ich würde es gerne ungefähr so ausgeben

5/20 Spieler online


_________________________________________________________________________________________
Edit:

Zweite Frage: Besteht die Möglichkeit die aktuelle Spieleranzahl eines Bungeecord Server zu bekommen?
So sieht es bei Bungee aus
http://www.craftcore.net/stats/statsbungee.php?ip=mc.craftcore.net

Danke im Vorraus
Gruß Flaash
 
Zuletzt bearbeitet:

winofi

Minecrafter
Registriert
17 November 2012
Beiträge
17
Diamanten
0
Minecraft
winofi
noch interesse?
PHP:
<?php
$servers = Array();

$servers[] = Array(
	"name" => "Lobby",
	"addr" => "127.0.0.1",
	"port" => 25565
);

$servers[] = Array(
	"name" => "Citybuild",
	"addr" => "127.0.0.1",
	"port" => 25566
);

function mout($text){
	$ret = "";
	foreach(str_split($text,2) as $nr => $data){
			$ret .= chr(hexdec($data));
			}
	return utf8_encode($ret);
} 
 
function ping($host, $port, $timeout=5){
	$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
	if (!$fp){
		return Array('online' => false);
	}
	$stime = microtime(TRUE);
	fwrite($fp, "\xFE\xFD\x00");
	$d = fread($fp, 1024);
	$time = microtime(TRUE)-$stime;
	fclose($fp);
	if ($d[0] != "\xFF") return false;
	$d = explode("\x00\x00\x00",($d));
	$res = array(
		'motd' => mout(bin2hex($d[3])),
		'players' => mout(bin2hex($d[4])),
		'max_players' => mout(bin2hex($d[5])),
		'version' => mout(bin2hex($d[2])),
		'ping' => intval($time*1000)/1000,
		'online' => true
	);
	return $res;
}
foreach ($servers as $nr => $data) {
	$res = ping($data['addr'], $data['port'], 5);
	echo "<tr><td>".$data['name']."</td><td>";
	if (!$res['online']) {
		echo "<img src=\"http://irgendeinserver/wcf/icon/offlineS.png\">";
	} else {
		echo "<img src=\"http://irgendeinserver/wcf/icon/onlineS.png\">".$res['players']."/".$res['max_players'];
	}
	echo "</td></tr>\n";
}
echo "</table>";
exit;

?>
 

oOFlaashOo

Schafhirte
Registriert
3 Oktober 2012
Beiträge
111
Diamanten
0
Minecraft
oOFlaashOo
noch interesse?
PHP:
<?php
$servers = Array();

$servers[] = Array(
	"name" => "Lobby",
	"addr" => "127.0.0.1",
	"port" => 25565
);

$servers[] = Array(
	"name" => "Citybuild",
	"addr" => "127.0.0.1",
	"port" => 25566
);

function mout($text){
	$ret = "";
	foreach(str_split($text,2) as $nr => $data){
			$ret .= chr(hexdec($data));
			}
	return utf8_encode($ret);
} 
 
function ping($host, $port, $timeout=5){
	$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
	if (!$fp){
		return Array('online' => false);
	}
	$stime = microtime(TRUE);
	fwrite($fp, "\xFE\xFD\x00");
	$d = fread($fp, 1024);
	$time = microtime(TRUE)-$stime;
	fclose($fp);
	if ($d[0] != "\xFF") return false;
	$d = explode("\x00\x00\x00",($d));
	$res = array(
		'motd' => mout(bin2hex($d[3])),
		'players' => mout(bin2hex($d[4])),
		'max_players' => mout(bin2hex($d[5])),
		'version' => mout(bin2hex($d[2])),
		'ping' => intval($time*1000)/1000,
		'online' => true
	);
	return $res;
}
foreach ($servers as $nr => $data) {
	$res = ping($data['addr'], $data['port'], 5);
	echo "<tr><td>".$data['name']."</td><td>";
	if (!$res['online']) {
		echo "<img src=\"http://irgendeinserver/wcf/icon/offlineS.png\">";
	} else {
		echo "<img src=\"http://irgendeinserver/wcf/icon/onlineS.png\">".$res['players']."/".$res['max_players'];
	}
	echo "</td></tr>\n";
}
echo "</table>";
exit;

?>

Ja noch Interesse. Kann ich beliebig viele Server oben eintragen?
 

winofi

Minecrafter
Registriert
17 November 2012
Beiträge
17
Diamanten
0
Minecraft
winofi
wie hätten wirs denn gerne? in ne Datenbank? oder in eine Datei? ich würds ja in memcached speichern, aber das findet ja nicht so viel Anklang...

EDIT: hier mal eine variante, die in einer datei cacht
PHP:
<?php
$tmpfile = "mc_ping.pOsrstncRuW1bthg.tmp";
$updatetime = 1000*5;

function ping($host, $port, $timeout=5){
	global $updata, $updatetime;
	if ($updata[$host]['date'] < time()) {
		$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
		if (!$fp){
			return Array('online' => false);
		}
		$stime = microtime(TRUE);
		fwrite($fp, "\xFE\xFD\x00");
		$d = fread($fp, 1024);
		$time = microtime(TRUE)-$stime;
		fclose($fp);
		if ($d[0] != "\xFF") return false;
		$d = explode("\x00\x00\x00",($d));
		$res = array(
			'motd' => mout(bin2hex($d[3])),
			'players' => mout(bin2hex($d[4])),
			'max_players' => mout(bin2hex($d[5])),
			'version' => mout(bin2hex($d[2])),
			'ping' => intval($time*1000)/1000,
			'online' => true
		);
		$updata[$host]['data'] = $res;
		$updata[$host]['date'] = $updatetime/1000+time();
		save_data();
	} else {
		$res = $updata[$host]['data'];
	}
	return $res;
}

function save_data() {
	global $updata, $tmpfile;
	file_put_contents($tmpfile,serialize($updata));
}

ich weis nicht sehr schön, das er das mehrfach speichert, aber das beste was ich auf die schnelle raussuchen konnte
 
Zuletzt bearbeitet:
Oben