Помощь - Поиск - Пользователи - Календарь
Полная версия: Функция timer
UoKit.com Форумы > Кликер > UO Pilot
PostByMik
Есть скрипт, состоящий из нескольких частей, каждую из частей необходимо выполнять через определенный промежуток времени.

Т.е.
задача

Скрипт
цикл №1 - выполняется раз в каждую минуту.
цикл №2 - выполняется раз в каждые 10 минут.
цикл №3 - выполняется раз в каждые 15 минут.
цикл №4 - выполняется раз в каждые 30 минут.
и всё это работает (повторяется) до момента пока не остановишь сам выполнение скрипта.


Я не программист, но голова, вроде, на месте)
Как мне использовать функцию timer для моего примера. Важно, что бы срабатывание таймера не прерывало уже выполняющийся цикл, если конечно такое может случиться)
В wiki очень маленькое описание, не смог на основе указанных там двух примеров понять то, что мне нужно. (
DarkMaster
Код

--lua
local t1 = os.clock() + 60
local t2 = os.clock() + 60*10
local t3 = os.clock() + 60*15
local t4 = os.clock() + 60*30

while 1 do
    if t1 < os.clock() then
        t1 = os.clock() + 60
        --тут ваше полезный код для этого таймера
    end

    if t2 < os.clock() then
        t2 = os.clock() + 60*10
        --тут ваше полезный код для этого таймера
    end

    if t3 < os.clock() then
        t3 = os.clock() + 60*15
        --тут ваше полезный код для этого таймера
    end

    if t4 < os.clock() then
        t4 = os.clock() + 60*30
        --тут ваше полезный код для этого таймера
    end
end



Идейно какак-то так. Можно конечно все завернуть в массивы и вынести в отдельные функции все будет по красоте, но имхо текущий вариант для вас будет проще понять.
PostByMik
Спасибо!

Буду разбираться)

Правильно ли я понимаю, что:
1. os.clock() - вернет время на момента запуска UoPilot, а не на момент запуска скрипта?
2. local t1 = os.clock() + 60 - означает, что скрипт для t1 будет выполняться в течение 60 секунд после запуска UoPilot? Если да, то, следовательно, для скрипта который по своему выполнению занимает больше минуты, произойдет прерывание или он выполнится полностью, а повторно запустится когда?
DarkMaster
Цитата
1. os.clock() - вернет время на момента запуска UoPilot, а не на момент запуска скрипта?

Запуска виртуальной машины луа. В конкретно нашем случае это вроде время с запуска пилота или первого скрипта.
Цитата
2. local t1 = os.clock() + 60 - означает, что скрипт для t1 будет выполняться в течение 60 секунд после запуска UoPilot?

Это значит, что код внутри будет выполен не чаще чем раз в 1 минуту со всеми вытекающими.
Цитата
Если да, то, следовательно, для скрипта который по своему выполнению занимает больше минуты, произойдет прерывание или он выполнится полностью, а повторно запустится когда?

