Здравствуйте, гость ( Вход | Регистрация )

> Время Включения И Отключения
Мясник
сообщение 9.12.2010, 5:38
Сообщение #1


**

Neophyte
Сообщений: 22
Регистрация: 9.7.2010
Группа: Пользователи
Наличность: 0
Пользователь №: 12.855



Объясните как сделать так чтобы скрипт запускался в час ночи и выключался в 2 часа ночи.
Как это прописать.

Заранее благодарен за ответы.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 9.12.2010, 14:16
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.740
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29644
Пользователь №: 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.1.2019, 10:33
Сообщение #3


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 20
Пользователь №: 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

было скучно))) при желании можно и процедуры прикрутить для выполнения.

Как просто сделать условие, к примеру если сегодня понедельник то выполнить нужный код?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 5.7.2025, 3:43
Designed by Nickostyle