Сработка автомакро по времени / время в консоли - решено
Модератор: 4epT
Правила форума
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
- miniBot
- Грамотный
- Сообщения: 429
- Зарегистрирован: Вс ноя 05, 2006 8:48 am
- Откуда: Москва
- Контактная информация:
Сработка автомакро по времени / время в консоли - решено
Вобщем нужно чтобы автомакрос срабатывал на определенное текущее системное время, в мануале нет такого оператора, а запрашивать грубо говоря каждые 5 минут сервер - палевно.
Последний раз редактировалось miniBot Чт ноя 08, 2007 4:31 pm, всего редактировалось 1 раз.
помощь только тем у кого включен параметр - mozgEnable 1
БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
- 4epT
- macro-маньячина
- Сообщения: 2795
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
miniBot, ну и чё ты предлагаешь?
может кто-то пожуёт вот это и что-нибудь куда-нить (желательно к do-commander'у) прикрути?
зы:
файл CoreLogic.pm, в конфиге:
может кто-то пожуёт вот это и что-нибудь куда-нить (желательно к 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
}
- piroJOKE
- Модератор
- Сообщения: 8204
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
2Афтар, ну если не мудрствовать лукаво, то специально для любителей разгребать регекспами (хе-хе) мона написать плагинчег time.pl
Типо будет команда time, и она будет что-нибудь писать в консоль.
* * *
А если "мудрствовать" то была у нас классная идея (щас она лежит на кладбище) написать модный шедулер к Коре; оно бы среди всего прочего могло заниматься и выполнением разных команд в определенное время.
Типо будет команда time, и она будет что-нибудь писать в консоль.

* * *
А если "мудрствовать" то была у нас классная идея (щас она лежит на кладбище) написать модный шедулер к Коре; оно бы среди всего прочего могло заниматься и выполнением разных команд в определенное время.
- miniBot
- Грамотный
- Сообщения: 429
- Зарегистрирован: Вс ноя 05, 2006 8:48 am
- Откуда: Москва
- Контактная информация:
а вот еще, я вобщем не очень в перле понимаю, но всеже, не подскажите в каком файлике вобще кора выводит на консоль сообщение. Ведь в моем случае, просто если подставить перед любым сообщением в консоль время, то и сработку макро на консольку можно поставить.
тоесть вместо
[100/100] You attack Monster
былобы
[18:15][100/100] You attack Monster
тоесть вместо
[100/100] You attack Monster
былобы
[18:15][100/100] You attack Monster
помощь только тем у кого включен параметр - mozgEnable 1
БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
- miniBot
- Грамотный
- Сообщения: 429
- Зарегистрирован: Вс ноя 05, 2006 8:48 am
- Откуда: Москва
- Контактная информация:
ВОТ блин тупни-то все, а я иду под флагом тупней, ыыы.
Вобщем начну с конца, в Коре ЕСТЬ возможность выводить текущее время на консоль.
Дело было так, вскрыл файло 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
в консольке получается что-то типа
ну и теперь остается захватить времечко макросом
macros.txt
Вот только насчет регулярного выражения не силен
квадратная скобка - метасимвол, поэтому обратный слеш перед ним.
04 34 в скобках с прямым разделителем - либо то либо то
точка - это любой символ???
Вобщем начну с конца, в Коре ЕСТЬ возможность выводить текущее время на консоль.
Дело было так, вскрыл файло 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-маньячина
- Сообщения: 2795
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
если использовать:
то макрос не будет срабатывать на строчки, типа:
а ещё можно так придумать:
Итак немного понтов:
и мы будем реагировать на строчки, типа:
Код: Выделить всё
console /\[\d\d:(04|34)\]/
ну малоли где такое попадётся[ы!:04] бла бла бла
[ы?:34] бла бла бла

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

Итак немного понтов:
Код: Выделить всё
console /\[... \d+ \d\d:(34|04):\d\d \d+\.\d]/
ЗЫ: Памятка по регулярным выражениям (regexp)[Oct 19 17:04:12 2007.98] бла бла бла
[Oct 19 17:34:12 2007.98] бла бла бла
забавное решение.
естественно если повыключать все сообщения из консоли, то шанс срабатывания макроса стремительно падает к нулю
пока царапал эти 3 строчки - вопрос возник ...
а если в 1 секунду происходит несколько действий отображаемых в консоли? О_о
вобщем нацарап0л0сь вот тут такая шняжка
чесно скажу, НЕ ПРОВЕРЯЛ
1)неначем, нет живого бота куда бы можно было это всунуть (((
2)нечем чес слово, долго думал, и не нашел кудабы данную фигню втыкнуть, и для каких цэлей использовать
вобщем в конфиг файл вписываем строки
startup_time часы:минуты:секунды --- обязательно разделённые двоеточиями
startup_macro имя_макроса_на_выполнение
в папке plugins создаём файл budilnik.pl с таким содержанием
теоретически, в определённое время, в консоль должна выдаца команда macro macro_name_from_config, ну и естественно выполницц0 макрос ....
вобщем попробуйте, если не сложно, отпишите с результатом
естественно если повыключать все сообщения из консоли, то шанс срабатывания макроса стремительно падает к нулю

пока царапал эти 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);
}
}
}
вобщем попробуйте, если не сложно, отпишите с результатом

