[PHP] MobilniPlatby.cz [1.0.0-beta2]

Message
Autor
Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#21 Příspěvekod Mysteria » 09 čer 2014, 16:00

Těch prvních pár je z emulátoru (ty co prošli OK) a ty od 02. 06. 2014 16:07:44, co už neprochází jsou reálný SMSky, mám pravdu?
Protože podle toho logu to vypadá, že emulátor posílá jako text SMSKy jenom třeba EVIP <jméno>, kdežto když je to reálná SMSka, tak je to tam celý i s tím PM EXC EVIP <jméno>.
Zkus tam přidat před ty texty levelů všude PM EXC , jestli to začne reálný SMSky zpracovávat OK.

Uživatelský avatar
zdenda204
Příspěvky: 3617
Věk: 35
Registrován: 23 kvě 2012, 21:38
Reputation: 0

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#22 Příspěvekod zdenda204 » 09 čer 2014, 16:26

Tam je problém v tom, že ten emulátor je takovej "nedomrdlej".
Ono když si vybereš tu bránu, tak by ti to samo mělo do toho pole pro zprávu doplnit to PM BRÁNA, ale jaksi to funguje jen občas a zjistil jsem to až nedávno že to takto funguje :D
Přijímám zakázky na skripty/pluginy v PHP/Javě za malý poplatky! A kup mi sušenku :) Obrázek Obrázek
⇨Projekt Market⇦

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#23 Příspěvekod Mysteria » 09 čer 2014, 16:47

Takže z toho ale vyplývá, že teda všechny ty texty levelů musí obsahovat i to PM <název brány> + to co tam je teď, mám pravdu? Pokud jo, tak to tam někam musím napsat. Já myslel, že stačí jenom ten konec (dle toho emulátoru). Ty MP jsou fakt debilní, ani ten zkurvenej emulátor jim nejde pořádně. :D

jakub1000
Příspěvky: 907
Věk: 23
Registrován: 15 led 2013, 18:01
Reputation: 0
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#24 Příspěvekod jakub1000 » 02 črc 2014, 08:11

Čau, zkusil jsem dát na web tento script, když pošlu SMSku za 20 Kč odepíše mi to : Litujeme, ale poslali jste SMS, ktera nebyla automaticky rozpoznana. Kontaktujte prosim administratory.
Na server se asi 6x vykonal příkaz /say Hráč pggg si zakoupil VIP ! A vykonal se příkaz /pex user pggg group set vip.
Když půjdu na odkaz, který mi poslali z mobilních plateb, mám tam tyto chyby :

Kód: Vybrat vše

Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/62126/virtual/www/vipscript/mobilni-platby.php:1) in /data/web/virtuals/62126/virtual/www/vipscript/mobilni-platby.php on line 81

Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/62126/virtual/www/vipscript/mobilni-platby.php:1) in /data/web/virtuals/62126/virtual/www/vipscript/mobilni-platby.php on line 82
Děkujeme za podporu serveru. VIP ti bude aktivováno ihned !


Jak mám dále postupovat ? Co jsem udělal špatně ? Když tak příkaz /say jsem vymazal

mobilni-platby.php
Spoiler: zobrazit

Kód: Vybrat vše

<?php
$settings = [ // Nastavení serverového RCONu
   'ip' => '93.91.250.212',
   'port' => 26486,
   'password' => '*****'
];

$messages = [ // Nastavení chybových SMS zpráv
   'sms_bad_price' => 'Litujeme, ale poslali jste SMS za :REALPRICE:Kc misto SMS za :PRICE:Kc.',
   'sms_not_found' => 'Litujeme, ale poslali jste SMS, ktera nebyla automaticky rozpoznana. Kontaktujte prosim administratory.'
];

$levels = [ // Nastavení SMS levelů
   [
      'price' => 20, // Cena SMSky
    'text' => 'GVMC VIP :NICK:', // Text SMSky, :NICK: bude nahrazen skutečným nickem uvedeným v SMS, musí být unikátní v rámci všech platebních levelů
      'answer' => 'Děkujeme za podporu serveru. VIP ti bude aktivováno ihned !', // Odpověď na správně zaslanou SMS
      'commands' => [ // RCON příkazy vykonané po úspěšném zpracování SMSky, :NICK: bude nahrazen skutečným nickem uvedeným v SMS
         'pex user :NICK: group set vip'
      ]
   ], [
      'price' => 50,
      'text' => 'GVMC VIPP :NICK:',
      'answer' => 'Děkujeme za podporu serveru. VIP+ ti bude aktivováno ihned !',
      'commands' => [
         'pex user :NICK: group set vip+'
      ]
  ], [
      'price' => 79,
      'text' => 'GVMC EVIP :NICK:',
      'answer' => 'Děkujeme za podporu serveru. ExtraVIP ti bude aktivováno ihned !',
      'commands' => [
         'pex user :NICK: group set evip'
      ]
  ], [
      'price' => 99,
      'text' => 'GVMC UVIP :NICK:',
      'answer' => 'Děkujeme za podporu serveru. UltraVIP ti bude aktivováno ihned !',
      'commands' => [
         'pex user :NICK: group set sponzor'
      ]
  ], [
      'price' => 249,
      'text' => 'GVMC SPON :NICK:',
      'answer' => 'Děkujeme za podporu serveru. Sponzor ti bude aktivováno ihned !',
      'commands' => [
         'pex user :NICK: group set trialop'
      ]
  ], [
      'price' => 399,
      'text' => 'GVMC SSPON :NICK:',
      'answer' => 'Děkujeme za podporu serveru. SuperSponzor ti bude aktivováno ihned !',
      'commands' => [
         'pex user :NICK: group set esponzor'
      ]
   ]
];


