Jump to content

Отдельный браузер серверов


Recommended Posts

Многим игрокам, особенно новичкам, хотелось бы иметь отдельный браузер серверов, чтобы не запуская мультиплеер быстро просматривать списки серверов, список игроков и инфо выбранного сервера, с возможностью конекта. Может быть и более широкий функционал. Сама идея существования такого внешнего браузера основана на многочисленных отзывах обычных игроков, которые по сути являются основными "потребителями".

Кто-то может сказать, что есть онлайн списки серверов и этого достаточно, также как и достаточно встроенного в мультиплеер браузера серверов. Давайте разберемся, что к чему.

Итак, встроенный браузер серверов. Что же так не устраивает многих игроков в этом несложном инструменте внутри мультиплеера? Тут все просто. Основной претензией к браузеру является только тот факт, что нужно запустить мультиплеер (соответственно саму игру) для работы с браузером. Для некоторых это время ожидания при запуске и выходе весьма раздражительно, особенно, если игра запускается на весь экран, а нужно что-то быстро посмотреть.

Что касается онлайн сайтов со списками серверов. Нужно запускать браузер и переходить по нужной ссылке, искать нужные серверы, или открывать страницы из закладок с нужными серверами. При загрузке нужных данных, мы грузим и ненужные тоже. Конект происходит по ссылке типа mta://адрес:порт или mtasa://. При конекте браузер, естественно, остается работать дальше в фоновом режиме.

Неудобства определенно есть.

А что может предложить отдельный браузер в виде небольшой программы?

Link to comment

нашел проект браузера серверов от mabako - https://github.com/mabako/mta-browser. Я сам не С прогер, но если есть знающие люди, посмотрите.

Ну а просто посмотреть как он выглядит и заюзать его можно скачав последний релиз - https://github.com/downloads/mabako/mta-browser/mta-browser-1.7.zip

Скрин - http://mxgames.kz/images/2011-07-30_102424.png

Но тут вы сами видите есть определенные недоработки интерфейса. Я думаю, нам стоит обсудить какой функционал должен быть в браузере серверов...

Link to comment

как я понял в мта, браузер серверов обновляет список через свои источник, а не через game-monitor.com

Кто-нибудь знает через какой именно источник идет запрос списка серверов у мта?

Link to comment

чтобы никого не спрашивать, мона просто включить ручной режим фаервола, чтобы он спрашивал о разрешении соединения с каким-либо IP, портом и протоколом. Я так всегда делаю. Но первый список всегда вроде запрашивается у гейм-монитора и только при отрицательном ответе - со своего сервера

Link to comment

обычный бинарник, невооруженным глазом видно, что все числа там, включая IP:PORT, записаны в бинарном виде. Названия, стессна, в виде строк. Если все эти адреса отдают контент в одинаковом виде, то нужно сделать возможность связи с этими ресурсами, если какой-то основной мастер серв недоступен. В том числе, нужно просмотреть контент и от гейм-монитора. Получится своеобразный список бэкап сервов, с которыми браузер тоже должен уметь работать. И только если не один серв не отвечает, показать инфо о недоступности сервов или выключенном соединении с Интернетом.

Должно быть обязательное кэширование всех полученных данных. После открытия браузер будет запрашивать список и сравнивать его с кэшем, попутно подправляя его, убирая отсутствующие и добавляя появившиеся серверы. Пинги тоже кэшируются и подправляются только после отображения отредактированного кэш списка. Кэш безусловно важен, даже на тот случай, когда мастер сервы не отвечают.

в coreconfig.xml все списки, надо заметить что они могут меняться.

Он будет не актуален, если не пользоваться самим браузером серверов внутри клиента. А это зависимость.

Link to comment

ну вроде как список я озвучивал в предыдущем посте, вопрос был поставлен о расшифровке данных файла а не о том, что очевидно. сам прекрасно вижу что это бинарник содержащий данные о онлайн серверах, меня интересует каким образом его пропарсить можно

Link to comment

Выше давал ссылку на проект другого браузера, можно найти в исходнике, чтобы не создавать парсер заново. Если такой код есть в открытом исходнике клиента, то можно взять инфо оттуда.

На каком языке пишите?

Link to comment

Я просто оставлю это тут.

  
function mtaStat($ip, $port, $request) { 
    $port=$port+123; 
    $fp = fsockopen ( "udp://" . $ip, $port, $errno, $errstr ); 
               if ( $fp ) 
               { 
                         stream_set_timeout ( $fp, 1, 0 ); 
                         fwrite ( $fp, "s" ); 
                         $dat = fread ( $fp, 16384 ); 
                         fclose ( $fp ); 
          if ( substr ( $dat, 0, 4 ) == "EYE1" ) 
          { 
               $dat = substr ( $dat, 4 ); 
  
               $i = 0; 
                
               while($dat!="") 
               { 
               if ( substr ( $dat, 0, 2 ) == chr ( 1 )."?" ) $dat = substr ( $dat, 2 ); 
                
               $l = ord ( substr ( $dat, 0, 1 ) ); 
               $blks[$i] = substr ( $dat, 1, $l-1 ); 
               $dat = substr ( $dat, $l ); 
               $i++; 
               } 
  
               $return['name'] = $blks[2]; 
               $return['game'] = $blks[3]; 
               $return['map'] = $blks[4]; 
               $return['version'] = $blks[5]; 
                
               if ( $blks[6] == "0" ) 
               { 
                    $return['public'] = true; 
               } 
               else 
               { 
                    $return['public'] = false; 
               } 
                
               $return['players'] = $blks[7]; 
               $return['maxplayers'] = $blks[8]; 
               $j = 9; 
               while ( substr ( $blks[$j], 0, 4 ) == "Team" ) 
               { 
                    $j += 2; 
               } 
               $c = 0; 
               for ( $i = $j; $i<sizeof($blks)-2; $i = $i+5 ) 
               { 
                    $players[$c]['name'] = $blks[$i]; 
                    $players[$c]['ping'] = $blks[$i+4]; 
                    $c++; 
               } 
          } 
           
               } 
                
    if($request=="players") return $players; 
    else return $return; 
     
} 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...