« 1 2 3 »
Autor Zpráva
sitole
Profil
Ahoj, potřebuju minecraft server status tož bude obrázek a na něm se bude ukazovat kolko je online na server jak se jmenuje.

Příklad:



Akorád mít to ve vlastních souborech na webu prý se to dá udělat nějak přes PHP už to tu na foru bylo. Ale já to nechápu.

Potřebuju sem nebo nějak postal přímo soubory nebo třeba...

Jmeno serveru GaMmA

IP: mc27.crew.sk

Port: 25580

Web: http://gamma-play.tk/



Napíšte to prosím takto..


Index.php

A co vněm má být doplněné..


Info.php

A co tu má být...


Image.jpg

Jakou velikost má mít...


A prosím takhle i s udaji co jsem vám nahoře psal... i doplněnou IP. Jsem natohle opravdu lamka :)


Moc moc děkuju!
Radek9
Profil
sitole:
Na tohle tu máme sekci Práce a zakázky. Nabídní odměnu a uveď kontakt. Nebo zkus lépe hledat. Na tohle by mohl existovat hotový Bukkit plugin.
Rfilip
Profil
To ti zdejší vyhledávání titulku nenašlo tyto vlákna?
PHP Online Status a navazující PHP Online Status Generator [Minecraft]
sitole
Profil
Radek9:
Omlouvám se ale jsem tu nový a nechi forum zahlcovat takže to echám tu v php protože tu m někdo pomůže (doufám)
Radek9
Profil
sitole:
Ano, tady by ti za běžných okolností někdo pomohl. Ale kdyby ses taky snažil něco dělat. Přijít sem se slovy „Napíšte to prosím takto“ na nás prostě nefunguje, když nevidíme vlastní snahu. :-)
nemeja
Profil
sitole:
Omlouvám se ale jsem tu nový a nechi forum zahlcovat takže to echám tu v php protože tu m někdo pomůže (doufám)
Máš dvě možnosti, buď si to necháš celé udělat a k tomu je sekce Práce a zakázky a nebo potřebuješ jen radu na konkrétní problém s tím scriptem a jsi tu správně.

Kdyby jsi si nejdřív pročetl vlákna, co zmínil Radek9, tak by jsi zjistil, že jsem tam vložil již hotový script...
Anonymní
Profil *
Na téhle diskuzi by mělo být zakázané téma minecraft, protože většinou tyto témata končí jako obyčejný Flame War, či spamárnou.

sitole:
forum zahlcovat takže to echám tu v php protože tu m někdo pomůže (doufám)
Tak ho zahlť, sorry ale v dnešní době se za věci platí penězi a pochybuji, že ti někdo pomůže když ti jediné co umíš je sesmolit ne příliš kvalitní příspěvek na fórum.

IP: mc27.crew.sk
Omlouvám se za mojí nezkušenost, ale neměla by být IP adresa ve tvaru xxx.xxx.xxx.xxx?
nemeja
Profil
Anonymní:
Omlouvám se za mojí nezkušenost, ale neměla by být IP adresa ve tvaru xxx.xxx.xxx.xxx?
Ano, však DNS servery ti vrátěj IP adresu :)
sitole
Profil
No dobře mam to.... hlavní strana jakš takš funguje ted vedlejší Hlásí to toto...

http://sitole.tk/Banner/status.php?server=mc27.crew.sk&port=25580


A script vypadá takto