- piroJOKE
- Модератор
- Сообщения: 8204
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Почти оффтопик, и почти флуд.
varg
Если уж ты так крут, што модные плагины пишеш, так может и мне один сообразишь?
Почти по этой теме задачка:
viewtopic.php?t=282
"Задачка №10: Команда ddo - отложенное исполнение команд[old]"
varg
Если уж ты так крут, што модные плагины пишеш, так может и мне один сообразишь?

Почти по этой теме задачка:
viewtopic.php?t=282
"Задачка №10: Команда ddo - отложенное исполнение команд[old]"
piroJOKE
ну если особо сильно не вкуривать в
(если чесно не умею еще общаццо с командной строкой ОК
, да и перл я только только начал изучать, а ОК хороший полигон для его изучения)
то в принципе твоя задача абсолютно идентична задачи miniBot
и представляет из себя не что иное как обычный шедулер
вот собстно,
влез в исходники crontaba, повыциплял нужное, и заделал под ОК
конечно, на полноценный плугин не тянет, но как идея выступать может
единственное, опять, выкладываю без тестов ...
так что кто проверит - отпишитесь плиз
занимается тем что
выдает в консоль команду через определённое время
структура
crontab содержание идентично синтаксису cron
ну если особо сильно не вкуривать в
Код: Выделить всё
ddo (время) (командная строка)
и вспомогательные:
ddo stop (ddo s)- очистить очередь отложенных команд;
ddo list (ddo l) - показать список команд в очереди;



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



конечно, на полноценный плугин не тянет, но как идея выступать может

единственное, опять, выкладываю без тестов ...
так что кто проверит - отпишитесь плиз
занимается тем что
выдает в консоль команду через определённое время
структура
Код: Выделить всё
[logs]
[plugins]
|-cron.pm
|-cron.pl
crontab
- Вложения
-
- cron.zip
- структура
[logs]
[plugins]
..|-cron.pm
..|-cron.pl
crontab - (2.8 КБ) 135 скачиваний
- piroJOKE
- Модератор
- Сообщения: 8204
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
О Аллах! Кнонтабы в... ОК, это будет нечто! 
Добавлено спустя 1 минуту 28 секунд:
Господа, а ну как мы две темы объединим? Будет легкая неразбериха, но... зато в одной куче; что скажете?
Добавлено спустя 34 минуты 26 секунд:
Весёлый ты парень, varg, хе-хе:
sub init {

Добавлено спустя 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 );
...
