Сработка автомакро по времени / время в консоли - решено

Всё, что касается макро-плагина.

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

Правила форума
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
Аватара пользователя
miniBot
Грамотный
Сообщения: 429
Зарегистрирован: Вс ноя 05, 2006 8:48 am
Откуда: Москва
Контактная информация:

Сработка автомакро по времени / время в консоли - решено

Сообщение miniBot »

Вобщем нужно чтобы автомакрос срабатывал на определенное текущее системное время, в мануале нет такого оператора, а запрашивать грубо говоря каждые 5 минут сервер - палевно.
Последний раз редактировалось miniBot Чт ноя 08, 2007 4:31 pm, всего редактировалось 1 раз.
помощь только тем у кого включен параметр - mozgEnable 1

БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

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

miniBot, ну и чё ты предлагаешь?
может кто-то пожуёт вот это и что-нибудь куда-нить (желательно к do-commander'у) прикрути?

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

##### AUTOBREAKTIME #####
# Break time: automatically disconnect at certain times of the day
sub processAutoBreakTime {
	if (timeOut($AI::Timeouts::autoBreakTime, 30)) {
		my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
		my $hormin = sprintf("%02d:%02d", $hour, $min);
		my @wdays = ('sun','mon','tue','wed','thu','fri','sat');
		debug "autoBreakTime: hormin = $hormin, weekday = $wdays[$wday]\n", "autoBreakTime", 2;
		for (my $i = 0; exists $config{"autoBreakTime_$i"}; $i++) {
			next if (!$config{"autoBreakTime_$i"});

			if  ( ($wdays[$wday] eq lc($config{"autoBreakTime_$i"})) || (lc($config{"autoBreakTime_$i"}) eq "all") ) {
				if ($config{"autoBreakTime_${i}_startTime"} eq $hormin) {
					my ($hr1, $min1) = split /:/, $config{"autoBreakTime_${i}_startTime"};
					my ($hr2, $min2) = split /:/, $config{"autoBreakTime_${i}_stopTime"};
					my $time1 = $hr1 * 60 * 60 + $min1 * 60;
					my $time2 = $hr2 * 60 * 60 + $min2 * 60;
					my $diff = ($time2 - $time1) % (60 * 60 * 24);

					message TF("\nDisconnecting due to break time: %s to %s\n\n", $config{"autoBreakTime_$i"."_startTime"}, $config{"autoBreakTime_$i"."_stopTime"}), "system";
					chatLog("k", TF("*** Disconnected due to Break Time: %s to %s ***\n", $config{"autoBreakTime_$i"."_startTime"}, $config{"autoBreakTime_$i"."_stopTime"}));

					$timeout_ex{'master'}{'timeout'} = $diff;
					$timeout_ex{'master'}{'time'} = time;
					$KoreStartTime = time;
					$net->serverDisconnect();
					AI::clear();
					undef %ai_v;
					$net->setState(Network::NOT_CONNECTED);
					undef $conState_tries;
					last;
				}
			}
		}
		$AI::Timeouts::autoBreakTime = time;
	}
} 
зы:

файл CoreLogic.pm, в конфиге:
autoBreakTime {
startTime
stopTime
}
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

2Афтар, ну если не мудрствовать лукаво, то специально для любителей разгребать регекспами (хе-хе) мона написать плагинчег time.pl

Типо будет команда time, и она будет что-нибудь писать в консоль. :)

* * *

А если "мудрствовать" то была у нас классная идея (щас она лежит на кладбище) написать модный шедулер к Коре; оно бы среди всего прочего могло заниматься и выполнением разных команд в определенное время.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

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

peroJOKE, "команда time" поддерживается и в макросах:
$.time - current time as unix timestamp ("1131116304")
$.datetime - current date and time ("Fri Nov 4 15:59:36 2005")
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
miniBot
Грамотный
Сообщения: 429
Зарегистрирован: Вс ноя 05, 2006 8:48 am
Откуда: Москва
Контактная информация:

Сообщение miniBot »

а вот еще, я вобщем не очень в перле понимаю, но всеже, не подскажите в каком файлике вобще кора выводит на консоль сообщение. Ведь в моем случае, просто если подставить перед любым сообщением в консоль время, то и сработку макро на консольку можно поставить.
тоесть вместо
[100/100] You attack Monster
былобы
[18:15][100/100] You attack Monster
помощь только тем у кого включен параметр - mozgEnable 1

БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

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

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

miniBot, как на счёт того чтобы строчку "[18:15][100/100] You attack Monster" можно захватить регэкспом..
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
miniBot
Грамотный
Сообщения: 429
Зарегистрирован: Вс ноя 05, 2006 8:48 am
Откуда: Москва
Контактная информация:

Сообщение miniBot »

4epT Для того чтобы её захватить, надо чтобы она была, я к этому и клонил.
помощь только тем у кого включен параметр - mozgEnable 1

БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
Аватара пользователя
miniBot
Грамотный
Сообщения: 429
Зарегистрирован: Вс ноя 05, 2006 8:48 am
Откуда: Москва
Контактная информация:

Сообщение miniBot »

ВОТ блин тупни-то все, а я иду под флагом тупней, ыыы.

Вобщем начну с конца, в Коре ЕСТЬ возможность выводить текущее время на консоль.

Дело было так, вскрыл файло Log.pm обнаружил очень интересные параметры файла config.txt, используемые в этом файле, которые привели меня к повторному прочтению мануала по этим параметрам, и я был в шоке! Велосипедик-то изобрели до нас!

И так параметры в студию! ТАДААААА.....

showTime - отображает на консоль полную дату, но ксожалению макрос её не видит, (или у меня руки кривые)

Поэтому спустился в мануале к следующему параметру

showTimeDomains - список в каких строках выводить время, у меня получился небольшой списочег - ai_attack, ai_npcTalk, attacked, attackedMiss, attackMon, attackMonMiss, connection, console, deal, drop, emotion, exp, equip, follow, guildchat, guildnotice, info, input, inventor, list, load, looter, map_event, npc,party, partychat, pet, plugins, pm, pm/sent ,portals, portalRecord, publicchat, refine, route, route_teleport, schat, selfSkill, skill, sold, startup, storage, success, syntax, system, teleport, useItem, useTeleport, waypoint, xkore

ну и самое главное, чтобы не засорять полной датой консоль
showTimeDomainsFormat

итого у меня получилось
config.txt

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

showTimeDomains ai_attack, ai_npcTalk, attacked, attackedMiss, attackMon, attackMonMiss, connection, console, deal, drop, emotion, exp, equip, follow, guildchat, guildnotice, info, input, inventor, list, load, looter, map_event, npc,party, partychat, pet, plugins, pm, pm/sent ,portals, portalRecord, publicchat, refine, route, route_teleport, schat, selfSkill, skill, sold, startup, storage, success, syntax, system, teleport, useItem, useTeleport, waypoint, xkore
showTimeDomainsFormat [H:M]
в консольке получается что-то типа

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

[15:57] Attacking: Monster Drops (0)
[15:57] [ 51/100] You attack Monster Drops (0) - Dmg: Miss! (delay 58.7)
[15:57] [ 51/100] You attack Monster Drops (0) - Dmg: 13 (delay 58.7)
[15:57] [ 51/100] Monster Drops (0) attacks you - Dmg: Miss! (delay 67.2)
[15:57] [ 51/100] You attack Monster Drops (0) - Dmg: 35 (delay 58.7)
[15:57] [ 53/100] Monster Drops (0) attacks you - Dmg: 7 (delay 67.2)
[15:57] [ 53/100] You attack Monster Drops (0) - Dmg: 34 (delay 58.7)
[15:57] Exp gained: 4/3 (0.57%/0.00%)
[15:57] Item added to inventory: Jellopy (1) x 1 - Non-usable
[15:57] Item added to inventory: Apple (19) x 1 - Usable
[15:57] Target died
[15:57] You used Item: Apple (19) x 1 - 0 left
[15:57] Calculating random route to: Sograt Desert(moc_fild07): 342, 57
ну и теперь остается захватить времечко макросом

macros.txt

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

automacro antibot02 {
	console /\[..:(04|34)\]/i
	call {
	do relog 70
	}
}
Вот только насчет регулярного выражения не силен
квадратная скобка - метасимвол, поэтому обратный слеш перед ним.
04 34 в скобках с прямым разделителем - либо то либо то
точка - это любой символ???
помощь только тем у кого включен параметр - mozgEnable 1

БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

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

если использовать:

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

console /\[\d\d:(04|34)\]/
то макрос не будет срабатывать на строчки, типа:
[ы!:04] бла бла бла
[ы?:34] бла бла бла
ну малоли где такое попадётся :twisted:

а ещё можно так придумать:

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

do relog @rand(65,75)
но ксожалению макрос её не видит, (или у меня руки кривые)
ну как же "macro-маньячина" пропустит такое заявление :twisted:

Итак немного понтов:

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

