Status Script Minecraft

Dieses Thema im Forum "Programmierung" wurde erstellt von oOFlaashOo, 15. September 2013.

  1. oOFlaashOo
    Offline

    oOFlaashOo

    Registriert seit:
    3. Oktober 2012
    Beiträge:
    112
    Ort:
    /home
    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
     
    #1
  2. winofi
    Offline

    winofi

    Registriert seit:
    17. November 2012
    Beiträge:
    17
    Minecraft:
    winofi
    noch interesse?
    PHP:
    1. <?php
    2. $servers = Array();
    3.  
    4. $servers[] = Array(
    5.     "name" => "Lobby",
    6.     "addr" => "127.0.0.1",
    7.     "port" => 25565
    8. );
    9.  
    10. $servers[] = Array(
    11.     "name" => "Citybuild",
    12.     "addr" => "127.0.0.1",
    13.     "port" => 25566
    14. );
    15.  
    16. function mout($text){
    17.     $ret = "";
    18.     foreach(str_split($text,2) as $nr => $data){
    19.             $ret .= chr(hexdec($data));
    20.             }
    21.     return utf8_encode($ret);
    22. }
    23.  
    24. function ping($host, $port, $timeout=5){
    25.     $fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
    26.     if (!$fp){
    27.         return Array('online' => false);
    28.     }
    29.     $stime = microtime(TRUE);
    30.     fwrite($fp, "\xFE\xFD\x00");
    31.     $d = fread($fp, 1024);
    32.     $time = microtime(TRUE)-$stime;
    33.     fclose($fp);
    34.     if ($d[0] != "\xFF") return false;
    35.     $d = explode("\x00\x00\x00",($d));
    36.     $res = array(
    37.         'motd' => mout(bin2hex($d[3])),
    38.         'players' => mout(bin2hex($d[4])),
    39.         'max_players' => mout(bin2hex($d[5])),
    40.         'version' => mout(bin2hex($d[2])),
    41.         'ping' => intval($time*1000)/1000,
    42.         'online' => true
    43.     );
    44.     return $res;
    45. }
    46. foreach ($servers as $nr => $data) {
    47.     $res = ping($data['addr'], $data['port'], 5);
    48.     echo "<tr><td>".$data['name']."</td><td>";
    49.     if (!$res['online']) {
    50.         echo "<img src=\"http://irgendeinserver/wcf/icon/offlineS.png\">";
    51.     } else {
    52.         echo "<img src=\"http://irgendeinserver/wcf/icon/onlineS.png\">".$res['players']."/".$res['max_players'];
    53.     }
    54.     echo "</td></tr>\n";
    55. }
    56. echo "</table>";
    57.  
    58. ?>
     
    #2
  3. oOFlaashOo
    Offline

    oOFlaashOo

    Registriert seit:
    3. Oktober 2012
    Beiträge:
    112
    Ort:
    /home
    Minecraft:
    oOFlaashOo
    Ja noch Interesse. Kann ich beliebig viele Server oben eintragen?
     
    #3
  4. winofi
    Offline

    winofi

    Registriert seit:
    17. November 2012
    Beiträge:
    17
    Minecraft:
    winofi
    jo, nur das das dann immer langsammer wird, da bei jedem Aufruf alle Server abgefragt werden, wenn das öfter aufgeruft wird, solltest du das cachen.
     
    #4
  5. oOFlaashOo
    Offline

    oOFlaashOo

    Registriert seit:
    3. Oktober 2012
    Beiträge:
    112
    Ort:
    /home
    Minecraft:
    oOFlaashOo
    Hört sich so an als ob du Ahnung hast willste das nicht noch einbauen? :D
     
    #5
  6. winofi
    Offline

    winofi

    Registriert seit:
    17. November 2012
    Beiträge:
    17
    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:
    1. <?php
    2. $tmpfile = "mc_ping.pOsrstncRuW1bthg.tmp";
    3. $updatetime = 1000*5;
    4.  
    5. function ping($host, $port, $timeout=5){
    6.     global $updata, $updatetime;
    7.     if ($updata[$host]['date'] < time()) {
    8.         $fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
    9.         if (!$fp){
    10.             return Array('online' => false);
    11.         }
    12.         $stime = microtime(TRUE);
    13.         fwrite($fp, "\xFE\xFD\x00");
    14.         $d = fread($fp, 1024);
    15.         $time = microtime(TRUE)-$stime;
    16.         fclose($fp);
    17.         if ($d[0] != "\xFF") return false;
    18.         $d = explode("\x00\x00\x00",($d));
    19.         $res = array(
    20.             'motd' => mout(bin2hex($d[3])),
    21.             'players' => mout(bin2hex($d[4])),
    22.             'max_players' => mout(bin2hex($d[5])),
    23.             'version' => mout(bin2hex($d[2])),
    24.             'ping' => intval($time*1000)/1000,
    25.             'online' => true
    26.         );
    27.         $updata[$host]['data'] = $res;
    28.         $updata[$host]['date'] = $updatetime/1000+time();
    29.         save_data();
    30.     } else {
    31.         $res = $updata[$host]['data'];
    32.     }
    33.     return $res;
    34. }
    35.  
    36. function save_data() {
    37.     global $updata, $tmpfile;
    38.     file_put_contents($tmpfile,serialize($updata));
    39. }
    ich weis nicht sehr schön, das er das mehrfach speichert, aber das beste was ich auf die schnelle raussuchen konnte
     
    #6
  7. Chrisliebaer
    Online

    Chrisliebaer

    Ggf bietet sich das Cachen in der $_SESSION an, sofern die Seite nicht sehr häufig verwendet wird. Alternativ in einer JSON Datei mit letzter Aktualisierung. Sollte ne Sache von 2 Minuten sein.
     
    #7
  8. winofi
    Offline

    winofi

    Registriert seit:
    17. November 2012
    Beiträge:
    17
    Minecraft:
    winofi
    mm in der session würd ichs nicht speichern entweder in einer mysql tabelle, die im ram liegt oder gleich in memcached, aber für kleine webseiten sollte das auch ohne gehen
     
    #8