/* Do not make any changes below this line if you don't know what are you doing! */
$rcon = new Rcon($settings['ip'], $settings['port'], $settings['password'], 3);
if (!$rcon->connect()) {
   echo 'Cannot connect to server RCON. Please check your settings.';
   exit;
}

$url = (object)filter_input_array(INPUT_GET);
$messages = (object)$messages;
try {
   if (isset($url->shortcode)) {
      if (mb_strlen($url->shortcode) === 7) {
         $realPrice = (int)substr($url->shortcode, -2, 2);
         foreach ($levels as $level) {
            $level = (object)$level;
            if ($level->price >= 100) continue;
            $realNick = explode(' ', $url->sms)[array_search(':NICK:', explode(' ', $level->text))];
            if ($url->sms === str_replace(':NICK:', $realNick, $level->text)) {
               if ($realPrice === $level->price) {
                  foreach ($level->commands as $command) $rcon->send_command(str_replace(':NICK:', $realNick, $command));
                  File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [SUCCESS] SMS zpráva s obsahem '$url->sms' s cenou {$realPrice}Kč byla úspěšně zpracována." . PHP_EOL);
                  header('Content-type:text/plain');
                  header('Content-length:' . mb_strlen($level->answer));
                  echo $level->answer;
                  exit;
               } else {
                  File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] SMS zpráva s obsahem '$url->sms' s cenou {$realPrice}Kč nebyla zpracována, protože měla mít cenu {$level->price}Kč." . PHP_EOL);
                  $answer = str_replace(':PRICE:', $level->price, str_replace(':REALPRICE:', $realPrice, $messages->sms_bad_price));
                  header('Content-type:text/plain');
                  header('Content-length:' . mb_strlen($answer));
                  echo $answer;
                  exit;
               }
            }
         }
         File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] SMS zpráva s obsahem '$url->sms' s cenou {$realPrice}Kč nebyla zpracována, protože nebyla rozpoznána." . PHP_EOL);
         header('Content-type:text/plain');
         header('Content-length:' . mb_strlen($messages->sms_not_found));
         echo $messages->sms_not_found;
         exit;
      } else {
         foreach ($levels as $level) {
            $level = (object)$level;
            if ($level->price <= 99) continue;
            $realNick = explode(' ', $url->sms)[array_search(':NICK:', explode(' ', $level->text))];
            if ($url->sms === str_replace(':NICK:', $realNick, $level->text)) { // Text is OK
               $file = "./database/$url->id.txt";
               $commands = NULL;
               foreach ($level->commands as $command) $commands .= str_replace(':NICK:', $realNick, $command) . ';;;';
               File::write($file, $commands);
               $level->answer .= ";90333$level->price";
               File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [SUCCESS] SMS zpráva ID $url->id s obsahem '$url->sms' s cenou {$level->price}Kč byla úspěšně zpracována." . PHP_EOL);
               header('Content-type:text/plain');
               header('Content-length:' . mb_strlen($level->answer));
               echo $level->answer;
               exit;
            }
         }
         File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] SMS zpráva ID $url->id s obsahem '$url->sms' s cenou {$level->price}Kč nebyla zpracována, protože nebyla rozpoznána." . PHP_EOL);
         header('Content-type:text/plain');
         header('Content-length:' . mb_strlen($messages->sms_not_found));
         echo $messages->sms_not_found . ';90333199';
         exit;
      }
   } elseif (isset($url->request)) {
      if ($url->status === 'DELIVERED') {
         $file = "./database/$url->request.txt";
         if (is_array($commands = explode(';;;', File::read($file)))) foreach ($commands as $command) $rcon->send_command($command);
         File::remove($file);
         File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [SUCCESS] Doručenka SMS zprávy ID $url->request byla úspěšně zpracována." . PHP_EOL);
      } else File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] Doručenka SMS zprávy ID $url->request nebyla zpracována, protože přišla se statusem $url->status ($url->message)." . PHP_EOL);
      header('HTTP/1.1 204 No Content');
      exit;
   }
} catch (\FileException $e) {
   echo $e->getMessage();
   exit;
}