{\rtf1\ansi\ansicpg1250\deff0\deflang1029{\fonttbl{\f0\fswiss\fcharset238{\*\fname Arial;}Arial CE;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 

<?php

if(isset($_GET['server'])) {
$server = $_GET['mc27.crew.sk']; 
$port = (int)$_GET['25580'];
?>



Co je tam špatně?
lorin
Profil
Mimo jiné je chyba to, že chybí uzavírající závorka před ?>

<?php
 
if(isset($_GET['server'])) {
    $server = $_GET['server']; 
    $port = (int)$_GET['port'];
}
?>

Mimochodem, to je celý kód? Podíval jsi se vůbec na to, co odkazoval Rfilip [#3]?
nemeja
Profil
Asi se konečně dokopu k vytvoření služby na generování vlastních Minecraft statusů, nicméně jednoduchý nástřel:
script
<?php
$server = "176.9.104.116"; // IP nebo adresa
$port = 25574; // port serveru

// Vytvoř obrázek o rozměrech
$image_width = 550; // px
$image_height = 150; // px
$im = imagecreatetruecolor($image_width, $image_height);

// Nastav barvy
$white = imagecolorallocate($im, 255, 255, 255);
$green = imagecolorallocate($im, 0, 255, 0);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$font_file = 'arial.ttf'; // umístění fontu
$mineClassLoc = "MinecraftServerStatus/status.class.php"; // umístění třídy na zjištění statusu

// načti třídu a zjisti status
include_once $mineClassLoc;
$status = new MinecraftServerStatus();
$response = $status->getStatus($server,$port); 

// Vyplň pozadí
imagefilledrectangle($im, 0, 0, $image_width, $image_height, $white);

// vepisování do obrázku
if(!$response){
    imagefttext($im, 50, 0, 180, 100, $red, $font_file, 'Offline');
} else {
    imagefttext($im, 30, 0, 10, 40, $green, $font_file, 'Online');
    imagefttext($im, 15, 0, 30, 70, $black, $font_file, $response['motd']);
    imagefttext($im, 15, 0, 30, 90, $black, $font_file, 'Host: '.$response['hostname'].":".$response['port']);
    imagefttext($im, 15, 0, 30, 110, $black, $font_file, 'Hráčů: '.$response['players'].'/'.$response['maxplayers']);
    imagefttext($im, 15, 0, 30, 130, $black, $font_file, 'Ping: '.($response['ping']).'ms');
    imagefttext($im, 14, 0, ($image_width - 150), 130, $black, $font_file, 'Version: '.$response['version']);
}
// nastav HTTP hlavičku
header('Content-Type: image/png');
// odešli png obrázek
imagepng($im);
// vyčisti cache
imagedestroy($im);

MinecraftServerStatusClass
<?php

    /**
     * Minecraft Server Status Query
     * @author Julian Spravil <julian.spr@t-online.de> https://github.com/FunnyItsElmo
     * @license Free to use but dont remove the author, license and copyright
     * @copyright © 2013 Julian Spravil
     */
    class MinecraftServerStatus {
        private $timeout;

        /**
         * Prepares the class.
         * @param int    $timeout   default(3)
         */
        public function __construct($timeout = 3) {
            $this->timeout = $timeout;
        }

        /**
         * Gets the status of the target server.
         * @param string    $host    domain or ip address
         * @param int    $port    default(25565)
         */
        public function getStatus($host = '127.0.0.1', $port = 25565) {

            //Transform domain to ip address.
            if (substr_count($host , '.') != 4) $host = gethostbyname($host);

            //Get timestamp for the ping
            $start = microtime(true);

            //Connect to the server
            if(!$socket = @stream_socket_client('tcp://'.$host.':'.$port, $errno, $errstr, $this->timeout)) {

                //Server is offline
                return false;


            } else {

                stream_set_timeout($socket, $this->timeout);

                //Write and read data
                fwrite($socket, "\xFE\x01");
                $data = fread($socket, 2048);
                fclose($socket);
                if($data == null) return false;

                //Calculate the ping
                $ping = round((microtime(true)-$start)*1000);

                //Evaluate the received data
                if (substr((String)$data, 3, 5) == "\x00\xa7\x00\x31\x00"){

                    $result = explode("\x00", mb_convert_encoding(substr((String)$data, 15), 'UTF-8', 'UCS-2'));
                    $motd = preg_replace("/(§.)/", "",$result[1]);

                }else{

                    $result = explode('§', mb_convert_encoding(substr((String)$data, 3), 'UTF-8', 'UCS-2'));

                    $motd = "";
                    foreach ($result as $key => $string) {
                        if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) {
                            $motd .= '§'.$string;
                        }
                    }

                    $motd = preg_replace("/(§.)/", "", $motd);

                }
                //Remove all special characters from a string
                $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd);

                //Set variables
                $res = array();
                $res['hostname'] = $host;
                $res['version'] = $result[0];
                $res['motd'] = $motd;
                $res['players'] = $result[sizeof($result)-2];
                $res['maxplayers'] = $result[sizeof($result)-1];
                $res['ping'] = $ping;
                $res['port'] = $port;
                //return obj
                return $res;
            }

        }
    }

?>

Musí se upravit umístění třídy a fontu
sitole
Profil
nemeja:
Dobře děkuju ale ted další problém....

Vše snad dobře ale kdy dam toto ak tam nic není jakto?

http://sitole.tk/Banner/status.php?server=mc27.crew.sk&port=25580
lorin
Profil
Změňte tuto část tak, aby načítala data z $_GET a nezapomeňte ošetřit vstup.

$server = "176.9.104.116"; // IP nebo adresa
$port = 25574; // port serveru

Alespoň část si můžete udělat sám...
sitole
Profil
lorin
Moc se omllllouvám ale echápu ak říkám jse začátečník posím upravíte mi kod?

<?php
$server = "mc27.crew.sk"; // IP nebo adresa
$port = 25580; // port serveru
 
// Vytvoř obrázek o rozměrech
$image_width = 550; // px
$image_height = 150; // px
$im = imagecreatefrompng("signa2.png");
 
// Nastav barvy
$white = imagecolorallocate($im, 255, 255, 255);
$green = imagecolorallocate($im, 0, 255, 0);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$font_file = 'arial.ttf'; // umístění fontu
$mineClassLoc = "status.class.php"; // umístění třídy na zjištění statusu
 
// naÄŤti tĹ™Ădu a zjisti status
include_once $mineClassLoc;
$status = new MinecraftServerStatus();
$response = $status->getStatus($server,$port);
 
// vepisovánà do obrázku
   imagefttext($im, 15, 0, 430, 140, $red, $font_file, '(c)SamerLP');
       imagefttext($im, 25, 0, 10, 40, $green, $font, 'Online');
   imagefttext($im, 15, 0, 30, 70, $green2, $font_file, 'gameStreets|mGame 1.5.2');
   imagefttext($im, 15, 0, 30, 90, $green2, $font_file, 'IP: '.$response['hostname'].":".$response['port']);
   imagefttext($im, 15, 0, 30, 110, $green2, $font_file, 'Hraci: '.$response['players'].'/'.$response['maxplayers']);
   imagefttext($im, 15, 0, 30, 130, $green2, $font_file, 'Verzia: '.$response['version']);
 
;// nastav HTTP hlaviÄŤku
header('Content-Type: image/png');
// odešli png obrázek
imagepng($im);
// vyÄŤisti cache
imagedestroy($im);
?>
lorin
Profil
Koukni se na [#10] lorin
sitole
Profil
Ja se opravdu omlouvám ale pořád mě to nezobrazuje....

http://sitole.tk/Banner/status.php?server=mc27.crew.sk&port=25580

status.php

<?php
 
if(isset($_GET['server'])) {
    $server = $_GET['mc27.crew.sk']; 
    $port = (int)$_GET['25580'];

// Vytvoř obrázek o rozměrech
$image_width = 550; // px
$image_height = 150; // px
$im = imagecreatefrompng("signa2.png");
 
// Nastav barvy
$white = imagecolorallocate($im, 255, 255, 255);
$green = imagecolorallocate($im, 0, 255, 0);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$font_file = 'arial.ttf'; // umístění fontu
$mineClassLoc = "status.class.php"; // umístění třídy na zjištění statusu
 
// naÄŤti tĹ™Ădu a zjisti status
include_once $mineClassLoc;
$status = new MinecraftServerStatus();
$response = $status->getStatus($server,$port);
 
// vepisovánà do obrázku
   imagefttext($im, 15, 0, 430, 140, $red, $font_file, '(c)SamerLP');
       imagefttext($im, 25, 0, 10, 40, $green, $font, 'Online');
   imagefttext($im, 15, 0, 30, 70, $green2, $font_file, 'gameStreets|mGame 1.5.2');
   imagefttext($im, 15, 0, 30, 90, $green2, $font_file, 'IP: '.$response['hostname'].":".$response['port']);
   imagefttext($im, 15, 0, 30, 110, $green2, $font_file, 'Hraci: '.$response['players'].'/'.$response['maxplayers']);
   imagefttext($im, 15, 0, 30, 130, $green2, $font_file, 'Verzia: '.$response['version']);
 
;// nastav HTTP hlaviÄŤku
header('Content-Type: image/png');
// odešli png obrázek
imagepng($im);
// vyÄŤisti cache
imagedestroy($im);
}
?>
Radek9
Profil
sitole:
Z toho GETu přece nebereš mc27.crew.sk a 25580. Ty potřebuješ brát server a port. Tamto jsou jen hodnoty, které to může mít, ale ty potřebuješ znát klíče. A to je to před rovnítkem v adrese. ;-)
sitole
Profil
Takže to bude

if(isset($_GET['server'])) {
    $server = $_GET['server']; 
    $port = (int)$_GET['port'];



Jo a ještě mam dobře nastavené

status.class.php


<?php
 
    /**
     * Minecraft Server Status Query
     * @author Julian Spravil <julian.spr@t-online.de> https://github.com/FunnyItsElmo
     * @license Free to use but dont remove the author, license and copyright
     * @copyright © 2013 Julian Spravil
     */
    class MinecraftServerStatus {
        private $timeout;
 
        /**
         * Prepares the class.
         * @param int    $timeout   default(3)
         */
        public function __construct($timeout = 3) {
            $this->timeout = $timeout;
        }
 
        /**
         * Gets the status of the target server.
         * @param string    $host    domain or ip address
         * @param int    $port    default(25565)
         */
        public function getStatus($host = 'mc27.crew.sk', $port = 25580) {
 
            //Transform domain to ip address.
            if (substr_count($host , '.') != 4) $host = gethostbyname($host);
 
            //Get timestamp for the ping
            $start = microtime(true);
 
            //Connect to the server
            if(!$socket = @stream_socket_client('tcp://'.$host.':'.$port, $errno, $errstr, $this->timeout)) {
 
                //Server is offline
                return false;
 
 
            } else {
 
                stream_set_timeout($socket, $this->timeout);
 
                //Write and read data
                fwrite($socket, "\xFE\x01");
                $data = fread($socket, 2048);
                fclose($socket);
                if($data == null) return false;
 
                //Calculate the ping
                $ping = round((microtime(true)-$start)*1000);
 
                //Evaluate the received data
                if (substr((String)$data, 3, 5) == "\x00\xa7\x00\x31\x00"){
 
                    $result = explode("\x00", mb_convert_encoding(substr((String)$data, 15), 'UTF-8', 'UCS-2'));
                    $motd = preg_replace("/(§.)/", "",$result[1]);
 
                }else{
 
                    $result = explode('§', mb_convert_encoding(substr((String)$data, 3), 'UTF-8', 'UCS-2'));
 
                    $motd = "";
                    foreach ($result as $key => $string) {
                        if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) {
                            $motd .= '§'.$string;
                        }
                    }
 
                    $motd = preg_replace("/(§.)/", "", $motd);
 
                }
                //Remove all special characters from a string
                $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd);
 
                //Set variables
                $res = array();
                $res['hostname'] = $host;
                $res['version'] = $result[0];
                $res['motd'] = $motd;
                $res['players'] = $result[sizeof($result)-2];
                $res['maxplayers'] = $result[sizeof($result)-1];
                $res['ping'] = $ping;
                $res['port'] = $port;
                //return obj
                return $res;
            }
 
        }
    }
 
?>
DarkMeni
Profil
sitole:
Ve status.class.php nic nastavovat nemusíš.
Umíš HTML? (Když to chceš dávat na stránky, tak předpokládám že asi jo)
sitole
Profil
Ale stejně to nezobrazuje status na stránce...

http://sitole.tk/Banner/status.php?server=mc27.crew.sk&port=25580

A ano HTML umím


index.php


 <style type="text/css">
   body{
    color: #2A2A2A;
    font-family: Arial, Helvetica, Sans-serif;
    font-size:14px;
    }
    input[type=text], textarea {
  -webkit-transition: all 0.30s ease-in-out;
  -moz-transition: all 0.30s ease-in-out;
  -ms-transition: all 0.30s ease-in-out;
  -o-transition: all 0.30s ease-in-out;
  outline: none;
  padding: 3px 0px 3px 3px;
  margin: 5px 1px 3px 0px;
  border: 1px solid #DDDDDD;
}
 
input[type=text]:focus, textarea:focus {
  box-shadow: 0 0 5px rgba(81, 203, 238, 1);
  padding: 3px 0px 3px 3px;
  margin: 5px 1px 3px 0px;
  border: 1px solid rgba(81, 203, 238, 1);
}
    </style>
<form method="GET" action="status.php">
Server: <input type="text" name="server"><br>
Port: <input type="text" name="port"><br>
<input type="submit" value="Vytvořit obrázek">
</form>



status.php



<?php
 
if(isset($_GET['server'])) {
    $server = $_GET['server']; 
    $port = (int)$_GET['port'];

$image_width = 550; // px
$image_height = 150; // px
$im = imagecreatefrompng("signa2.png");
 
// Nastav barvy
$white = imagecolorallocate($im, 255, 255, 255);
$green = imagecolorallocate($im, 0, 255, 0);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$font_file = 'arial.ttf'; // umístění fontu
$mineClassLoc = "status.class.php"; // umístění třídy na zjištění statusu
 
// naÄŤti tĹ™Ădu a zjisti status
include_once $mineClassLoc;
$status = new MinecraftServerStatus();
$response = $status->getStatus($server,$port);
 
// vepisovánà do obrázku
   imagefttext($im, 15, 0, 430, 140, $red, $font_file, '(c)Prcek');
       imagefttext($im, 25, 0, 10, 40, $green, $font, 'Online');
   imagefttext($im, 15, 0, 30, 70, $green2, $font_file, 'GaMmA 1.6.2');
   imagefttext($im, 15, 0, 30, 90, $green2, $font_file, 'IP: '.$response['hostname'].":".$response['port']);
   imagefttext($im, 15, 0, 30, 110, $green2, $font_file, 'Hraci: '.$response['players'].'/'.$response['maxplayers']);
   imagefttext($im, 15, 0, 30, 130, $green2, $font_file, 'Verzia: '.$response['version']);
 
;// nastav HTTP hlaviÄŤku
header('Content-Type: image/png');
// odešli png obrázek
imagepng($im);
// vyÄŤisti cache
imagedestroy($im);
}
?>



Něco špatně?


Ještě jsem změnil atribut všeho na 777
DarkMeni
Profil
sitole:
$im = imagecreatefrompng("signa2.png");
Jen tak od pohledu, tak 9. řádek, tahle funkce imageCreateTrueColor() předpokládá dva argumenty (šířku a výšku obrázku, a ne adresu jinýho obrázku). Abys tam měl nějakej obrázek jako pozadí by se muselo řešit jinak (přes imageCreateFromPNG() a imageCopy()).

Ale jednodušší bude to udělat přes HTML, z PHP si do stránky necháš vypsat třeba tabulku s těmi informacemi (status, počet hráčů atd...) a v HTML si ji pak nastyluješ přes CSS - a jako pozadí dáš ten obrázek, akorát bez toho vyplněnýho textu.
sitole
Profil
Ok ja o chapem ale ja jsem opravdu lamka sotva jsem udělal web v HTML není možé mě polat upravený souor jak to má být vše natavené? Je mě trapně že to neumí ale hold jsem takovej.. nechápu to prosím pomozte mě pošlete mě jsem celý soubor už upravený jako text budu moc moc děkovat...
DarkMeni
Profil
Jako sorry, ale nepřekládáš si to náhodou Google Translatem z češtiny do angličtiny a pak zpátky do češtiny? :D
No dobře, když říkáš že HTML umíš, tak bys tohle mohl částečně pochopit a poupravit si to:
<?php
include "status.class.php";
$status = new MinecraftServerStatus();
$response = $status->getStatus("mc27.crew.sk", 25580);
if($response){
  $ip = $response['hostname'].':'.$response['port'];
  $players = $response['players'].'/'.$response['maxplayers'];
  $version = $response['version'];
  echo "<table id=\"status\">
    <tr><td>IP: $ip</td></tr>
    <tr><td>Hráčů: $players</td></tr>
    <tr><td>Verze: $version</td></tr>
    <tr><td>Třeba název serveru...</td></tr>
  </table>";
}else{
  echo "Server je Offline";
}
?>
Teoreticky by ta třída šla napsat i procedurálně když má jen jednu metodu, ale tak dá se to nechat i ták.
sitole
Profil
Panebože já snad neumím ani to HTML :D

Ne ted vážně...
Ja to absolutn nechapu prosím vypuste to že umím HTML podle tohoto umím je 1% :D potřebuju jakože celý scriptne jen kousek ja nevím ka to přesně dát hází to error! :(
Petr ZZZ
Profil
Kategorii PHP nikdo nemoderuje, nebo jak je možné, že sitoleti ještě nikdo nevynadal, že nemá psát jak čuně?

Moderátor jenikkozak: Odstraněn přivolávač moderátorů.
DarkMeni
Profil
HTML je jen ta část za echo, takže začíná značkou <table> a končí značkou </table>, to ostatní je PHP kód.

Jakou chybu to hází?

sitole:
ja nevím ka to přesně dát
Do stránky ve který chceš nechat vypsat status a tý stránce pak dej koncovku php

<!DOCTYPE html>
<html>
  <head>
    <title>Online Status</title>
    <style type="text/css">
      #online_status {
        background: url("obrazek_na_pozadi.png");
        width: 550px;
        height: 300px;
      }
      #status_table {
        /*nějaký nastylování...*/
      }
    </style>
  </head>
  <body>
  Nějaký logo, navigace, panely...
  <div id="online_status">
  <?php
  include "status.class.php";
  $status = new MinecraftServerStatus();
  $response = $status->getStatus("mc27.crew.sk", 25580);
  if($response){
    $ip = $response['hostname'].':'.$response['port'];
    $players = $response['players'].'/'.$response['maxplayers'];
    $version = $response['version'];
    echo "<table id=\"status_table\">
      <tr><td>IP: $ip</td></tr>
      <tr><td>Hráčů: $players</td></tr>
      <tr><td>Verze: $version</td></tr>
      <tr><td>Třeba název serveru...</td></tr>
    </table>";
  }else{
    echo "<span id=\"offline\">Server je Offline</span>";
  }
  ?>
  </div>
  Nějaká patička...
  </body>
</html>

Jestli chceš hotový řešení, tak napiš do prací a zakázek, ale bude tě to asi něco stát
sitole
Profil
http://sitole.tk/Banner/status.php?server=mc27.crew.sk&port=25580

kuju funguje ale neukazujou se udaje......
Davex
Profil
Petr ZZZ:
jak je možné, že sitoleti ještě nikdo nevynadal, že nemá psát jak čuně?
Já vážně nevím. Kategorii PHP asi vládnou hodní moderátoři, kteří chápou ty mladé programátory, co si ve dvanácti letech myslí, že jim patří svět a kteří budou jednou ty pravidla pravopisu a slovník spisovných slov psát. Oni takhle nesrozumitelně nejenom píšou, ale i mluví.

sitole:
Nepiš prosím jako čuně. Asi málo čteš knížky a měl bys to dohnat.

kuju
Hupateto?
sitole
Profil
Davex
Dobře, omlouvám se :)
Už budu dvat pozor a nevím proč ale blbne mě klávesnice proto si vše musím kontrolovat :)

Jo a knížky čtu...
DarkMeni
Profil
sitole:
Jedou ti na hostingu PHPka?
Máš povolenej výpis chyb? (v php.ini -> display_errors = 1)
« 1 2 3 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0