А вот эти моменты в вашем полезном коде описывать надо =)
PostByMik
Сделал, и вроде всё работало. Добавил пару новых кликов и переходов и перестало работать.
Теперь не могу найти где проблема (

код
Код

--lua
local t1 = os.clock() + 60
local t2 = os.clock() + 60*11
local t3 = os.clock() + 60*16
local t4 = os.clock() + 60*31

while 1 do
    if t1 < os.clock() then
        t1 = os.clock() + 60
        --move_smooth (124, 346) --МЫ В ОСНОВНОМ МЕНЮ! перемещаем курсор в точку последующего клика
        --kleft (124, 346, 5, 5, 5, 5) --переходим на карту с основного меню
        --wait (4000) --ждем окончания перехода
        if color(552, 271) == 48383  -- 13.75K МЫ НА КАРТЕ!
            then -- если в координатах цвет 48383
            move_smooth (552, 271, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (552, 271, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(616, 504) == 48383  -- 30K
            then -- если в координатах цвет 48383
            move_smooth (616, 504, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (616, 504, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(324, 171) == 48383  -- 46.25K
            then -- если в координатах цвет 48383
            move_smooth (324, 171, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (324, 171, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(660, 334) == 48383  -- 65K
            then -- если в координатах цвет 48383
            move_smooth (660, 334, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (660, 334, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(187, 173) == 48383  -- 105K
            then -- если в координатах цвет 48383
            move_smooth (187, 173, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (187, 173, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(787, 456) == 48383  -- 151.25K
            then -- если в координатах цвет 48383
            move_smooth (787, 456, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (787, 456, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(661, 205) == 48383  -- 280K
            then -- если в координатах цвет 48383
            move_smooth (661, 205, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (661, 205, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(60, 289) == 48383  -- 362.5K
            then -- если в координатах цвет 48383
            move_smooth (60, 289, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (60, 289, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(196, 326) == 48383  -- 937.5K
            then -- если в координатах цвет 48383
            move_smooth (196, 326, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (196, 326, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(96, 439) == 48383  -- 1.65M
            then -- если в координатах цвет 48383
            move_smooth (96, 439, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (96, 439, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(904, 229) == 48383  -- 1.89M
            then -- если в координатах цвет 48383
            move_smooth (904, 229, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
            kleft (904, 229, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        --move_smooth (36, 38, 5, 5, 5, 5) --Перемещаем курсор в координаты
        --wait (1000)
        --kleft (36, 38, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ!
        --wait (4000) --ждем окончания перехода
    end

    if t2 < os.clock() then
        t2 = os.clock() + 60*11
        --move_smooth (124, 346, 5, 5, 5, 5) --МЫ В ОСНОВНОМ МЕНЮ! перемещаем курсор в точку последующего клика
        --kleft (124, 346, 5, 5, 5, 5) --переходим на карту с основного меню
        --wait (4000) --ждем окончания перехода
        move_smooth (431, 145, 5, 5, 5, 5) –МЫ НА КАРТЕ! Перемещаем курсор в координаты
        wait (1000)
        kleft_down (431, 145, 5, 5, 5, 5) --зажать левую кнопку в координатах
        wait (1000)
        move_smooth (431, 205, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (431, 265, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (431, 315, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (431, 365, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (451, 431, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        kleft_up (451, 431, 5, 5, 5, 5) --отпустить левую кнопку в координатах
        if color(771, 257, 5, 5, 5, 5) == 48383  -- 700K
            then --если в координатах  цвет 48383
            kleft (771, 257, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        move_smooth (36, 38, 5, 5, 5, 5) --перемещаем курсор в координаты
        wait (1000)
        kleft (36, 38, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ!
        wait (4000) --ждем окончания перехода
        move_smooth (75, 349, 5, 5, 5, 5) -- МЫ В ОСНОВНОМ МЕНЮ! Перемещаем курсор в координаты
        wait (1000)
        kleft (75, 349, 5, 5, 5, 5) --переходим на карту с основного меню
        wait (4000) --ждем окончания перехода
    end

    if t3 < os.clock() then
        t3 = os.clock() + 60*16
        --move_smooth (75, 349, 5, 5, 5, 5) -- МЫ В ОСНОВНОМ МЕНЮ! Перемещаем курсор в координаты
        --wait (1000)
        --kleft (75, 349, 5, 5, 5, 5) --переходим на карту с основного меню
        --wait (4000) --ждем окончания перехода
        move_smooth (511, 485, 5, 5, 5, 5) --перемещаем курсор в координаты
        wait (1000)
        kleft_down (511, 485, 5, 5, 5, 5) --зажать левую кнопку в координатах
        wait (1000)
        move_smooth (520, 415, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (520, 365, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (520, 315, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (520, 265, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (520, 215, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (520, 165, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (520, 115, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        move_smooth (532, 93, 5, 5, 5, 5) --Медленно перемещаем курсор в координаты в несколько шагов
        wait (1000)
        kleft_up (532, 93, 5, 5, 5, 5) --отпустить левую кнопку в координатах
        wait (1000)
        if color(750, 375) == 48383  -- 210K
            then -- если в координатах цвет 48383
            kleft (750, 375, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(583, 415) == 48383  -- 512.5K
            then -- если в координатах цвет 48383
            kleft (583, 415, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(392, 404) == 48383  -- 2.13M
            then -- если в координатах цвет 48383
            kleft (392, 404, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(230, 282) == 48383  -- 2.96M
            then -- если в координатах цвет 48383
            kleft (230, 282, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        if color(111, 365) == 48383  -- 5.23M
            then -- если в координатах цвет 48383
            kleft (111, 365, 5, 5, 5, 5) --нажать левую кнопку в координатах
            wait (1000)
        end
        move (36, 38, 5, 5, 5, 5) --перемещаем курсор в координаты
        wait (1000)
        kleft (36, 38, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ!
        wait (6000) --ждем окончания перехода
        move_smooth (75, 349, 5, 5, 5, 5) -- МЫ В ОСНОВНОМ МЕНЮ! Перемещаем курсор в координаты
        wait (1000)
        kleft (75, 349, 5, 5, 5, 5) --ПЕРЕХОДИМ НА КАРТУ с основного меню!
        wait (4000) --ждем окончания перехода
    end

    if t4 < os.clock() then
        t4 = os.clock() + 60*31
        move (36, 38, 5, 5, 5, 5) --перемещаем курсор в координаты
        wait (1000)
        kleft (36, 38, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ!
        wait (6000) --ждем окончания перехода
        move_smooth (78, 281, 5, 5, 5, 5) --МЫ В ОСНОВНОМ МЕНЮ! Перемещаем курсор в точку последующего клика
        kleft (78, 281, 5, 5, 5, 5, 5, 5, 5, 5) --переходим в клан с основного меню
        wait (6000) --ждем окончания перехода
        move_smooth (43, 490, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (43, 490, 5, 5, 5, 5) --переходим в меню pvp
        wait (4000) --ждем окончания перехода
        --move_smooth (33, 163, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        --kleft (33, 163, 5, 5, 5, 5) --выбираем башню для pvp
        --wait (2000) --ждем
        move_smooth (460, 475, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (460, 475, 5, 5, 5, 5) --переходим в меню выбора соперника для pvp
        wait (4000) --ждем
        move_smooth (227, 303, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (227, 303, 5, 5, 5, 5) --выбираем четвертого сверху по списку соперника для pvp
        wait (4000) --ждем
        move_smooth (682, 492, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (682, 492, 5, 5, 5, 5) --подтверждаем свой выбор соперника для pvp
        wait (4000) --ждем
        move_smooth (480, 420, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (480, 420, 5, 5, 5, 5) --жмём "атаковать" соперника pvp
        wait (20000) --ждем
        move_smooth (487, 476, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (487, 476, 5, 5, 5, 5) --жмём "продолжить" после окончания боя
        wait (8000) --ждем
        move_smooth (32, 33, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        kleft (32, 33, 5, 5, 5, 5) --выходим из клана в основное меню
        wait (6000) --ждем
        --move_smooth (92, 215, 5, 5, 5, 5) -- МЫ В ОСНОВНОМ МЕНЮ! перемещаем курсор в точку последующего клика
        --kleft (92, 215, 5, 5, 5, 5) --переходим в меню выбора башен
        --wait (4000) --ждем
        --move_smooth (37, 115, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        --kleft (37, 115, 5, 5, 5, 5) --выбираем башню для фарма золота
        --wait (4000) --ждем
        --move_smooth (37, 31, 5, 5, 5, 5) --перемещаем курсор в точку последующего клика
        --kleft (37, 31, 5, 5, 5, 5) --ВОЗВРАЩАЕМСЯ В ОСНОВНОЕ МЕНЮ!
        --wait (4000) –ждем
        move_smooth (75, 349, 5, 5, 5, 5) -- МЫ В ОСНОВНОМ МЕНЮ! Перемещаем курсор в координаты
        wait (1000)
        kleft (75, 349, 5, 5, 5, 5) --ПЕРЕХОДИМ НА КАРТУ с основного меню!
        wait (4000) --ждем окончания перехода
    end
end


Выдает ошибку
text

1575026 -> 8194450 -> 4655740 -> MainWindowWindow
9:05:09 0 (Сбор_по_цвету.txt, 0): syntax error during precompilation.
90: '=' expected near 'НА'
--lua
local t1 = os.clock() + 60
local t2 = os.clock() + 60*11
local t3 = os.clock() + 60*16
local t4 = os.clock() + 60*31


Странно, в редактировании вижу структуру, а когда смотрю на пост, то нет структуры (пробелов/отступов) от края.
DarkMaster
Цитата
move_smooth (431, 145, 5, 5, 5, 5) –МЫ НА КАРТЕ! Перемещаем курсор в координаты

Дефис только ордин. Добавьте =)
Цитата
90: '=' expected near 'НА'

90 - это номер строки. так проще.
Ну и код тут явно не весь - строка фактически 84. Что-то подрезали).

Цитата
Странно, в редактировании вижу структуру, а когда смотрю на пост, то нет структуры (пробелов/отступов) от края.

Используйте тег [code]
PostByMik
Спасибо огромное!

Помогло.

Не весь код был, потому что редактировал, и ошибка сместилась, но текст ошибки не догадался сменить, когда код сменил. Даже не знал, что число в ошибке это номер строки где ошибка) За это отдельное спасибо!

Проблема была в том, что не хватало двойного тире.
cirus
Цитата
90 - это номер строки.

Нумерация строк начинается с 0 поэтому ошибка в строке 89.
PostByMik
Цитата

Нумерация строк начинается с 0 поэтому ошибка в строке 89.


Спасибо! Буду знать на будущее. А так нашел в области 90 +/- строки))
PostByMik
Цитата
--lua
local t1 = os.clock() + 60
local t2 = os.clock() + 60*10
local t3 = os.clock() + 60*15
local t4 = os.clock() + 60*30

while 1 do
if t1 < os.clock() then
t1 = os.clock() + 60
--тут ваше полезный код для этого таймера
end

if t2 < os.clock() then
t2 = os.clock() + 60*10
--тут ваше полезный код для этого таймера
end

if t3 < os.clock() then
t3 = os.clock() + 60*15
--тут ваше полезный код для этого таймера
end

if t4 < os.clock() then
t4 = os.clock() + 60*30
--тут ваше полезный код для этого таймера
end
end


Возможно ли сделать так, что бы при первом запуске сработал каждый из пунктов (скриптов), а уже потом повторился через указанное для каждого свое время?

Если да то как? Подскажите, пожалуйста.
cirus
Цитата
что бы при первом запуске сработал каждый из пунктов

Код
local t1 = os.clock() 
local t2 = os.clock()
local t3 = os.clock()
local t4 = os.clock()
PostByMik
Цитата
local t1 = os.clock()
local t2 = os.clock()
local t3 = os.clock()
local t4 = os.clock()


а потом будет через указанное ниже время если оставить так?

Цитата
while 1 do
if t1 < os.clock() then
t1 = os.clock() + 60
--тут ваше полезный код для этого таймера
end

if t2 < os.clock() then
t2 = os.clock() + 60*10
--тут ваше полезный код для этого таймера
end

PostByMik
Цитата(cirus @ 7.11.2020, 18:58) *

Код
local t1 = os.clock() 
local t2 = os.clock()
local t3 = os.clock()
local t4 = os.clock()



Простите, но я так и не понял, достаточно ли изменения внести только в "шапке"?
cirus
Неужели так сложно проверить.
Код
--lua
local t1 = os.clock()
local t2 = os.clock()
log'clear' log'mode compact'

while 1 do
    if t1 < os.clock() then
        t1 = os.clock() + 2
        log('Каждые 2 секунды')
    end

    if t2 < os.clock() then
        t2 = os.clock() + 10
        log('Каждые 10 секунд')
    end
    wait(10)
end
PostByMik
Цитата(cirus @ 7.11.2020, 22:13) *

Неужели так сложно проверить.
Код
--lua
local t1 = os.clock()
local t2 = os.clock()
log'clear' log'mode compact'

while 1 do
    if t1 < os.clock() then
        t1 = os.clock() + 2
        log('Каждые 2 секунды')
    end

    if t2 < os.clock() then
        t2 = os.clock() + 10
        log('Каждые 10 секунд')
    end
    wait(10)
end



Безусловно не сложно, так же как и просто написать, что "Да, только в шапке менять"

Спасибо! И простите, за беспокойство.
DarkMaster
Цитата
Спасибо! И простите, за беспокойство.

Спрашивайте. Мы здесь для того и сидим, чтобы отвечать =)
PostByMik
Странно, поменял только в шапке и ощущение, что они прям все один за другим стартовать начинают, не дожидаясь окончания ранее начавщегося. Начинает происходить какая-то каша)

Еще проверю.

апд.

Проверил. Проблема в том, что они начинаются не по очередности "сверху-вниз", а как-то рандомно.
DarkMaster
поменяй везде < на <=. Скорее всего просто время измениться не успевает при первом прогоне.
PostByMik
Цитата(DarkMaster @ 8.11.2020, 19:56) *

поменяй везде < на <=. Скорее всего просто время измениться не успевает при первом прогоне.

Спасибо! Помогло.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.