class File {
   public static function read($source, $mode = 'r') {
      if (file_exists($source)) {
         if ($file = fopen($source, $mode)) {
            if ($content = fread($file, filesize($source))) {
               if (fclose($file)) {
                  return $content;
               } else throw new \FileException("Cannot close file $source.");
            } else throw new \FileException("Cannot read file $source.");
         } else throw new \FileException("Cannot open file $source.");
      } else throw new \FileException("Cannot find file $source.");
   }

   public static function write($destination, $content, $mode = 'a') {
      if (!is_dir(dirname($destination))) if (!mkdir(dirname($destination), 0777, TRUE)) throw new \FileException("Cannot create path $destination.");
      if ($file = fopen($destination, $mode)) {
         if (fwrite($file, $content)) {
            if (fclose($file)) {
               return TRUE;
            } else throw new \FileException("Cannot close file $destination.");
         } else throw new \FileException("Cannot write file $destination.");
      } else throw new \FileException("Cannot find file $destination.");
   }

   public static function remove($source) {
      if (file_exists($source)) {
         if (unlink($source)) {
            return TRUE;
         } else throw new \FileException("Cannot remove file $source.");
      } else throw new \FileException("Cannot find file $source.");
   }
}

class FileException extends Exception {

}

class Rcon {
   private $host;
   private $port;
   private $password;
   private $timeout;
   private $socket;
   private $authorized;
   private $last_response;
   const PACKET_AUTHORIZE = 5;
   const PACKET_COMMAND = 6;
   const SERVERDATA_AUTH = 3;
   const SERVERDATA_AUTH_RESPONSE = 2;
   const SERVERDATA_EXECCOMMAND = 2;
   const SERVERDATA_RESPONSE_VALUE = 0;

   public function __construct($host, $port, $password, $timeout) {
      $this->host = $host;
      $this->port = $port;
      $this->password = $password;
      $this->timeout = $timeout;
   }

   public function get_response() {
      return $this->last_response;
   }

   public function connect() {

      $this->socket = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);

      if (!$this->socket) {
         $this->last_response = $errstr;
         return false;
      }

      //set timeout
      stream_set_timeout($this->socket, 3, 0);

      //authorize
      $auth = $this->authorize();

      if ($auth) {
         return true;
      }

      return false;
   }

   public function disconnect() {
      if ($this->socket) {
         fclose($this->socket);
      }
   }

   public function is_connected() {
      return $this->authorized;
   }

   public function send_command($command) {
      if (!$this->is_connected()) return false;

      // send command packet.
      $this->write_packet(Rcon::PACKET_COMMAND, Rcon::SERVERDATA_EXECCOMMAND, $command);

      // get response.
      $response_packet = $this->read_packet();
      if ($response_packet['id'] == Rcon::PACKET_COMMAND) {
         if ($response_packet['type'] == Rcon::SERVERDATA_RESPONSE_VALUE) {
            $this->last_response = $response_packet['body'];
            return $response_packet['body'];
         }
      }

      return false;
   }

   private function authorize() {
      $this->write_packet(Rcon::PACKET_AUTHORIZE, Rcon::SERVERDATA_AUTH, $this->password);
      $response_packet = $this->read_packet();

      if ($response_packet['type'] == Rcon::SERVERDATA_AUTH_RESPONSE) {
         if ($response_packet['id'] == Rcon::PACKET_AUTHORIZE) {
            $this->authorized = true;
            return true;
         }
      }

      $this->disconnect();
      return false;
   }

   /**
    * Writes a packet to the socket stream..
    */
   private function write_packet($packet_id, $packet_type, $packet_body) {
      /*
        Size         32-bit little-endian Signed Integer       Varies, see below.
        ID            32-bit little-endian Signed Integer      Varies, see below.
        Type         32-bit little-endian Signed Integer      Varies, see below.
        Body         Null-terminated ASCII String         Varies, see below.
        Empty String   Null-terminated ASCII String         0x00
       */

      //create packet
      $packet = pack("VV", $packet_id, $packet_type);
      $packet = $packet . $packet_body . "\x00";
      $packet = $packet . "\x00";

      // get packet size.
      $packet_size = strlen($packet);

      // attach size to packet.
      $packet = pack("V", $packet_size) . $packet;

      // write packet.
      fwrite($this->socket, $packet, strlen($packet));
   }

   private function read_packet() {
      //get packet size.
      $size_data = fread($this->socket, 4);
      $size_pack = unpack("V1size", $size_data);
      $size = $size_pack['size'];

      // if size is > 4096, the response will be in multiple packets.
      // this needs to be address. get more info about multi-packet responses
      // from the RCON protocol specification at
      // https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
      // currently, this script does not support multi-packet responses.

      $packet_data = fread($this->socket, $size);
      $packet_pack = unpack("V1id/V1type/a*body", $packet_data);

      return $packet_pack;
   }
}
Naposledy upravil(a) jakub1000 dne 02 črc 2014, 11:20, celkem upraveno 1 x.

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#25 Příspěvekod Mysteria » 02 črc 2014, 11:18

