1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Rcon и Русский язык

Тема в разделе "Оффтопик", создана пользователем Mr.Epic, 14 авг 2014.

  1. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    Здравствуйте, скажите возможно ли через Rcon получить русские символы?

    Вот ответ сервера:
    Код:
    А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я 000 а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я
    А вот что отображает Rcon:
    Код:
    ►,◄,↕,‼,¶,§,☺,▬,↨,↑,↓,→,←,∟ ↔,▲,▼, ,!,",#,$,%,&,',(,),*,+,,,-,., 000 0,1,2,3,4,5,Q,6,7,8,9,:,;,<,=,>,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O
     
  2. alexandrage

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

    Баллы:
    173
    Если на php то
    PHP:
    <?php
    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;
            }

            
    stream_set_timeout($this->socket30);
            
    $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;

            
    $this->write_packet(Rcon::PACKET_COMMANDRcon::SERVERDATA_EXECCOMMAND$command);
            
    $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_AUTHORIZERcon::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;
        }

        private function 
    write_packet($packet_id$packet_type$packet_body)
        {
            
    $packet pack("VV"$packet_id$packet_type);
            
    $packet $packet $packet_body "\x00";
            
    $packet $packet "\x00";
            
    $packet_size strlen($packet);
            
    $packet pack("V"$packet_size) . $packet;
            
    fwrite($this->socket$packetstrlen($packet));
      
        }

        private function 
    read_packet()
        {
            
    $size_data fread($this->socket4);
            
    $size_pack unpack("V1size"$size_data);
            
    $size $size_pack['size'];
            
    $packet_data fread($this->socket$size);
            
    $packet_pack unpack("V1id/V1type/a*body"$packet_data);
            return 
    $packet_pack;
        }
    }
    ?>
    PHP:
    include('rcon.php');
    $rcon = new Rcon($host$port$password$timeout);
    if (
    $rcon->connect())
        {
            
    $rcon->send_command($g1);
            
    $rcon->get_response());
        }
     
    Последнее редактирование: 15 авг 2014
  3. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    А в чём разница?
    Он у вас отображает Русский язык?
    У меня нет.

    Сделал скрипт который расшифровывает этот текст, по ASCII-коду символов.
    Но это не решение этой проблема, так как он работает только если весь текст русский.

    PHP:
    $key = Array('0' => 16'1' => 17'2' => 18'3' => 19'4' => 20'5' => 21'6' => 1'7' => 22'8' => 23'9' => 24'10' => 25'11' => 26'12' => 27'13' => 28'14' => 29'15' => 30'16' => 31'17' => 32'18' => 33'19' => 34'20' => 35'21' => 36'22' => 37'23' => 38'24' => 39'25' => 40'26' => 41'27' => 42'28' => 43'29' => 44'30' => 45'31' => 46'32' => 47'33' => 48'34' => 49'35' => 50'36' => 51'37' => 52'38' => 53'39' => 81'40' => 54'41' => 55'42' => 56'43' => 57'44' => 58'45' => 59'46' => 60'47' => 61'48' => 62'49' => 63'50' => 64'51' => 65'52' => 66'53' => 67'54' => 68'55' => 69'56' => 70'57' => 71'58' => 72'59' => 73'60' => 74'61' => 75'62' => 76'63' => 77'64' => 78'65' => 79 );
    $sym = Array('0' => 192'1' => 193'2' => 194'3' => 195'4' => 196'5' => 197'6' => 168'7' => 198'8' => 199'9' => 200'10' => 201'11' => 202'12' => 203'13' => 204'14' => 205'15' => 206'16' => 207'17' => 208'18' => 209'19' => 210'20' => 211'21' => 212'22' => 213'23' => 214'24' => 215'25' => 216'26' => 217'27' => 218'28' => 219'29' => 220'30' => 221'31' => 222'32' => 223'33' => 224'34' => 225'35' => 226'36' => 227'37' => 228'38' => 229'39' => 184'40' => 230'41' => 231'42' => 232'43' => 233'44' => 234'45' => 235'46' => 236'47' => 237'48' => 238'49' => 239'50' => 240'51' => 241'52' => 242'53' => 243'54' => 244'55' => 245'56' => 246'57' => 247'58' => 248'59' => 249'60' => 250'61' => 251'62' => 252'63' => 253'64' => 254'65' => 255 );
    $str = ;//Получение этой строки
    for ($i 0$i iconv_strlen($str); $i++) {
        for (
    $a 0$a count($key); $a++) {
        if(
    ord($str[$i]) == $key[$a]) {
        
    $test[] = $sym[$a];
        }
        }
    }
    for (
    $i 0$i count($test); $i++) {
        
    $prefix $prefix.chr($test[$i]);
    }
    echo 
    "<br>";
    echo 
    "Было:";
    echo 
    "<br>";
    echo 
    $str;
    echo 
    "<br>";
    echo 
    "<br>";
    echo 
    "Стало:";
    echo 
    "<br>";
    echo 
    $prefix;


    Пересмотрел много Rcon'ов
    И для Win
    И на PHP
    Везде отображается Русский язык так.
    Даже на webMCR в Rcon'e нету Русского языка.
    Видимо Она принципе не способна получить Русский язык ,если даже на webMCR не смогли это исправить...
     
  4. alexandrage

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

    Баллы:
    173
    Ок ща скрин кину что русский нормально работает.
    [​IMG]
    Вот внизу респонс идет ркона.
     
    Последнее редактирование: 15 авг 2014
  5. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    Можете ввести пожалуйста 2 команды?

    pex user test321 prefix тестабвгд
    pex user test321 prefix
    Он нормально выведет "тестабвгд"?
    Просто я не очень понял что вы на скриншоте вводили что он у вас вывел "хай всем)"
     
  6. alexandrage

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

    Баллы:
    173
    Эм, команда say была.
    [​IMG]
     
  7. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    Ввожу say привет всем!
    Вот что выводит:
    [​IMG]
    Вот скрипт:
    PHP:
    <?
    include(
    'rcon.class.php');
    include(
    '/php/config.php');
    $rcon = new Rcon($cfg['ip'], $cfg['rconPort'], $cfg['rconPass'], 100);
    if (
    $rcon->connect())
        {
            
    $g1 "say привет всем!";
            
    $rcon->send_command($g1);
            echo 
    $rcon->get_response();
        }
    ?>

    Возможно вы можете мне передать весь скрипт?
    Буду очень благодарен вам, я как не пробовал у меня не отображается русский язык.
     
  8. ykpon

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

    Баллы:
    173
    Что в /php/config.php?
     
  9. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    PHP:
    <?php
    $cfg 
    = array(

    'ip' => 'Тут написан IP',

    'rconPort' => '30014',

    'rconPass' => 'Тут написан пароль'
    );
    ?>

    Добрый день, не могли бы вы попробовать получить ответ на Русском языке ,как полую его я?
    То есть через вот такой скрипт:
    PHP:
    <?
    include(
    'rcon.class.php');
    $rcon = new Rcon(*ip*, *port*, *pass*, 100);
    if (
    $rcon->connect())
        {
            
    $g1 "say привет всем!";
            
    $rcon->send_command($g1);
            echo 
    $rcon->get_response();
        }
    ?>
    Буду очень благодарен вам ,если вы всё же попробуете через данные скрипт получить ответ от Rcon.
    Я тут подумал, может дело в ядре сервера?
    Подскажите пожалуйста какое у вас стоит?
     
  10. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Может, кодировка на сайте не та?
     
  11. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    Пробовал менять , Русский не появляется ,просто эти значки меняются на другие :)
     
    Последнее редактирование: 21 авг 2014
  12. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Смотрите сам скрипт ркона, он у вас херню декодирует. Если быть точнее то не в той кодировке.
    Если я правильно помню то rcon работал в кодировке cp1251. Не знаю поправили это правда или нет.
     
    Последнее редактирование: 21 авг 2014
  13. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    Человек мне скинул скрипт выше, у него он работает правильно.
    Возможно нужно что то с ядром сервера делать?
     
  14. alexandrage

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

    Баллы:
    173
    У меня на линукс и всегда все в utf-8.
     
  15. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Посмотрел код, оно вообще от системы зависит >_<
     
  16. alexandrage

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

    Баллы:
    173
    Ну на линукс точно не глючит. А вот форточки уже под вопросом да.
     
  17. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    Я так понимаю если клиент зашёл с WIN у него нету Русского языка ,если клиент зашёл с Linux у него он есть?
     
  18. zimitri

    zimitri Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Rus_ZiM
    Добрый день. Как изменить текст в чате который выводит Rcon ? Например если написать в Rcon команду say привет. То в чате игры выйдет такое сообщение : [Rcon] привет. Как изменить то что написано в квадратных скобках ?
     
  19. Автор темы
    Mr.Epic

    Mr.Epic Старожил Пользователь

    Баллы:
    103
    В этой теме есть коды цветов, пробовал с помощью них?
     
  20. zimitri

    zimitri Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Rus_ZiM
    Ты не понял . Я не цвет хочу поменять а текст.
     

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