PDA

Просмотр полной версии : Как задать рандомное время(timeouts.txt)••••••


vitt
28.03.2007, 04:40
Как задать рандомное время в файле timeouts.txt, например время перезахода(reconnecting time) не 30 секунд, а, например, 10 - 30 секунд?

Буду очень благодарен.

Gans
28.03.2007, 12:34
Неплохая идея...

Проблема в том, что пока Kore не залогинилась на map-сервер, у нее отключена вся игровая логика (ai), и поэтому макросы не работают.
Следовательно, надо ковырять исходники.

Смотрим, какое сообщени выводится на экран при релогине: "Relogging in 30 seconds...", ищем по исходникам "Relogging in".
Вот оно, в misc.pm:

sub relog {
my $timeout = (shift || 5);
my $silent = shift;
$net->setState(1);
undef $conState_tries;
$timeout_ex{'master'}{'time'} = time;
$timeout_ex{'master'}{'timeout'} = $timeout;
$net->serverDisconnect();
message TF("Relogging in %d seconds...\n", $timeout), "connection" unless $silent;
}

Можно было бы просто дописать туда еще дополнительный случайный период времени, но это кривизна.
Поэтому, ищем места, где вызывается эта функция, т.е., строки, содержащие "relog(".
Я нашел что-то похожее в Receive.pm:

my $master = $masterServer;
error TF("Connect failed, something is wrong with the login settings:\n" .
"version: %s\n" .
"master_version: %s\n" .
"serverType: %s\n", $master->{version}, $master->{master_version}, $config{serverType}), "connection";
relog(30);

Вот оно: relog(30); окей, просто добавим туда случайность: relog(30+rand(20)).

Таким образом мы получим перелогинивалие со случайным интервалом через время от (30) до (30 + 20 сек).

ЗЫ: Насчет "очень благодарен" - кошелек WMR у миня в профиле. ^____^