Ještě by se hodil obsah mobilni-platby.log a tvar SMSky, se kterou to testuješ (zadáváš na simulátoru MP, případně do URL).

jakub1000
Příspěvky: 907
Věk: 23
Registrován: 15 led 2013, 18:01
Reputation: 0
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#26 Příspěvekod jakub1000 » 02 črc 2014, 15:57

Poslal jsem tvar : GVMC VIP pkgaj
Na číslo : 9033320
Posílal jsem to 1x

mobilni-platby.log
Spoiler: zobrazit

Kód: Vybrat vše

01. 07. 2014 17:54:20 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 17:54:24 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 17:54:28 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 17:54:32 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 17:54:35 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 17:55:07 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 18:03:38 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 18:32:08 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 19:30:38 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
01. 07. 2014 21:29:11 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 02:27:39 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 08:03:11 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 08:08:01 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 08:12:02 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 08:18:22 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP pkgaj' s cenou 20Kč byla úspěšně zpracována.


Posílal jsem SMS znova a toto je v logu.
Spoiler: zobrazit

Kód: Vybrat vše

02. 07. 2014 18:24:40 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:24:43 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:24:47 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:24:52 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:24:56 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:25:27 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:33:57 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:40:33 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:41:30 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:41:57 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
02. 07. 2014 18:42:02 => [SUCCESS] SMS zpráva s obsahem 'GVMC VIP hapad' s cenou 20Kč byla úspěšně zpracována.
Naposledy upravil(a) jakub1000 dne 02 črc 2014, 18:43, celkem upraveno 1 x.

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#27 Příspěvekod Mysteria » 02 črc 2014, 18:43

Podle logu je to OK. Pokud ti jde jenom o ty chyby, nemáš to náhodou na nějaký stránce kde je reklama typu free Endora? To by to mohlo způsobovat.

jakub1000
Příspěvky: 907
Věk: 23
Registrován: 15 led 2013, 18:01
Reputation: 0
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#28 Příspěvekod jakub1000 » 02 črc 2014, 18:44

Web mám u Wedosu.
O žádné reklamě nevím, ale přišel mi email od mobilních plateb

Kód: Vybrat vše

Chyba pri predani pozadavku

Dobrý den,

upozorňujeme, že Vaše rozhraní na adrese http://www.gamever.eu/vipscript/mobilni-platby.php?timestamp=2014-07-02T18%3A24%3A27&phone=myzgqupt&sms=GVMC+VIP+hapad&shortcode=9033320&country=CZ&operator=TMOBILE&att=4&id=4521369 pro bránu GameVer je aktuálně 02.07.2014 18:24:33 nedostupné.

Počet pokusů o předání je momentálně: 5

Po přihlášení do Vašeho účtu uvidíte v detailu brány další podrobnosti. Prosíme o rychlé vyřešení komplikací, v opačném případě bude nutné bránu deaktivovat.

Děkujeme za pochopení.

V případě dotazů či připomínek nás neváhejte kontaktovat.

S pozdravem

tým Mobilníplatby.cz

Airtoy, a.s.
Politických vězňů 21, 110 00 Praha 1,  www.airtoy.cz
T: +420 226 201 660, F: +420 226 201 665


Na mobilních plateb mám url scriptu tento : http://www.gamever.eu/vipscript/mobilni-platby.php

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#29 Příspěvekod Mysteria » 02 črc 2014, 19:15

Jako jednoduchý řešení můžeš vyzkoušet hodit úplně na začátek za značku <?php příkaz error_reporting(0); tím potlačíš tu chybu, jestli to bude stačit Mobilním platbám to nevím. Každopádně hoď mi ten skript do PM tak jak ho máš (RCON heslo k serveru si zahvězdičkuj), vyzkouším to u sebe.

Uživatelský avatar
Cernokneznik
Příspěvky: 855
Věk: 26
Registrován: 17 črc 2012, 20:23
Reputation: 1
Bydliště: Praha
Kontaktovat uživatele:

Re: [PHP] MobilniPlatby.cz [1.0.0-beta1]

#30 Příspěvekod Cernokneznik » 14 črc 2014, 11:12

Máš někde live ukázku, nebo screenshoty?
Nechce se mi to nahazovat jen abych zjistil jak to vypadá...
Elkia.club - A gaming club with it's own vanilla survival Minecraft server!
Obrázek apply here


Zpět na „Návody“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 45 hostů