|
|
|
Время Включения И Отключения |
|
|
DarkMaster |
9.12.2010, 14:16
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
да чего уж там... бетка ежедневника) ежедневник
Код set linedelay 0 set logging close set logging open 0 0 1024 200 set logging clear set logging __________________________________________
// В первой строке введите название события. // Во второй строке режим напоминания. // Флаги режима напоминания: // + Одноразовая задача ( режим 0 ) // + Ежечасная ( режим 0 ) // + Ежедневная ( режим 0 ) // + Ежемесячная ( режим 0 ) // + Ежегодная ( режим 0 ) // 1-7 + Еженедельная (номер дня недели) // Возможно еще добавлю: // - Каждые N дней // - Каждые № минут // - Секунд?? // Далее по порядку в отдельных строках // введите параметры от года до минут. // Может отсутсвовать по _порядку_ (!!!) любое // количество параметров даты начиная с года. // Минуты обязательны.
set %event [ 1 1 ] Сделай то-то set %event [ 1 2 ] 0 set %event [ 1 3 ] 10 set %event [ 1 4 ] 00
set %event [ 4 1 ] Сделай это set %event [ 4 2 ] 0 set %event [ 4 3 ] 14 set %event [ 4 4 ] 00
set #eventCount size ( %event ) set %event [ 1 10 ] "" set %clearEvent [ 1 40 ] "" set $clear "" set #nClearEvent 1
for #i 1 #eventCount 1 // Преобразовываем в удобоваримый вид %event set $nameEvent %event [ #i 1 ] if $nameEvent <> $clear // Исключаем пропущенные элементы массива (например, после удаления задания из середины). set $modeElement %event [ #i 2 ] if ( $modeElement < 0 ) or ( $modeElement > 7 ) // Проверяемя корректность выбранного режима проверки. msg В событии ''$nameEvent'' неверно указан режим напоминания. Задайте режим в set % event [ #i 2 ]. Между "%" и "event" пробела быть не должно. end_if set $fistTimeParam %event [ #i 3 ] if $fistTimeParam = $clear // Проверяем корректность введнного времени. msg В событии ''$nameEvent'' отсутсвует или неверно указано время. Задайте время начиная с set % event [ #i 2 ]. Между "%" и "event" пробела быть не должно. end_if set %clearEvent [ #nClearEvent 1 ] %event [ #i 1 ] // Начинаем формирование "чистого" массива с событиями. set %clearEvent [ #nClearEvent 2 ] %event [ #i 2 ] set %clearEvent [ #nClearEvent 6 ] %event [ #i 1 ] \ %event [ #i 2 ] \ %event [ #i 3 ] \ // Делаем уникальный штамп евента для сравнения. set #y 4 set $eventForWhile %event [ #i #y ] while $eventForWhile <> $clear // Считаем количество введнных параметров события set %clearEvent [ #nClearEvent 6 ] %clearEvent [ #nClearEvent 6 ] %event [ #i #y ] \ // Делаем уникальный штамп евента для сравнения. set #y #y + 1 set $eventForWhile %event [ #i #y ] end_while set %clearEvent [ #nClearEvent 9 ] #y - 1 // set logging В событии ''%event [ #i 1 ]'' ( #nClearEvent реальное проверяемое) %clearEvent [ #nClearEvent 9 ] параметров. // set logging Событие ''%event [ #i 1 ]'' добавлено в обработку. set #countEventParam %clearEvent [ #nClearEvent 9 ] if ( #countEventParam = 8 ) or ( #second = 1 ) // Прощитывать ли секунды. set #yClearEvent 15 set %clearEvent [ #nClearEvent 8 ] #yClearEvent set %clearEvent [ #nClearEvent 18 ] #yClearEvent + 10 for #i2 3 #countEventParam 1 set %clearEvent [ #nClearEvent #yClearEvent ] %event [ #i #countEventParam ] set #countEventParam #countEventParam - 1 set #yClearEvent #yClearEvent - 1 end_for // set logging %clearEvent [ #nClearEvent 10 ] %clearEvent [ #nClearEvent 11 ] %clearEvent [ #nClearEvent 12 ] %clearEvent [ #nClearEvent 13 ] %clearEvent [ #nClearEvent 14 ] %clearEvent [ #nClearEvent 15 ] else set #yClearEvent 14 set %clearEvent [ #nClearEvent 8 ] #yClearEvent set %clearEvent [ #nClearEvent 18 ] #yClearEvent + 10 for #i2 3 #countEventParam 1 set %clearEvent [ #nClearEvent #yClearEvent ] %event [ #i #countEventParam ] set #countEventParam #countEventParam - 1 set #yClearEvent #yClearEvent - 1 end_for // set logging %clearEvent [ #nClearEvent 10 ] %clearEvent [ #nClearEvent 11 ] %clearEvent [ #nClearEvent 12 ] %clearEvent [ #nClearEvent 13 ] %clearEvent [ #nClearEvent 14 ] %clearEvent [ #nClearEvent 15 ] end_if set #nClearEvent #nClearEvent + 1 end_if end_for set #sizeClearEvent size ( %clearEvent ) for #nClearEvent 1 #sizeClearEvent 1 // Дублируем загруженные данные в область проверки. Разделение сделано для восстановления изменившихся данных в ходе работы. for #i 10 15 1 set #timeCheck #i + 10 set %clearEvent [ #nClearEvent #timeCheck ] %clearEvent [ #nClearEvent #i ] end_for set %clearEvent [ #nClearEvent 19 ] %clearEvent [ #nClearEvent 9 ] end_for load_array %lastClearEvent Last_Clear_Event.txt set #sizeLastClearEvent size ( %lastClearEvent ) for #nClearEvent 1 #sizeClearEvent 1 for #i 1 #sizeLastClearEvent 1 set $eventstamp %clearEvent [ #nClearEvent 6 ] set $lastEventstamp %lastClearEvent [ #i 1 ] if $eventstamp = $lastEventstamp set %clearEvent [ #nClearEvent 7 ] %lastClearEvent [ #i 2 ] break end_if end_for end_for set logging Задач загружено: #sizeClearEvent за timer мс set logging Year Month Day Hour : Min : Sec
// Элементы массива %ClearEvent // Максимальнальное значеие второй размерности: 20 // Содержание: // 1 - название задачи. // 2 - изначальный режим задачи загруженный из %event (ежедневная, // одноразовая, ежемесечная и т.д.). Используется для восстановелнерия // проверяемого режима, который меняется во время отсрочки задачи. // 3 - 5 зарезервировано. // 6 - слепленные через " \ " все элементы %event. Нужен для сличения // загруженных элементов с таблицей прошлой работы скрипта. // Сличение производится для загрузки таймштампа последнего // оповещения о событии. // 7 - содержит $lastHitTimestamp. // Используется для определения было ли оповещение в задавнное время. // Например: ежедневная задача на 14:00, сейчас 17:00. // Сравнивая $lastHitTimestamp с $currentTimestamp мы определяем // Выполнялась ли уже задача. В $lastHitTimestamp не (!!!) входят // указанныепараметры события. Т.е. для примера выше будт содержаться: // год, месяц, число. // 8 - изначально загруженное количество элементов из %Event. // Для отсечение секунд, если они не указаны. // 9 - количество параметров в исходном %event [ i ]. // 19 - проверяемое количество параметров даты. // Использыется для определения последнего не пустого столбца. // Необходимо при определении границ параметров даты. // 10 - 15 изначальные параметры даты задачи (год, месяц, день, час, минуты). // 20 - 25 время следующего срабатывания. set %dayInMonth [ 1 ] 31 set %dayInMonth [ 2 ] 28 set %dayInMonth [ 3 ] 31 set %dayInMonth [ 4 ] 30 set %dayInMonth [ 5 ] 31 set %dayInMonth [ 6 ] 30 set %dayInMonth [ 7 ] 31 set %dayInMonth [ 8 ] 31 set %dayInMonth [ 9 ] 30 set %dayInMonth [ 10 ] 31 set %dayInMonth [ 11 ] 30 set %dayInMonth [ 12 ] 31 set linedelay 1 :start
for #nClearEvent 1 #sizeClearEvent 1 set %timeArr [ 20 ] Year set %timeArr [ 21 ] Month set %timeArr [ 22 ] Day set %timeArr [ 23 ] Hour set %timeArr [ 24 ] Min set %timeArr [ 25 ] Sec
set #mode %clearEvent [ #nClearEvent 2 ] if ( #mode > 0 ) and ( #mode < 8 ) gosub dayOfWeek if #dayOfWeek <> #mode continue end_if end_if // if #mode = 0 set $currentTimestamp $clear set #endFor 26 - %clearEvent [ #nClearEvent 19 ] for #i 20 #endFor 1 // Формируем таймштамп set $currentTimestamp $currentTimestamp %timeArr [ #i ] \ end_for set $lastHitTimestamp %clearEvent [ #nClearEvent 7 ] set logging $currentTimestamp == $lastHitTimestamp if $currentTimestamp <> $lastHitTimestamp // Проверка была ли уже выполнена задача. set #startFor 27 - %clearEvent [ #nClearEvent 19 ] // Вычисляем с какого элемента массива нам необходмо делать проверку. Зависит от количества введеных параметров даты. set #endFor %clearEvent [ #nClearEvent 18 ] // set logging #endFor set #timeHit 0 for #i #startFor #endFor 1 // Сравнение введенных параметров времени с текущим временем. // set logging %clearEvent [ #nClearEvent #i ] set #timeElementOfEvent %clearEvent [ #nClearEvent #i ] set #timeElementCurrentTime %timeArr [ #i ] // set logging #nClearEvent #i #timeElementOfEvent <= #timeElementCurrentTime if ( #timeElementOfEvent < #timeElementCurrentTime ) or ( ( #timeElementOfEvent = #timeElementCurrentTime ) and ( #i = #endFor ) ) set #timeHit 1 break end_if if #timeElementOfEvent = #timeElementCurrentTime continue end_if break end_for if #timeHit = 1 alarm online msg %clearEvent [ #nClearEvent 1 ] set $addWaiting prompt ("Выполнено" "Напомнить через 15 минут" "Напомнить через 30 минут" "Напомнить через 1 час" "Другое" ) if $addWaiting = 1 set %clearEvent [ #nClearEvent 7 ] $currentTimestamp set %clearEvent [ #nClearEvent 19 ] %clearEvent [ #nClearEvent 9 ] // Возвращаем изначальное количество проверяемых елементов. set %clearEvent [ #nClearEvent 20 ] %clearEvent [ #nClearEvent 10 ] set %clearEvent [ #nClearEvent 21 ] %clearEvent [ #nClearEvent 11 ] set %clearEvent [ #nClearEvent 22 ] %clearEvent [ #nClearEvent 12 ] set %clearEvent [ #nClearEvent 23 ] %clearEvent [ #nClearEvent 13 ] set %clearEvent [ #nClearEvent 24 ] %clearEvent [ #nClearEvent 14 ] set %clearEvent [ #nClearEvent 25 ] %clearEvent [ #nClearEvent 15 ] set %timeArr [ 20 ] Year set %timeArr [ 21 ] Month set %timeArr [ 22 ] Day set %timeArr [ 23 ] Hour set %timeArr [ 24 ] Min set %timeArr [ 25 ] Sec set $lastHitTimestamp $clear // Делаем корректный таймштамп (после отсрочек нельзя тупо присвоить #currentTimeStamp) set #endFor 26 - %clearEvent [ #nClearEvent 19 ] // set logging %clearEvent [ #nClearEvent 19 ] #endFor for #n 20 #endFor 1 // Формируем таймштамп set $lastHitTimestamp $lastHitTimestamp %timeArr [ #n ] \ end_for set %clearEvent [ #nClearEvent 7 ] $lastHitTimestamp save_array %clearEvent 1 6 -1 2 last_clear_event.txt break end_if set %clearEvent [ #nClearEvent 19 ] 7 set #y Year// Формируем дату для последующего пересчета ( например 67 мин = 1 час 7 мин) set #mo Month set #d Day set #h Hour set #m Min set #s Sec if $addWaiting = 0 set #m #m + 5 end_if if $addWaiting = 2 set #m #m + 15 end_if if $addWaiting = 3 set #m #m + 30 end_if if $addWaiting = 4 set #h #h + 1 end_if if $addWaiting = 5 set %clearEvent [ #nClearEvent 7 ] $currentTimestamp end_if gosub timeCalc // set logging #y #mo #d #h #m #s set %clearEvent [ #nClearEvent 20 ] #y set %clearEvent [ #nClearEvent 21 ] #mo set %clearEvent [ #nClearEvent 22 ] #d set %clearEvent [ #nClearEvent 23 ] #h set %clearEvent [ #nClearEvent 24 ] #m set %clearEvent [ #nClearEvent 25 ] #s continue end_if // Если время устроило - показываем таблички. end_if // Проверка была ли уже выполнена задача. continue // end_if // if #mode = 0 ежесекундный/минутный/часный/дневный/годный режим. end_for // Перебор всех существующих задач (%clearEvent) goto start
:timeCalc // Пересчитываем дату ( например 67 мин = 1 час 7 мин). if #s > 59 set #m #m + #s / 60 set #s #s - #s / 60 * 60 end_if if #m > 59 set #h #h + #m / 60 set #m #m - #m / 60 * 60 end_if if #h > 23 set #d #d + #h / 24 set #h #h - #h / 24 * 24 end_if while #d > 28 if #mo > 12 set #y #y + #mo / 12 set #mo #mo - #mo / 12 * 12 + 1 end_if set #dayInMonth %dayInMonth [ #mo ] if #mo = 2 set #ymod ( #y - #y / 400 * 400 ) * ( #y - #y / 4 * 4 + ( #y - #y / 100 * 100 - 100 ) / 100 ) // Високосный ли год. Вернет 0, если високосный. if #ymod = 0 set #dayInMonth #dayInMonth + 1 end_if end_if set #addMo #d / ( #dayInMonth + 1 ) if #addMo > 0 set #mo #mo + 1 set #d #d - #dayInMonth else break end_if end_while if #mo > 12 set #y #y + #mo / 12 set #mo #mo - #mo / 12 * 12 end_if return :dayOfWeek if Month > 2 // Расчет дня недели. set #m Month -2 set #century Year / 100 set #yearr Year - #century * 100 else set #m Month +10 set #yearr Year - Year / 100 * 100 - 1 set #century #y / 100 end_if set #dayOfWeek Day + ( ( 13 * #m - 1 ) / 5 ) + #yearr + ( #yearr / 4 ) + ( #century / 4 ) - 2 * #century // set logging Day + ( ( 13 * #m - 1 ) / 5 ) + #yearr + ( #yearr / 4 ) + ( #century / 4 ) - 2 * #century set #dayOfWeek #dayOfWeek - #dayOfWeek / 7 * 7 if #dayOfWeek = 0 set #dayOfWeek 7 end_if // set logging #dayOfWeek return
было скучно))) при желании можно и процедуры прикрутить для выполнения.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
nazar |
7.9.2012, 19:16
|
Novice
Сообщений: 52
Регистрация: 9.4.2012 Группа: Пользователи Наличность: 0
Пользователь №: 14.847
|
Цитата(DarkMaster @ 9.12.2010, 15:16) да чего уж там... бетка ежедневника) ежедневник
Код set linedelay 0 set logging close set logging open 0 0 1024 200 set logging clear set logging __________________________________________
// В первой строке введите название события. // Во второй строке режим напоминания. // Флаги режима напоминания: // + Одноразовая задача ( режим 0 ) // + Ежечасная ( режим 0 ) // + Ежедневная ( режим 0 ) // + Ежемесячная ( режим 0 ) // + Ежегодная ( режим 0 ) // 1-7 + Еженедельная (номер дня недели) // Возможно еще добавлю: // - Каждые N дней // - Каждые № минут // - Секунд?? // Далее по порядку в отдельных строках // введите параметры от года до минут. // Может отсутсвовать по _порядку_ (!!!) любое // количество параметров даты начиная с года. // Минуты обязательны.
set %event [ 1 1 ] Сделай то-то set %event [ 1 2 ] 0 set %event [ 1 3 ] 10 set %event [ 1 4 ] 00 set %event [ 4 1 ] Сделай это set %event [ 4 2 ] 0 set %event [ 4 3 ] 14 set %event [ 4 4 ] 00
set #eventCount size ( %event ) set %event [ 1 10 ] "" set %clearEvent [ 1 40 ] "" set $clear "" set #nClearEvent 1
for #i 1 #eventCount 1 // Преобразовываем в удобоваримый вид %event set $nameEvent %event [ #i 1 ] if $nameEvent <> $clear // Исключаем пропущенные элементы массива (например, после удаления задания из середины). set $modeElement %event [ #i 2 ] if ( $modeElement < 0 ) or ( $modeElement > 7 ) // Проверяемя корректность выбранного режима проверки. msg В событии ''$nameEvent'' неверно указан режим напоминания. Задайте режим в set % event [ #i 2 ]. Между "%" и "event" пробела быть не должно. end_if set $fistTimeParam %event [ #i 3 ] if $fistTimeParam = $clear // Проверяем корректность введнного времени. msg В событии ''$nameEvent'' отсутсвует или неверно указано время. Задайте время начиная с set % event [ #i 2 ]. Между "%" и "event" пробела быть не должно. end_if set %clearEvent [ #nClearEvent 1 ] %event [ #i 1 ] // Начинаем формирование "чистого" массива с событиями. set %clearEvent [ #nClearEvent 2 ] %event [ #i 2 ] set %clearEvent [ #nClearEvent 6 ] %event [ #i 1 ] \ %event [ #i 2 ] \ %event [ #i 3 ] \ // Делаем уникальный штамп евента для сравнения. set #y 4 set $eventForWhile %event [ #i #y ] while $eventForWhile <> $clear // Считаем количество введнных параметров события set %clearEvent [ #nClearEvent 6 ] %clearEvent [ #nClearEvent 6 ] %event [ #i #y ] \ // Делаем уникальный штамп евента для сравнения. set #y #y + 1 set $eventForWhile %event [ #i #y ] end_while set %clearEvent [ #nClearEvent 9 ] #y - 1 // set logging В событии ''%event [ #i 1 ]'' ( #nClearEvent реальное проверяемое) %clearEvent [ #nClearEvent 9 ] параметров. // set logging Событие ''%event [ #i 1 ]'' добавлено в обработку. set #countEventParam %clearEvent [ #nClearEvent 9 ] if ( #countEventParam = 8 ) or ( #second = 1 ) // Прощитывать ли секунды. set #yClearEvent 15 set %clearEvent [ #nClearEvent 8 ] #yClearEvent set %clearEvent [ #nClearEvent 18 ] #yClearEvent + 10 for #i2 3 #countEventParam 1 set %clearEvent [ #nClearEvent #yClearEvent ] %event [ #i #countEventParam ] set #countEventParam #countEventParam - 1 set #yClearEvent #yClearEvent - 1 end_for // set logging %clearEvent [ #nClearEvent 10 ] %clearEvent [ #nClearEvent 11 ] %clearEvent [ #nClearEvent 12 ] %clearEvent [ #nClearEvent 13 ] %clearEvent [ #nClearEvent 14 ] %clearEvent [ #nClearEvent 15 ] else set #yClearEvent 14 set %clearEvent [ #nClearEvent 8 ] #yClearEvent set %clearEvent [ #nClearEvent 18 ] #yClearEvent + 10 for #i2 3 #countEventParam 1 set %clearEvent [ #nClearEvent #yClearEvent ] %event [ #i #countEventParam ] set #countEventParam #countEventParam - 1 set #yClearEvent #yClearEvent - 1 end_for // set logging %clearEvent [ #nClearEvent 10 ] %clearEvent [ #nClearEvent 11 ] %clearEvent [ #nClearEvent 12 ] %clearEvent [ #nClearEvent 13 ] %clearEvent [ #nClearEvent 14 ] %clearEvent [ #nClearEvent 15 ] end_if set #nClearEvent #nClearEvent + 1 end_if end_for set #sizeClearEvent size ( %clearEvent ) for #nClearEvent 1 #sizeClearEvent 1 // Дублируем загруженные данные в область проверки. Разделение сделано для восстановления изменившихся данных в ходе работы. for #i 10 15 1 set #timeCheck #i + 10 set %clearEvent [ #nClearEvent #timeCheck ] %clearEvent [ #nClearEvent #i ] end_for set %clearEvent [ #nClearEvent 19 ] %clearEvent [ #nClearEvent 9 ] end_for load_array %lastClearEvent Last_Clear_Event.txt set #sizeLastClearEvent size ( %lastClearEvent ) for #nClearEvent 1 #sizeClearEvent 1 for #i 1 #sizeLastClearEvent 1 set $eventstamp %clearEvent [ #nClearEvent 6 ] set $lastEventstamp %lastClearEvent [ #i 1 ] if $eventstamp = $lastEventstamp set %clearEvent [ #nClearEvent 7 ] %lastClearEvent [ #i 2 ] break end_if end_for end_for set logging Задач загружено: #sizeClearEvent за timer мс set logging Year Month Day Hour : Min : Sec
// Элементы массива %ClearEvent // Максимальнальное значеие второй размерности: 20 // Содержание: // 1 - название задачи. // 2 - изначальный режим задачи загруженный из %event (ежедневная, // одноразовая, ежемесечная и т.д.). Используется для восстановелнерия // проверяемого режима, который меняется во время отсрочки задачи. // 3 - 5 зарезервировано. // 6 - слепленные через " \ " все элементы %event. Нужен для сличения // загруженных элементов с таблицей прошлой работы скрипта. // Сличение производится для загрузки таймштампа последнего // оповещения о событии. // 7 - содержит $lastHitTimestamp. // Используется для определения было ли оповещение в задавнное время. // Например: ежедневная задача на 14:00, сейчас 17:00. // Сравнивая $lastHitTimestamp с $currentTimestamp мы определяем // Выполнялась ли уже задача. В $lastHitTimestamp не (!!!) входят // указанныепараметры события. Т.е. для примера выше будт содержаться: // год, месяц, число. // 8 - изначально загруженное количество элементов из %Event. // Для отсечение секунд, если они не указаны. // 9 - количество параметров в исходном %event [ i ]. // 19 - проверяемое количество параметров даты. // Использыется для определения последнего не пустого столбца. // Необходимо при определении границ параметров даты. // 10 - 15 изначальные параметры даты задачи (год, месяц, день, час, минуты). // 20 - 25 время следующего срабатывания. set %dayInMonth [ 1 ] 31 set %dayInMonth [ 2 ] 28 set %dayInMonth [ 3 ] 31 set %dayInMonth [ 4 ] 30 set %dayInMonth [ 5 ] 31 set %dayInMonth [ 6 ] 30 set %dayInMonth [ 7 ] 31 set %dayInMonth [ 8 ] 31 set %dayInMonth [ 9 ] 30 set %dayInMonth [ 10 ] 31 set %dayInMonth [ 11 ] 30 set %dayInMonth [ 12 ] 31 set linedelay 1 :start
for #nClearEvent 1 #sizeClearEvent 1 set %timeArr [ 20 ] Year set %timeArr [ 21 ] Month set %timeArr [ 22 ] Day set %timeArr [ 23 ] Hour set %timeArr [ 24 ] Min set %timeArr [ 25 ] Sec
set #mode %clearEvent [ #nClearEvent 2 ] if ( #mode > 0 ) and ( #mode < 8 ) gosub dayOfWeek if #dayOfWeek <> #mode continue end_if end_if // if #mode = 0 set $currentTimestamp $clear set #endFor 26 - %clearEvent [ #nClearEvent 19 ] for #i 20 #endFor 1 // Формируем таймштамп set $currentTimestamp $currentTimestamp %timeArr [ #i ] \ end_for set $lastHitTimestamp %clearEvent [ #nClearEvent 7 ] set logging $currentTimestamp == $lastHitTimestamp if $currentTimestamp <> $lastHitTimestamp // Проверка была ли уже выполнена задача. set #startFor 27 - %clearEvent [ #nClearEvent 19 ] // Вычисляем с какого элемента массива нам необходмо делать проверку. Зависит от количества введеных параметров даты. set #endFor %clearEvent [ #nClearEvent 18 ] // set logging #endFor set #timeHit 0 for #i #startFor #endFor 1 // Сравнение введенных параметров времени с текущим временем. // set logging %clearEvent [ #nClearEvent #i ] set #timeElementOfEvent %clearEvent [ #nClearEvent #i ] set #timeElementCurrentTime %timeArr [ #i ] // set logging #nClearEvent #i #timeElementOfEvent <= #timeElementCurrentTime if ( #timeElementOfEvent < #timeElementCurrentTime ) or ( ( #timeElementOfEvent = #timeElementCurrentTime ) and ( #i = #endFor ) ) set #timeHit 1 break end_if if #timeElementOfEvent = #timeElementCurrentTime continue end_if break end_for if #timeHit = 1 alarm online msg %clearEvent [ #nClearEvent 1 ] set $addWaiting prompt ("Выполнено" "Напомнить через 15 минут" "Напомнить через 30 минут" "Напомнить через 1 час" "Другое" ) if $addWaiting = 1 set %clearEvent [ #nClearEvent 7 ] $currentTimestamp set %clearEvent [ #nClearEvent 19 ] %clearEvent [ #nClearEvent 9 ] // Возвращаем изначальное количество проверяемых елементов. set %clearEvent [ #nClearEvent 20 ] %clearEvent [ #nClearEvent 10 ] set %clearEvent [ #nClearEvent 21 ] %clearEvent [ #nClearEvent 11 ] set %clearEvent [ #nClearEvent 22 ] %clearEvent [ #nClearEvent 12 ] set %clearEvent [ #nClearEvent 23 ] %clearEvent [ #nClearEvent 13 ] set %clearEvent [ #nClearEvent 24 ] %clearEvent [ #nClearEvent 14 ] set %clearEvent [ #nClearEvent 25 ] %clearEvent [ #nClearEvent 15 ] set %timeArr [ 20 ] Year set %timeArr [ 21 ] Month set %timeArr [ 22 ] Day set %timeArr [ 23 ] Hour set %timeArr [ 24 ] Min set %timeArr [ 25 ] Sec set $lastHitTimestamp $clear // Делаем корректный таймштамп (после отсрочек нельзя тупо присвоить #currentTimeStamp) set #endFor 26 - %clearEvent [ #nClearEvent 19 ] // set logging %clearEvent [ #nClearEvent 19 ] #endFor for #n 20 #endFor 1 // Формируем таймштамп set $lastHitTimestamp $lastHitTimestamp %timeArr [ #n ] \ end_for set %clearEvent [ #nClearEvent 7 ] $lastHitTimestamp save_array %clearEvent 1 6 -1 2 last_clear_event.txt break end_if set %clearEvent [ #nClearEvent 19 ] 7 set #y Year// Формируем дату для последующего пересчета ( например 67 мин = 1 час 7 мин) set #mo Month set #d Day set #h Hour set #m Min set #s Sec if $addWaiting = 0 set #m #m + 5 end_if if $addWaiting = 2 set #m #m + 15 end_if if $addWaiting = 3 set #m #m + 30 end_if if $addWaiting = 4 set #h #h + 1 end_if if $addWaiting = 5 set %clearEvent [ #nClearEvent 7 ] $currentTimestamp end_if gosub timeCalc // set logging #y #mo #d #h #m #s set %clearEvent [ #nClearEvent 20 ] #y set %clearEvent [ #nClearEvent 21 ] #mo set %clearEvent [ #nClearEvent 22 ] #d set %clearEvent [ #nClearEvent 23 ] #h set %clearEvent [ #nClearEvent 24 ] #m set %clearEvent [ #nClearEvent 25 ] #s continue end_if // Если время устроило - показываем таблички. end_if // Проверка была ли уже выполнена задача. continue // end_if // if #mode = 0 ежесекундный/минутный/часный/дневный/годный режим. end_for // Перебор всех существующих задач (%clearEvent) goto start
:timeCalc // Пересчитываем дату ( например 67 мин = 1 час 7 мин). if #s > 59 set #m #m + #s / 60 set #s #s - #s / 60 * 60 end_if if #m > 59 set #h #h + #m / 60 set #m #m - #m / 60 * 60 end_if if #h > 23 set #d #d + #h / 24 set #h #h - #h / 24 * 24 end_if while #d > 28 if #mo > 12 set #y #y + #mo / 12 set #mo #mo - #mo / 12 * 12 + 1 end_if set #dayInMonth %dayInMonth [ #mo ] if #mo = 2 set #ymod ( #y - #y / 400 * 400 ) * ( #y - #y / 4 * 4 + ( #y - #y / 100 * 100 - 100 ) / 100 ) // Високосный ли год. Вернет 0, если високосный. if #ymod = 0 set #dayInMonth #dayInMonth + 1 end_if end_if set #addMo #d / ( #dayInMonth + 1 ) if #addMo > 0 set #mo #mo + 1 set #d #d - #dayInMonth else break end_if end_while if #mo > 12 set #y #y + #mo / 12 set #mo #mo - #mo / 12 * 12 end_if return :dayOfWeek if Month > 2 // Расчет дня недели. set #m Month -2 set #century Year / 100 set #yearr Year - #century * 100 else set #m Month +10 set #yearr Year - Year / 100 * 100 - 1 set #century #y / 100 end_if set #dayOfWeek Day + ( ( 13 * #m - 1 ) / 5 ) + #yearr + ( #yearr / 4 ) + ( #century / 4 ) - 2 * #century // set logging Day + ( ( 13 * #m - 1 ) / 5 ) + #yearr + ( #yearr / 4 ) + ( #century / 4 ) - 2 * #century set #dayOfWeek #dayOfWeek - #dayOfWeek / 7 * 7 if #dayOfWeek = 0 set #dayOfWeek 7 end_if // set logging #dayOfWeek return
было скучно))) при желании можно и процедуры прикрутить для выполнения. (IMG: style_emoticons/default/swoon.gif) (IMG: style_emoticons/default/blink.gif) (IMG: style_emoticons/default/thumbsup.gif)
|
|
|
|
FREEON |
9.1.2019, 10:33
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(DarkMaster @ 9.12.2010, 14:16) да чего уж там... бетка ежедневника) ежедневник
Код set linedelay 0 set logging close set logging open 0 0 1024 200 set logging clear set logging __________________________________________
// В первой строке введите название события. // Во второй строке режим напоминания. // Флаги режима напоминания: // + Одноразовая задача ( режим 0 ) // + Ежечасная ( режим 0 ) // + Ежедневная ( режим 0 ) // + Ежемесячная ( режим 0 ) // + Ежегодная ( режим 0 ) // 1-7 + Еженедельная (номер дня недели) // Возможно еще добавлю: // - Каждые N дней // - Каждые № минут // - Секунд?? // Далее по порядку в отдельных строках // введите параметры от года до минут. // Может отсутсвовать по _порядку_ (!!!) любое // количество параметров даты начиная с года. // Минуты обязательны.
set %event [ 1 1 ] Сделай то-то set %event [ 1 2 ] 0 set %event [ 1 3 ] 10 set %event [ 1 4 ] 00 set %event [ 4 1 ] Сделай это set %event [ 4 2 ] 0 set %event [ 4 3 ] 14 set %event [ 4 4 ] 00
set #eventCount size ( %event ) set %event [ 1 10 ] "" set %clearEvent [ 1 40 ] "" set $clear "" set #nClearEvent 1
for #i 1 #eventCount 1 // Преобразовываем в удобоваримый вид %event set $nameEvent %event [ #i 1 ] if $nameEvent <> $clear // Исключаем пропущенные элементы массива (например, после удаления задания из середины). set $modeElement %event [ #i 2 ] if ( $modeElement < 0 ) or ( $modeElement > 7 ) // Проверяемя корректность выбранного режима проверки. msg В событии ''$nameEvent'' неверно указан режим напоминания. Задайте режим в set % event [ #i 2 ]. Между "%" и "event" пробела быть не должно. end_if set $fistTimeParam %event [ #i 3 ] if $fistTimeParam = $clear // Проверяем корректность введнного времени. msg В событии ''$nameEvent'' отсутсвует или неверно указано время. Задайте время начиная с set % event [ #i 2 ]. Между "%" и "event" пробела быть не должно. end_if set %clearEvent [ #nClearEvent 1 ] %event [ #i 1 ] // Начинаем формирование "чистого" массива с событиями. set %clearEvent [ #nClearEvent 2 ] %event [ #i 2 ] set %clearEvent [ #nClearEvent 6 ] %event [ #i 1 ] \ %event [ #i 2 ] \ %event [ #i 3 ] \ // Делаем уникальный штамп евента для сравнения. set #y 4 set $eventForWhile %event [ #i #y ] while $eventForWhile <> $clear // Считаем количество введнных параметров события set %clearEvent [ #nClearEvent 6 ] %clearEvent [ #nClearEvent 6 ] %event [ #i #y ] \ // Делаем уникальный штамп евента для сравнения. set #y #y + 1 set $eventForWhile %event [ #i #y ] end_while set %clearEvent [ #nClearEvent 9 ] #y - 1 // set logging В событии ''%event [ #i 1 ]'' ( #nClearEvent реальное проверяемое) %clearEvent [ #nClearEvent 9 ] параметров. // set logging Событие ''%event [ #i 1 ]'' добавлено в обработку. set #countEventParam %clearEvent [ #nClearEvent 9 ] if ( #countEventParam = 8 ) or ( #second = 1 ) // Прощитывать ли секунды. set #yClearEvent 15 set %clearEvent [ #nClearEvent 8 ] #yClearEvent set %clearEvent [ #nClearEvent 18 ] #yClearEvent + 10 for #i2 3 #countEventParam 1 set %clearEvent [ #nClearEvent #yClearEvent ] %event [ #i #countEventParam ] set #countEventParam #countEventParam - 1 set #yClearEvent #yClearEvent - 1 end_for // set logging %clearEvent [ #nClearEvent 10 ] %clearEvent [ #nClearEvent 11 ] %clearEvent [ #nClearEvent 12 ] %clearEvent [ #nClearEvent 13 ] %clearEvent [ #nClearEvent 14 ] %clearEvent [ #nClearEvent 15 ] else set #yClearEvent 14 set %clearEvent [ #nClearEvent 8 ] #yClearEvent set %clearEvent [ #nClearEvent 18 ] #yClearEvent + 10 for #i2 3 #countEventParam 1 set %clearEvent [ #nClearEvent #yClearEvent ] %event [ #i #countEventParam ] set #countEventParam #countEventParam - 1 set #yClearEvent #yClearEvent - 1 end_for // set logging %clearEvent [ #nClearEvent 10 ] %clearEvent [ #nClearEvent 11 ] %clearEvent [ #nClearEvent 12 ] %clearEvent [ #nClearEvent 13 ] %clearEvent [ #nClearEvent 14 ] %clearEvent [ #nClearEvent 15 ] end_if set #nClearEvent #nClearEvent + 1 end_if end_for set #sizeClearEvent size ( %clearEvent ) for #nClearEvent 1 #sizeClearEvent 1 // Дублируем загруженные данные в область проверки. Разделение сделано для восстановления изменившихся данных в ходе работы. for #i 10 15 1 set #timeCheck #i + 10 set %clearEvent [ #nClearEvent #timeCheck ] %clearEvent [ #nClearEvent #i ] end_for set %clearEvent [ #nClearEvent 19 ] %clearEvent [ #nClearEvent 9 ] end_for load_array %lastClearEvent Last_Clear_Event.txt set #sizeLastClearEvent size ( %lastClearEvent ) for #nClearEvent 1 #sizeClearEvent 1 for #i 1 #sizeLastClearEvent 1 set $eventstamp %clearEvent [ #nClearEvent 6 ] set $lastEventstamp %lastClearEvent [ #i 1 ] if $eventstamp = $lastEventstamp set %clearEvent [ #nClearEvent 7 ] %lastClearEvent [ #i 2 ] break end_if end_for end_for set logging Задач загружено: #sizeClearEvent за timer мс set logging Year Month Day Hour : Min : Sec
// Элементы массива %ClearEvent // Максимальнальное значеие второй размерности: 20 // Содержание: // 1 - название задачи. // 2 - изначальный режим задачи загруженный из %event (ежедневная, // одноразовая, ежемесечная и т.д.). Используется для восстановелнерия // проверяемого режима, который меняется во время отсрочки задачи. // 3 - 5 зарезервировано. // 6 - слепленные через " \ " все элементы %event. Нужен для сличения // загруженных элементов с таблицей прошлой работы скрипта. // Сличение производится для загрузки таймштампа последнего // оповещения о событии. // 7 - содержит $lastHitTimestamp. // Используется для определения было ли оповещение в задавнное время. // Например: ежедневная задача на 14:00, сейчас 17:00. // Сравнивая $lastHitTimestamp с $currentTimestamp мы определяем // Выполнялась ли уже задача. В $lastHitTimestamp не (!!!) входят // указанныепараметры события. Т.е. для примера выше будт содержаться: // год, месяц, число. // 8 - изначально загруженное количество элементов из %Event. // Для отсечение секунд, если они не указаны. // 9 - количество параметров в исходном %event [ i ]. // 19 - проверяемое количество параметров даты. // Использыется для определения последнего не пустого столбца. // Необходимо при определении границ параметров даты. // 10 - 15 изначальные параметры даты задачи (год, месяц, день, час, минуты). // 20 - 25 время следующего срабатывания. set %dayInMonth [ 1 ] 31 set %dayInMonth [ 2 ] 28 set %dayInMonth [ 3 ] 31 set %dayInMonth [ 4 ] 30 set %dayInMonth [ 5 ] 31 set %dayInMonth [ 6 ] 30 set %dayInMonth [ 7 ] 31 set %dayInMonth [ 8 ] 31 set %dayInMonth [ 9 ] 30 set %dayInMonth [ 10 ] 31 set %dayInMonth [ 11 ] 30 set %dayInMonth [ 12 ] 31 set linedelay 1 :start
for #nClearEvent 1 #sizeClearEvent 1 set %timeArr [ 20 ] Year set %timeArr [ 21 ] Month set %timeArr [ 22 ] Day set %timeArr [ 23 ] Hour set %timeArr [ 24 ] Min set %timeArr [ 25 ] Sec
set #mode %clearEvent [ #nClearEvent 2 ] if ( #mode > 0 ) and ( #mode < 8 ) gosub dayOfWeek if #dayOfWeek <> #mode continue end_if end_if // if #mode = 0 set $currentTimestamp $clear set #endFor 26 - %clearEvent [ #nClearEvent 19 ] for #i 20 #endFor 1 // Формируем таймштамп set $currentTimestamp $currentTimestamp %timeArr [ #i ] \ end_for set $lastHitTimestamp %clearEvent [ #nClearEvent 7 ] set logging $currentTimestamp == $lastHitTimestamp if $currentTimestamp <> $lastHitTimestamp // Проверка была ли уже выполнена задача. set #startFor 27 - %clearEvent [ #nClearEvent 19 ] // Вычисляем с какого элемента массива нам необходмо делать проверку. Зависит от количества введеных параметров даты. set #endFor %clearEvent [ #nClearEvent 18 ] // set logging #endFor set #timeHit 0 for #i #startFor #endFor 1 // Сравнение введенных параметров времени с текущим временем. // set logging %clearEvent [ #nClearEvent #i ] set #timeElementOfEvent %clearEvent [ #nClearEvent #i ] set #timeElementCurrentTime %timeArr [ #i ] // set logging #nClearEvent #i #timeElementOfEvent <= #timeElementCurrentTime if ( #timeElementOfEvent < #timeElementCurrentTime ) or ( ( #timeElementOfEvent = #timeElementCurrentTime ) and ( #i = #endFor ) ) set #timeHit 1 break end_if if #timeElementOfEvent = #timeElementCurrentTime continue end_if break end_for if #timeHit = 1 alarm online msg %clearEvent [ #nClearEvent 1 ] set $addWaiting prompt ("Выполнено" "Напомнить через 15 минут" "Напомнить через 30 минут" "Напомнить через 1 час" "Другое" ) if $addWaiting = 1 set %clearEvent [ #nClearEvent 7 ] $currentTimestamp set %clearEvent [ #nClearEvent 19 ] %clearEvent [ #nClearEvent 9 ] // Возвращаем изначальное количество проверяемых елементов. set %clearEvent [ #nClearEvent 20 ] %clearEvent [ #nClearEvent 10 ] set %clearEvent [ #nClearEvent 21 ] %clearEvent [ #nClearEvent 11 ] set %clearEvent [ #nClearEvent 22 ] %clearEvent [ #nClearEvent 12 ] set %clearEvent [ #nClearEvent 23 ] %clearEvent [ #nClearEvent 13 ] set %clearEvent [ #nClearEvent 24 ] %clearEvent [ #nClearEvent 14 ] set %clearEvent [ #nClearEvent 25 ] %clearEvent [ #nClearEvent 15 ] set %timeArr [ 20 ] Year set %timeArr [ 21 ] Month set %timeArr [ 22 ] Day set %timeArr [ 23 ] Hour set %timeArr [ 24 ] Min set %timeArr [ 25 ] Sec set $lastHitTimestamp $clear // Делаем корректный таймштамп (после отсрочек нельзя тупо присвоить #currentTimeStamp) set #endFor 26 - %clearEvent [ #nClearEvent 19 ] // set logging %clearEvent [ #nClearEvent 19 ] #endFor for #n 20 #endFor 1 // Формируем таймштамп set $lastHitTimestamp $lastHitTimestamp %timeArr [ #n ] \ end_for set %clearEvent [ #nClearEvent 7 ] $lastHitTimestamp save_array %clearEvent 1 6 -1 2 last_clear_event.txt break end_if set %clearEvent [ #nClearEvent 19 ] 7 set #y Year// Формируем дату для последующего пересчета ( например 67 мин = 1 час 7 мин) set #mo Month set #d Day set #h Hour set #m Min set #s Sec if $addWaiting = 0 set #m #m + 5 end_if if $addWaiting = 2 set #m #m + 15 end_if if $addWaiting = 3 set #m #m + 30 end_if if $addWaiting = 4 set #h #h + 1 end_if if $addWaiting = 5 set %clearEvent [ #nClearEvent 7 ] $currentTimestamp end_if gosub timeCalc // set logging #y #mo #d #h #m #s set %clearEvent [ #nClearEvent 20 ] #y set %clearEvent [ #nClearEvent 21 ] #mo set %clearEvent [ #nClearEvent 22 ] #d set %clearEvent [ #nClearEvent 23 ] #h set %clearEvent [ #nClearEvent 24 ] #m set %clearEvent [ #nClearEvent 25 ] #s continue end_if // Если время устроило - показываем таблички. end_if // Проверка была ли уже выполнена задача. continue // end_if // if #mode = 0 ежесекундный/минутный/часный/дневный/годный режим. end_for // Перебор всех существующих задач (%clearEvent) goto start
:timeCalc // Пересчитываем дату ( например 67 мин = 1 час 7 мин). if #s > 59 set #m #m + #s / 60 set #s #s - #s / 60 * 60 end_if if #m > 59 set #h #h + #m / 60 set #m #m - #m / 60 * 60 end_if if #h > 23 set #d #d + #h / 24 set #h #h - #h / 24 * 24 end_if while #d > 28 if #mo > 12 set #y #y + #mo / 12 set #mo #mo - #mo / 12 * 12 + 1 end_if set #dayInMonth %dayInMonth [ #mo ] if #mo = 2 set #ymod ( #y - #y / 400 * 400 ) * ( #y - #y / 4 * 4 + ( #y - #y / 100 * 100 - 100 ) / 100 ) // Високосный ли год. Вернет 0, если високосный. if #ymod = 0 set #dayInMonth #dayInMonth + 1 end_if end_if set #addMo #d / ( #dayInMonth + 1 ) if #addMo > 0 set #mo #mo + 1 set #d #d - #dayInMonth else break end_if end_while if #mo > 12 set #y #y + #mo / 12 set #mo #mo - #mo / 12 * 12 end_if return :dayOfWeek if Month > 2 // Расчет дня недели. set #m Month -2 set #century Year / 100 set #yearr Year - #century * 100 else set #m Month +10 set #yearr Year - Year / 100 * 100 - 1 set #century #y / 100 end_if set #dayOfWeek Day + ( ( 13 * #m - 1 ) / 5 ) + #yearr + ( #yearr / 4 ) + ( #century / 4 ) - 2 * #century // set logging Day + ( ( 13 * #m - 1 ) / 5 ) + #yearr + ( #yearr / 4 ) + ( #century / 4 ) - 2 * #century set #dayOfWeek #dayOfWeek - #dayOfWeek / 7 * 7 if #dayOfWeek = 0 set #dayOfWeek 7 end_if // set logging #dayOfWeek return
было скучно))) при желании можно и процедуры прикрутить для выполнения. Как просто сделать условие, к примеру если сегодня понедельник то выполнить нужный код?
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|