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

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


**

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



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

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


*********

Модератор UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Модераторы
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(Мясник @ 9.12.2010, 4:38) *

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

Заранее благодарен за ответы.


Вроде так:

Работающий скрипт
Код
// Скрипт 0 
// должен работать с 1 до 2 часов ночи
.... код скрипта
end_script


Контролирующий скрипт
Код
// Скрипт 1 запускаем сразу (работает всё время)
set #startH 1 // Время старта скрипта 0 (час)
set #startM 0 // мин
set #endH 2 // Время остановки скрипта 0 (час)
set #endM 0 // мин

set #startT  ( #startH * 60 ) + #startM // переводим в количество минут от полуночи
set #endT  ( #endH * 60 ) + #endM

if #startT < endT
   set #adTime  0
else // Диапазон времени пересекает полночь
   set #adTime  24 * 60
   set #endT  #endT + #adTime
end_if

set #started 0 // флаг - "скрипт 0 не запущен"

:nachalo
set #curT  ( hour * 60 ) + min // текущее значение минут от полуночи

if #curT < #startT
   set #curT  #curT + #adTime
end_if

if ( #startT <= #curT ) AND ( #curT <= #endT)
   set #inTime 1 // Флаг - текущее время находится внутри рабочего диапазона
else
   set #inTime 0
end_if

if ( #inTime = 1 ) AND ( #started = 0) // находимся в рабочем диапазоне и скрипт 0 не запущен
   set #started 1
   start_script 0 // запускаем скрипт 0
else
   if ( #inTime = 0 )  AND ( #started > 0 ) // вышли за пределы рабочего диапазона и скрипт 0 запущен
      set #started 0
      stop_script 0 // останавливаем скрипт 0
   end_if
end_if
wait 10s // ожидание
goto nachalo


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 9.12.2010, 13:53
Сообщение #3


*********

Модератор UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Модераторы
Наличность: 0
Из: Киев
Пользователь №: 13.093



Добавил возможность перехода времени работы скрипта через полночь


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.12.2010, 14:16
Сообщение #4


***********

Модератор UOPilot
Сообщений: 8.406
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25805
Пользователь №: 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 через ICQ, Skype, Ventrilo, TeamSpeak, TeamViewer 700р/час.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Мясник
сообщение 9.12.2010, 17:40
Сообщение #5


**

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



Вот спасибо DarkMaster и Zeleax помогло
DarkMaster отжог с ежедневником(IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nazar
сообщение 7.9.2012, 19:16
Сообщение #6


***

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)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.1.2019, 10:33
Сообщение #7


****

Apprentice
Сообщений: 298
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1545
Пользователь №: 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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.1.2019, 11:11
Сообщение #8


***********

Модератор UOPilot
Сообщений: 8.406
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25805
Пользователь №: 11.279



Код
пилот:
if dayofweek year(), month(), day() = 1
    ...
end_if

lua в пилоте:
if dayofweek (year(), month(), day()) == 1 then
    ...
end


Сообщение отредактировал DarkMaster - 9.1.2019, 13:05


--------------------
Скрипты под заказ.
Консультации по UOpilot через ICQ, Skype, Ventrilo, TeamSpeak, TeamViewer 700р/час.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.1.2019, 11:35
Сообщение #9


**********

Elder
Сообщений: 2.639
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 16851
Пользователь №: 16.971
Возраст: 29



Цитата
if dayofweek (year(), month(), day())) = 1

Скобки лишние. Закрывающая скобка лишняя.

Код
log dayofweek (year, month, day)
if  dayofweek (year, month, day) = 1   // если понедельник
    log ++++
end_if
end_script

Код
--lua
log (os.date("%w"))   -- день недели
if  os.date("%w") == "1" then  -- если понедельник
    log("++++")
end



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

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

 

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