Как задать рандомное время (...) перезахода (reconnecting time) не 30 секунд, а например, 10...30 секунд?
______________(...) пока 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:
Вот оно: relog(30); окей, просто добавим туда случайность: relog(30+rand(20)).Код: Выделить всё
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);
Таким образом мы получим перелогинивание со случайным интервалом, через время от (30 сек) до (30 + 20 сек).
ЗЫ: Очень оригинально... Эта пауза (30 секунд) просто жестко вбита к код.... Мда, шоб я так жил.