console /\[... \d+ \d\d:(34|04):\d\d \d+\.\d]/
и мы будем реагировать на строчки, типа:
[Oct 19 17:04:12 2007.98] бла бла бла
[Oct 19 17:34:12 2007.98] бла бла бла
ЗЫ: Памятка по регулярным выражениям (regexp)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
varg
Начинающий
Сообщения: 35
Зарегистрирован: Вс ноя 19, 2006 9:33 pm

Сообщение varg »

забавное решение.
естественно если повыключать все сообщения из консоли, то шанс срабатывания макроса стремительно падает к нулю ;)
пока царапал эти 3 строчки - вопрос возник ...
а если в 1 секунду происходит несколько действий отображаемых в консоли? О_о

вобщем нацарап0л0сь вот тут такая шняжка
чесно скажу, НЕ ПРОВЕРЯЛ
1)неначем, нет живого бота куда бы можно было это всунуть (((
2)нечем чес слово, долго думал, и не нашел кудабы данную фигню втыкнуть, и для каких цэлей использовать

вобщем в конфиг файл вписываем строки
startup_time часы:минуты:секунды --- обязательно разделённые двоеточиями
startup_macro имя_макроса_на_выполнение

в папке plugins создаём файл budilnik.pl с таким содержанием

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

use Time::localtime;
my $datetime = localtime->hour().":".localtime->min().":".localtime->sec();
my $ai_hook;
my $secc;
my $macro_name;
my $macro_time;
Plugins::register('budilNic', 'alarm in some times', \&event_unload, \&event_reload);
$ai_hook = Plugins::addHook('AI_pre', \&init);

sub init {
if ($Globals::config{'startup_time'}) {
$macro_time=$Globals::config{'startup_time'};
if ($Globals::config{'startup_macro'}) {
$macro_name=$Globals::config{'startup_macro'};
$secc=localtime->sec();
if($secc<10){
$secc="0".localtime->sec();
}else {
$secc=localtime->sec();
}
$datetime = localtime->hour().":".localtime->min().":".$secc;
if($mytime eq $datetime){
 printf "macro ".$macro_name;
 };
 sleep (1);
  }
 }       
}

теоретически, в определённое время, в консоль должна выдаца команда macro macro_name_from_config, ну и естественно выполницц0 макрос ....

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

Сообщение piroJOKE »

Почти оффтопик, и почти флуд.

varg
Если уж ты так крут, што модные плагины пишеш, так может и мне один сообразишь? :twisted:
Почти по этой теме задачка:
viewtopic.php?t=282
"Задачка №10: Команда ddo - отложенное исполнение команд[old]"
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
miniBot
Грамотный
Сообщения: 429
Зарегистрирован: Вс ноя 05, 2006 8:48 am
Откуда: Москва
Контактная информация:

Сообщение miniBot »

varg, будильник круто, но мне нужно чтобы команда выполнялась каждые полчаса.
помощь только тем у кого включен параметр - mozgEnable 1

БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
varg
Начинающий
Сообщения: 35
Зарегистрирован: Вс ноя 19, 2006 9:33 pm

Сообщение varg »

piroJOKE
ну если особо сильно не вкуривать в

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

ddo (время) (командная строка) 
и вспомогательные: 
ddo stop (ddo s)- очистить очередь отложенных команд; 
ddo list (ddo l) - показать список команд в очереди;
(если чесно не умею еще общаццо с командной строкой ОК :roll: :oops: :oops: , да и перл я только только начал изучать, а ОК хороший полигон для его изучения)

то в принципе твоя задача абсолютно идентична задачи miniBot
и представляет из себя не что иное как обычный шедулер

вот собстно, :) влез в исходники crontaba, повыциплял нужное, и заделал под ОК :roll: :oops:

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

занимается тем что
выдает в консоль команду через определённое время

структура

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

[logs]
[plugins]
        |-cron.pm
        |-cron.pl
crontab
crontab содержание идентично синтаксису cron
Вложения
cron.zip
структура
[logs]
[plugins]
..|-cron.pm
..|-cron.pl
crontab
(2.8 КБ) 86 скачиваний
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

О Аллах! Кнонтабы в... ОК, это будет нечто! :shock:

Добавлено спустя 1 минуту 28 секунд:

Господа, а ну как мы две темы объединим? Будет легкая неразбериха, но... зато в одной куче; что скажете?

Добавлено спустя 34 минуты 26 секунд:

Весёлый ты парень, varg, хе-хе:

sub init {
  • $icur_secs = time();
    $icur_mins = int ( $icur_secs / 60 );
    $next_mins = $icur_mins + 1;
    $next_secs = $next_mins * 60;
    $sleep_secs = $next_secs - $icur_secs;
    sleep( $sleep_secs );
    ...
Угадай, что происходит? :twisted:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Ответить