Планировщик.

    Планировщик позволяет создавать произвольное число расписаний, которые в свою очередь могут запускать lua-скрипты с различными действиями в них.
 
    Открыть окно планировщика можно через соответствующее меню в рабочем окне (программы Окна - Планировщик) (см. рис. 1).

(рисунок 1)

    Все расписания глобально можно разделить на служебные и пользовательские. 
 
    Служебные обеспечивают работу стандартных одиночных скриптов: Начала и окончания каждых игровых суток (имеют идентификаторы for_EachNewDay_Script и specialForEndDay), Начала каждых квестовых суток (specialForNewQuestDay), а также specialForLotoBuy реализующий ситуацию ожидания появления в лавке нужных предметов (тиражей лото) на определенный момент времени для более быстрого входа в покупку. Служебные расписания не рекомендуется удалять из списка. Это нарушит работу связанных с ними скриптов (или и вовсе сотрет их содержимое).

(рисунок 2)
    Пользовательские, как и следует из названия, создаются самим пользователем для решения личных задач.

    Создание нового расписания осуществляется через клик на ссылку "Новая запись" (3.1) над списком. 

(рисунок 3)

    При выделении расписания в списке открывается панель его параметров, в которой и осуществляется настройка. 

    Новое расписание получает идентификатор (название расписания), начинающийся на "id" + случайный набор цифр. Идентификаторы разных расписаний ни в коем случае не должны совпадать! При необходимости пользователь может задать собственную строку-идентификатор (не переименовывайте служебные расписания) (3.2).
 
    Кроме идентификатора каждое расписание позволяет задать строку-описание, в которой можно указать детали выполняемой задачи, чтобы лучше ориентироваться, если расписаний будет много (3.3).

    Кроме того каждое расписание имеет дату срабатывания (4.1), смещение для формирования новой (4.2), если требуется циклическое срабатывание, и блок настройки скриптов (4.3).
(рисунок 4. Увеличивается при клике)

    Для удобства задания фиксированных значений в дату начала действия расписания и его смещения, можно использовать выпадающее меню на кнопке "<=Уст.(ановить)Время<=" (выбор меню запоминается и повторное нажатие на кнопку повторяет то же самое назначение).

    Далее будут рассмотрены различные исходные ситуации и детали настройки расписания на них, попутно раскрывая смысл тех или иных опций. От просто к более сложному.

    Ситуация 1. Нужно после определенной даты однократно запустить скрипт. 
В полях даты (5.1) указывается нужная. В полях смещения (5.2) все нули. В блоке "мульти-скрипт" "*Период активности (сек)" (5.3) устанавливается так же в 0.  (последний параметр будет более подробно рассмотрен далее)
(рисунок 5)
    А все требуемые действия прописываются в "Основной(1х)Скрипт" справа. Кликаете по ссылке и вводите команды в открывшемся редакторе.
(рисунок 6)
    Ситуация 2. Один и тот же скрипт нужно выполнять постоянно и с одним и тем же периодом.
Настройка аналогична ситуации 1, за исключением смещения (5.2). В него вносится на сколько должна измениться исходная дата для нового срабатывания. Например, + 1 день (можно использовать ненулевые значения сразу в нескольких полях: + 1 день, 2 часа, 3 минуты, 4 секунды).
(рисунок 7)
    Примечание. Расписание срабатывает не строго в указанное время. Реальный запуск скрипта может запаздывать, в зависимости от того, чем занята программа. Например, это никогда не произойдет, пока программа проводит бой. Если срок выйдет в бою, то расписание будет активировано после его окончания. В общем проверка расписаний и запуск скриптов производится не параллельно основному циклу текущего режима, а внутри него и в строго определенных точках выполнения. 
    Исходя из этого рассмотренная выше ситуация плохо подходит для активации благословений или чего-то подобного. Следующая дата срабатывания вычисляется не от фактической, а от исходной. Например, при смещении +2 часа и исходной 0:01:05 следующие точки срабатывания будут смещаться строго как: 2:01:05, 4:01:05, 6:01:05 ... 22:01:05. При этом, если перс проводит длительные бои (боссы или вихрь), то реальное срабатывание может происходить через минуты после исходной даты. Если активировать благо с запозданием, то оно может не успеть истечь к следующему запуску. Вариант со смещением относительно прошлого реального запуска скрипта будет рассмотрен дальше.

    Кроме основного скрипта выполняемого всегда однократно, к расписанию прикреплен дополнительный, который может иметь многократный запуск. Его активность в первую очередь регулируется параметром "*Период активности (секунд)". Если он не равен нулю, то обработка расписания немного изменяется. После исходной даты и в течении указанного числа секунд действует специальный период активности и в его рамках начинает выполняться дополнительный скрипт. По истечении дополнительного периода (то есть исходная дата + указанное число секунд) однократно выполняется основной скрипт. 
    На запуск дополнительного скрипта также будут оказывать влияние опции "*Счетчик" и "*Между запусками (секунд)". Первым можно задать ограничение на число запусков (0 для любого количества пока не истек период активности), а вторым задать интервал между сработками. Причем этот интервал учитывает фактическое время старта прошлого скрипта. Новый не будет запускаться, если не вышло указанное значение (минимум 1 секунда).
 
    Для чего могут быть полезны такие сложности.
 
    Ситуация 3. Когда известна дата появления нужного тиража в лавке, то для его оптимальной покупки стоит заранее прекратить лишнюю активность программы (например включить режим Ожидание). При этом начать часто производить опрос лавки, чтобы как можно быстрее увидеть изменение ассортимента и приступить к покупке, пока не разобрали большие стеки. А после закупки вернуть предыдущий режим и продолжить работу. В общем тут может быть любая ситуация когда в рамках одного условия сначала надо выполнить один набор действий (в том числе например изменить настройки самой программы), а по истечении времени другой (выставить настройки как было или любой другой вариант).
(рисунок 8. Увеличивается при клике)
8.1. - дата сработки;
8.2. - в течении 600 секунд (10 минут);
8.3. - меняем текущий режим (если стоит другой) на Ожидание и с паузой между попытками в 1 сек начинаем опрашивать лавку (при счетчике 0 производим столько попыток, сколько влезет в отведенные 10 мин);
8.4. - по истечении 10 минут возвращаем прежний режим работы и продолжаем прошлую деятельность дальше.

    Ситуация 4. Требуется регулярно набрасывать бафы на определенных игроков.
    Настройка схожа на прошлый вариант. 
8.1. - дата начала;
8.2. - активный период выставляется в большое значение, например неделю или больше;
8.3. - в доп. скрипт заносим команды на бафы, счетчик либо по прежнему 0, либо столько сколько бафов надо навесить, пауза между запусками - время действия бафа + пару секунд, чтобы не наступить на хвост еще не упавшего с прошлого раза эффекта.
8.4. - основной скрипт можно не использовать.
Пример с конкретикой по самим скриптам на эту ситуацию есть здесь: https://heavengameonline.blogspot.com/2021/10/blog-post_21.html

Удаление расписания из списка осуществляется путем клика в поле с символом "Х" (столбик "Удалить")

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.