ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» ломка | страница 1 |
 |
Страница 1 из 1 |
|
|
|
Канал Freelancer: «ломка» |
|
|
Xealus
|
|
Хотел бы открыть тему по программной стороне Freelancer, скрытые возможности, коды..., все что относится к программированию.
На данный момент ищу строку UDP запроса для получения данных с сервера.
Хочу написать свою программу для выкладывания на сайт данных о пинге и количестве игроков (язык Perl).
Если есть единомышлиники, прошу ответить, может сообразим ченить полезное?
|
|
|
Пассажир
|
|
Ну, я тут буду за единомышленника
Я три раза приседал, так и не начал. Уж слишком там все заморочно. DirectPlay lobby и прочие премудрости. Пытался сниффать пакеты, думал, разберусь... Куда там, оно шлет фиг знает чего и сколько, включая ключи регистри. Кстати, ключи шлются на центральный сервер (который ведает списком публичных серверов), так что все ИМ прекрасно известно. И сколько пиратов в мире играет, и с каких IP, и с каких рег-номеров. Не удивлюсь, если до кучи ОСь пишут и т.д.
Ближе к теме. Есть сервак -- http://www.flserver.com/. Там прога на C# приведена, работает судя по всему только с .NET SDK. Но! есть там the "special" packet that will return the correct data. Посылая его на UDP порт сервера, получаем респонз с нужными данными -- имя, число игроков, server message и т.д. Пинг, насколько я понимаю, надо считать ручками с момента отсылки пакета.
Вот перловый код (без подсчета пинга, лениво было писать):
Код: |
#!/usr/bin/perl -w
use strict;
use IO::Socket;
my $server=shift or die "Use: $0 <FL server to ping>\n";
# Create the "special" packet that will return the correct data
# copied from http://www.flserver.com/flping.htm
my $packet="";
$packet.=chr(0x00);
$packet.=chr(0x02);
$packet.=chr(0xF1);
$packet.=chr(0x26);
$packet.=chr(0x01);
$packet.=chr(0x26);
$packet.=chr(0xF0);
$packet.=chr(0x90);
$packet.=chr(0xA6);
$packet.=chr(0xF0);
$packet.=chr(0x26);
$packet.=chr(0x57);
$packet.=chr(0x4E);
$packet.=chr(0xAC);
$packet.=chr(0xA0);
$packet.=chr(0xEC);
$packet.=chr(0xF8);
$packet.=chr(0x68);
$packet.=chr(0xE4);
$packet.=chr(0x8D);
$packet.=chr(0x21);
#print "packet: [$packet]\n";
print "Trying $server...\n";
my $reply="";
my $remote = IO::Socket::INET->new(Proto => "udp", PeerAddr => $server, PeerPort => '2302')
or die "Cannot connect to FL port at $server\n";
print $remote $packet;
recv($remote, $reply, 1024, 0);
#print "$reply\n";
close $remote;
my $nlen=ord(substr($reply,4,1))-91;
printf "Server: %s\n", substr($reply,92,$nlen);
printf "Max players: %2d\n", ord(substr($reply,20,1))-1;
printf "Current players: %2d\n", ord(substr($reply,24,1))-1;
|
Разберешься, разовьешь -- докладывай
|
|
|
Xealus
|
|
А это мой
use IO::Socket;
$ipaddr = "195.149.21.31";
$port = "2302";
$buf = "%00%02%F1%26%01%26%F0%90%A6%F0%26%57%4E%AC%A0%EC%F8%68%E4%8D%21";
$buf =~ s/%([0-9A-H]{2})/pack('C', hex($1))/eg;
$socket = IO::Socket::INET->new(Proto => "udp") or die "Socket error: $@\n";
$portaddr = sockaddr_in($port, $ipaddr);
label:
$n++;
send($socket, $buf, 0, $portaddr) == length($buf) or die "Can't send: $!\n";
if ($n ne 1000000){goto label;}
print " \n";
Но это правда не такой мирный как у тебя
|
|
|
Tramp
1220 EGP
         Рейтинг канала: 2(12) Репутация: 293 Сообщения: 15898 Откуда: Москва, деревня Чертаново Зарегистрирован: 23.03.2002
 |
|
Отцы, только не слишком в сторону "ломки" уходите, общие данные еще куда не шло, а вот все остальное. Между собой в привате или по мылу.
_________________ Вера в себя - это вера в то, что в вас есть нечто большее, чем вы о себе знаете |
|
|
Xealus
|
|
>Dedis
Может ты подскажеш почему комманда print system ("ping $server"); в инете не пашет?
|
|
|
Пассажир
|
|
Tramp -- нет проблем, как только кое-кто зарегистрится , сможем уйти в приват со скучными деталями.
Xealus -- в инете это под CGI? Ну там же консоли нету, потому ping в никуда выводит (а print здесь вообще лишний ). А чем тебе Net::Ping не нравится?
И давай действительно с техникой в приват.
По сути -- пинговать серверы со своей страницы не осбо актуально. Все равно у всех по-разному будет. Имхо -- не совсем нужная инфа. А вот график загрузки прорисовать -- это вот да, интересно. Поставить десяток серверов на watch list и следить сколько там игроков. Это уже может быть действительно полезно.
|
|
|
|
|
|
Канал Freelancer: «ломка» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Отстаньте от меня, не буду я с ним заниматься, пусть жена его полоскает и за ногу трясет!!! (возмутился Vitalii)
|
» ломка | страница 1 |
|