Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Решено Как исправить сокет в MinecraftStatus.class.php

Тема в разделе "[Архив] Помощь", создана пользователем rescr1pt, 14 апр 2013.

Статус темы:
Закрыта.
  1. Автор темы
    rescr1pt

    rescr1pt Старожил Пользователь

    Баллы:
    103
    Кто может изменить сокет? а то с переходом на 1.5 билеберда
    Код:
    class MinecraftStatus {
        private $Socket, $Info;
        public $Online, $MOTD, $CurPlayers, $MaxPlayers, $IP, $Port, $Error;
     
        public function __construct($IP, $Port = '25565') {
            $this->IP = $IP;
            $this->Port = $Port;
         
            // Remove any protocols from serveraddress
            if(preg_match('/(.*):\/\//', $this->IP)) {
                $this->IP = preg_replace('/(.*):\/\//', '', $this->IP);
            }
            if(strpos($this->IP, '/') !== false) {
                $this->IP = rtrim($this->IP, '/');
                if(strpos($this->IP, '/') !== false) {
                    $this->Failed();
                    $this->Error = 'Unsupported IP/Domain format, no \'/\'s allowed';
                    return;
                }
            }
            if(preg_match_all('/:/', $this->IP, $matches) > 1) {
                unset($matches);
                // IP6
                if(strpos($this->IP, '[') === false && strpos($this->IP, ']') === false)
                    $this->IP = '['.$this->IP.']';
            } else if(strpos($this->IP, ':') !== false) {
                $this->Failed();
                $this->Error = 'Unsupported IP/Domain format';
                return;
            }
         
            if($this->Socket = @stream_socket_client('tcp://'.$this->IP.':'.$Port, $ErrNo, $ErrStr, 1)) {
                // If IP6 remove brackets
                if(strpos($this->IP, '[') === 0 && strpos($this->IP, ']') === (strlen($this->IP) - 1))
                    $this->IP = trim($this->IP, '[]');
             
                $this->Online = true;
             
                fwrite($this->Socket, "\xfe");
                $Handle = fread($this->Socket, 2048);
                $Handle = str_replace("\x00", '', $Handle);
                $Handle = substr($Handle, 2);
                $this->Info = explode("\xa7", $Handle); // Separate Infos
                unset($Handle);
                fclose($this->Socket);
             
                if(sizeof($this->Info) == 3) {
                    $this->MOTD      = $this->Info[0];
                    $this->CurPlayers = (int)$this->Info[1];
                    $this->MaxPlayers = (int)$this->Info[2];
                    $this->Error      = false;
                } else if(sizeof($this->Info) > 3) { // Handle error, Minecraft don't handle this.
                    $Temp = '';
                    for($i = 0; $i < sizeof($this->Info) - 2; $i++) {
                        $Temp .= ($i > 0 ? '§' : '').$this->Info[$i];
                    }
                    $this->MOTD      = $Temp;
                    $this->CurPlayers = (int)$this->Info[sizeof($this->Info) - 2];
                    $this->MaxPlayers = (int)$this->Info[sizeof($this->Info) - 1];
                    $this->Error      = 'Faulty motd or outdated script';
                } else {
                    $this->Failed();
                    $this->Error      = 'Unexpected error, cause may be an outdated script';
                }
            } else {
                $this->Online = false;
                $this->Failed();
                $this->Error = 'Can not reach the server';
            }
        }
     
        public function Info() {
            return array(
                'MOTD'      => $this->MOTD,
                'CurPlayers' => $this->CurPlayers,
                'MaxPlayers' => $this->MaxPlayers
            );
        }
     
        private function Failed() {
            $this->MOTD      = false;
            $this->CurPlayers = false;
            $this->MaxPlayers = false;
        }
    }
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    rescr1pt

    rescr1pt Старожил Пользователь

    Баллы:
    103
    Как мне подсказали ,решением было

    Код:
        $Handle = fread($this->Socket, 2048);
        $Handle = substr($Handle, 1);
        if(strpos($Handle, "\x00\x00")!=0)
        {
        $Handle = explode("\x00\x00", $Handle);
        $Handle = str_replace("\x00", '', $Handle);
        $this->MOTD = $Handle[3];
        $this->CurPlayers = $Handle[4];
        $this->MaxPlayers = $Handle[5];
        $this->Error = false;
        }
     
Статус темы:
Закрыта.

Поделиться этой страницей