Как задать рандомное время реконнекта при ошибках?

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Как задать рандомное время реконнекта при ошибках?

Сообщение piroJOKE »

Сперто на рагнарокботе.ру (в сокращении, оригинал тут).
Как задать рандомное время (...) перезахода (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:

Код: Выделить всё

		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 сек).
______________

ЗЫ: Очень оригинально... Эта пауза (30 секунд) просто жестко вбита к код.... Мда, шоб я так жил.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Нам пишут:
А на русро нормально настроеного боты ваще не банят я там посмотрел про баны они похуду отключают сервак на 15 мин ночью или утром и смотрят если чувак конектится через каждые 30 сек то бот просто у них у всех быны с перерывом в 10-30 сек
Имхо, бред сивой кобылы. Но, это как раз по топику.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
-StiXSinX-
Начинающий
Сообщения: 34
Зарегистрирован: Вт май 08, 2007 7:47 pm

Сообщение -StiXSinX- »

Прочитав топик, возник вопрос - раз это релогин, то чем от отличается от
# When disconnected, wait x seconds before reconnecting again
reconnect 300

из файла timeouts.txt ?
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Хрен его знает. Может быть, первая пауза берется оттуда, а последующие - жестко зашиты в код?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

М... аффтар оригинального поста не вкуривает в использование таймаута и места использования релога...
Переменная, которая меняется в таймаутах $timeout{'reconnect'}{'timeout'};
и используется она много где, но нам нужен recieve.pm и, возможно, directconnection.pm - там меняется задержка.

Чтобы поменять на рандомную(топорно) ищем:
= $timeout{'reconnect'}{'timeout'};
меняем на:
= $timeout{'reconnect'}{'timeout'} + rand(20); #ну или не 20 а как хотите

Если захочется - можно поменять и добавить в таймаутс величину рандомной задержки... да много чего можно
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
-StiXSinX-
Начинающий
Сообщения: 34
Зарегистрирован: Вт май 08, 2007 7:47 pm

Сообщение -StiXSinX- »

Благодарю.
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

Работает?
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
-StiXSinX-
Начинающий
Сообщения: 34
Зарегистрирован: Вт май 08, 2007 7:47 pm

Сообщение -StiXSinX- »

ну пока не известно, ибо не отключали пока что меня... потом посмотрю логи, мб там напишут :)
я стараюсь максимально приблизить своего чара в живому персонажу, который правда в ро недавно и мало чего умеет.

Идея данного поста мне нравится, давно хотел придумать что-нибудь похожее... но тут вроде это первая аналогичная тема.

ЗЫ сорри за излишний оффтоп ))
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

В общем господин Aib0 всё-таки зделал то, о чём была тема.
Единый нюанс.
В общем рекомендую максимальное значение рандома вынести тоже в настройки.
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

тогда так:
= $timeout{'reconnect'}{'timeout'};
меняем на
= $timeout{'reconnect'}{'timeout'} + rand($timeout{'reconnect_rand'}{'timeout'});
и дописываем в timeouts
reconnect_rand 20
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Аватара пользователя
Gans
Грамотный
Сообщения: 162
Зарегистрирован: Вт дек 26, 2006 12:20 pm

Сообщение Gans »

Aib0 писал(а):М... аффтар оригинального поста не вкуривает в использование таймаута и места использования релога...
Афтар-то как раз вкуривает. Разорви коннект вытыкиванием сетевухи, и посмотри, какой из таймаутов (какую переменную) будет использовать бот.
Изображение
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

Интересно-интересно... в любом случае аффтар не прав, relog(30) никак не зависит от значения в таймаутс. Похоже что там разные таймауты - одни фиксированные, одни зависящие от внешней переменной.

2КМ или кто знает:
есть ли в перле что-то вроде static переменных в С, чтоы значения сохранялись между двумя вызовами функции?
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Aib0
Вроде как нету.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

Решил апнуть темку, вот какая мылся возникла:

вот эта переменная "$timeout{ai_sit_idle}{time}" возвращает значение "ai_sit_idle" из файла timeouts.txt, т.е значение 10 (по умолчанию)

Чтоб прилепить рандом это нужно лесть в Receive.pm и править на:
$timeout{ai_sit_idle}{time} = time + rand(5);
Идея вот какая:
нельзя ли как-то в файле timeouts.txt прописать рандом, например:
ai_sit_idle 10 + rand(5)
этот вариант не рабочий, ну я думаю посредствои кавычек и какой-нибудь матери наверно можно сделать чтоб "10 + rand(5)" определялось как число, а не как текст?

ЗЫ: может ai_sit_idle eval(10 + rand(5)) ы?
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

4epT
а Евалом =))

Им то пойдёт =))
Ответить