all:Идея: "Выполнить указанную команду через N секунд" ("delay-do").
Синтаксис:
ddo (время) (командная строка)
и вспомогательные:
ddo stop (ddo s)- очистить очередь отложенных команд;
ddo list (ddo l) - показать список команд в очереди;
(опционально, как идея: префикс "!" - выполнить, даже если отключено AI)
Примеры:
ddo 20 macro checkMap
ddo 12 tele
ddo 5 c Какого х.......?!
ddo stop
ddo 600 quit
В свое время я выкладывал эту идею на форуме OpenKore, где ее благополучно провалили.
Между тем, необходимость в такой полезняшке возникакает снова и снова.
Как частность, это позволило бы обойти главную бяку макросов - невозможность "параллельного"
исполнения нескольких сценариев (даже если они не противоречат друг другу!).
Вторая частность - разнообразные таймаут-тесты. То есть, мы начинаем какое-то действие, но
через некоторое время проверяем, например макросом, - всё ли в порядке, исполнено ли то, что было нужно?
* * *(...дальше всё выкинуто, т.к. толком так ни к чему и не пришли...)
Опционально, вариант синтаксиса:
(т.е., если встречается в 1м аргументе символ :, то обрабатывать аргумент как абсолютное время, а если нет - как задержку, "относительное" время.ddo задержка командаddo время команда
- пример:
ddo 30 relog 120
- пример:
ddo 17:59:05 c ой... так, мне пора, всем пока!;;e pif;;quit
* * *
Вот полная спецификация команд этого плагина:
плагин 'ddo' - исполнение команд через некоторе время
общий синтаксис:
ddo [метка] [время] [команда|опция]
подробности:
ddo [label] [[!][*]time] [command_string]
ddo [label|#] [stop]
ddo [?]
префиксы времени:
! выполнить, даже если отключен AI
* повторять выполнение команды (иначе задача удаляется из списка после 1го выполнения)
вот какие частные случаи может описать это множество:
ddo petia 30 c hello;;e heh
создать задачу 'petia' и выполнить ее через 30 секунд; сама задача - сказать фигню и пустить эмоцию.
ddo petia e pif
создать задачу petia, сама задача - эмоция. однако, посколько "время опущено", то эта задача никогда не выполнится сама.
така задача будет висеть в списке задач вечно, пока не будет удалена или запущена на исполнение вручную.
ddo petia stop
убрать задачу petia из списка
ddo *30 e pif
создать безымянную (нет метки) задачу, и выполнять ее каждые ('*') тридцать секунд, задача - эмоция.
ddo maxpain !20 quit
создать задачу "макспейн" (сама задача - выход из OpenKore), и выполнить ее через 20 секунд, даже если будет отключен AI (опция '!').
ddo maxpain
выполнить задачу "макспейн" немедленно и удалить ее из списка задач.
ddo
показать список задач и упоминание об опции ?
ddo ?
показать этот текст
ddo 3
выполнить задачу №3 и удалить её;
так можно запускать вручную безымянные задачи из списка, например, для отладки.
примечание - задачи с опцией '*' (циклическое повторение) не удаляются из списка после их вызова вручную.
ddo mustdie 30
эта команда не делает ничего, т.к. "задача" просто отсутствует
ddo 2 stop
удалить именованную или безымянную задачу №2 из списка задач
ddo 30 ddo 10 e pif
эта извращенная задача является функциональным аналогом задачи:
ddo 40 e pif
ddo 15 15 e pif
эта безымянная задача через 15 секунд заявит об... ошибке!
ее афтар наивно полагал, что шедулер разберёт эту строку вот так:
ddo 15 15 e pif
...но нет! тут ошибка - метка не может быть цифрой. А вот так бы всё сработало как нужно:
ddo 15w 15 e pif
ddo shithappens !* e pif
и/или
ddo gavgav * e !
я не придумал реакцию на эту извращенную задачу, очевидно, лучше всего сообщить пользователю об ошибке.
или, как вариант, считать ее аналогом ddo petia e pif, с той лишь разницей, что после ручного запуска задача не удаляется из списка.
ddo *1 ddo *1 ddo *1
подобная рекурсивная фигня наверное сожрет всю память и завесит ОК
лучше так не делать. однако, вот такой вариант:
ddo omg *1 ddo omg *1 ddo omg *1
...вероятно окажется безопасным, потому что он не будет создавать новые задачи, а каждый раз будет перезаписывать одну и ту же задачу с меткой omg.
...впрочем, бороться с такими вещами не трудно - достаточно лишь ограничить шедулер каким-то разумным к-вом хранимых задач. например, 10 штук, и всё.
еще можно предусмотреть реакцию на переполнение списка задач - например, принудительная очистка списка задач, если превышено их максимальное число.
ddo stop
удалить все задачи
___ всё! дальше пошел опциональный синтаксис шедулера, который вероятно никто делать не будет ____
тут описаны ':'-выражения, запуск задач в определенное время.
вместо этого лучше применить кронтаб, над которым работают люди.
ddo sunshine 12:00 c nice...
создать задачу 'sunshine' и выполнить ее в полдень. сама задача - сказать ерунду.
ddo ??:55 e pif
эта безымянная задача каждый час, за пять минут до наступления нового часа пускает эмоцию.
ddo midnight *00:00 c booo
эта задача каждую полночь говорит "бу!"