Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Таймер на IF

Автор: Levo222 7.9.2019, 0:12

Как сделать таймер на If внутри цикла? --Lua

Код
                  if  условие
                        and () -- условие 1
                        and () -- условие 2
                        and () -- условие 3
                         then
Где-то здесь должен быть таймер на исполнение по истечении которого выполнение отменяется и ищется заново, иначе происходит задержка выполнения и клавиша нажимается когда все условия уже прошли.
                        send217 ("клавиша")
                        wait (0)
                    else

Автор: Levo222 10.9.2019, 3:51

Покопавшись в Lua увидел что при написании

Код
Timer = os.clock()
слово timer подсветилось синтаксисом команды. Но ведь в Lua нет понятия Timer это глюк пилота или что-то еще?

Не совсем понятно как в контексте многоуровневой проверки условий сделать
os.clock() - для каждой проверки в отдельности
когда есть
Код
if условие
таймаут
выполнение
else
if условие
таймаут
выполнение
else
if условие
таймаут
выполнение
else
в каждом условии в конце нужно сбрасывать значение времени запуска пилота как я понимаю?

Например на примере такой конструкции

lastTimeProcessed = os.clock()

function IsTimeToProcess(currentTime)
span = currentTime - lastTimeProcessed
if span >= 60 then
lastTimeProcessed = currentTime
return true
end

return false
end

while true do
if IsTimeToProcess(os.clock()) then
-- process some data here
end
-- otherwise do another round of whatever you're doing
end

Нужно что-то такое:
Код
присвоить время значения для таймера 500 мс
while 1 do
[code]if условие
таймаут
выполнение
однако, если после первой проверки условий прошло заданное время - то условия проверяются еще раз или переходят ниже
Как двойное else создать
--время на выполнение команды и отправка проверки по новой
else
if условие
таймаут
выполнение
else
if условие
таймаут
выполнение
else
end
end
end
end

Автор: FREEON 10.9.2019, 4:00

Подсветилось потому что это https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5,_%D0%B7%D0%B0%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5.

Автор: Levo222 10.9.2019, 4:20

Цитата(FREEON @ 10.9.2019, 8:00) *

Подсветилось потому что это https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5,_%D0%B7%D0%B0%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5.

Нашел функцию Timer в самом https://uopilot.uokit.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9_(Lua) в разделе Другое, почему не во "Времени"?

Также непонятно почему в разделе времени нету функции os.sleep типа таймера позволяющую делать паузу

Но всёравно непонятно, как я могу использовать таймер внутри цикла

Код
local timer = 0
while 1 do
if условие
if timer > 500
return false
else
выполнение
else
if условие
if timer > 500
return false
else
выполнение
else
if условие
if timer > 500
return false
else
выполнение
else
end
end
end
end


при таком написании функция таймера же будет абсолютна бесполезна, что она есть что её нету?

Автор: FREEON 10.9.2019, 22:57

Знаю что технически это неправильно но т.к. никто других вариантов не предложил...то предлагаю следующее. Сделать все шиворот на выворот, то есть плясать от таймера.

Код

set #timeout timer + 10000 // время таймера 10 секунд
while #timeout > timer     // будем выполнять цикл 10 сек
    start_script 2         // выполняем скрипт из вкладки 2(написанный на lua)
end_while
end_script

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

Ну вот накопал какое-то подобие таймера(правда чот работает в два раза дольше чем задаешь в for)
Код

--lua
local x = os.clock() --Возвращает примерное количество времени в секундах,которое скрипт запущен
local s = 0
for i=1,2000 do s = s + i
    log (string.format("время работы скрипта: %.1f\n", os.clock() - x)) --%.f отображение целого счетчика, если указать %.1f %.2f %.3f  то столько цифр будет выводиться после целого числа
end

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

--lua
local x = os.clock() --Возвращает примерное количество времени в секундах,которое скрипт запущен
local timer = 5000/2 -- время работы таймера подставить вместо звездочки */2
for i=1,timer do
    log (string.format("время работы скрипта: %.1f\n", os.clock() - x)) --%.f отображение целого счетчика, если указать %.1f %.2f %.3f  то столько цифр будет выводиться после целого числа
end

Автор: DarkMaster 11.9.2019, 0:53

Цитата
Также непонятно почему в разделе времени нету функции os.sleep типа таймера позволяющую делать паузу

Но всёравно непонятно, как я могу использовать таймер внутри цикла

Таймер - это переменная содержащая количество миллисекунд со времени старта скрипта.

Автор: FREEON 11.9.2019, 1:35

все разобрался вот готовый таймер

Код

--lua
log ()
local startTime = os.clock() -- таймер работы скрипта
log (startTime)
local Time = 5 --продолжительность работы таймера, 5 это значит 5 секунд (не миллисекунд)!!!
log (Time)
local endTimer = startTime + Time --расчитываем конечный параметр работы цикла
log (endTimer)
while os.clock() <= endTimer do --сравниваем текущее время с конечным
    wait (500)
    hint ((string.format("время работы цикла: %.1f\n", os.clock() - startTime)) ) --выводим сообщение
    --действие
end

если указать так local Time = 0.5 то тогда скрипт отработает 500 миллисекунд
%.1f - количество цифр после запятой. 1 - десятых, 2 -сотых, 3 тысячных. Больше 3 значение не имеет смысла устанавливать т.к. в 1 секунде 1000 миллисекунд.

Автор: FREEON 11.9.2019, 9:20

если совсем ужать то получим

Код

--lua
local Time = 4.235  --время работы таймера 4 секунды 235 миллисекунд
local endTimer = os.clock() + Time while os.clock() <= endTimer do
    wait (100)
    log (" работаем")--действие
end

Цитата(DarkMaster @ 11.9.2019, 0:53) *

Таймер - это переменная содержащая количество миллисекунд со времени старта скрипта.

Что касается Timer в lua пилота, то она попросту не работает.
Не знал что os.clock уже была в wiki(lua)

Автор: Levo222 12.9.2019, 10:49

Цитата(FREEON @ 11.9.2019, 13:20) *

если совсем ужать то получим
Код

--lua
local Time = 4.235  --время работы таймера 4 секунды 235 миллисекунд
local endTimer = os.clock() + Time while os.clock() <= endTimer do
    wait (100)
    log (" работаем")--действие
end


Что касается Timer в lua пилота, то она попросту не работает.
Не знал что os.clock уже была в wiki(lua)

Ничего не понял
применительно к
Код
while 1 do
local == изначальный таймер(Time)
if условие
if timer > 500 --Время на выполнение
return false
else
выполнение
else
if условие
if timer > 300 --Время на выполнение
return false
else
выполнение
else
if условие
if timer > 400 --Время на выполнение
return false
else
выполнение
else
end
end
end
end


Как будет выглядеть?

мне и нужен таймаут примерно в районе 300-200 мс, где-то больше где-то меньше, Нужно в каждое условие вставлять разные. Как я буду это делать?

Автор: FREEON 13.9.2019, 14:02

Что можно выполнить за 200-300 миллисекунд? задержка на lua пишется в скобках wait (200).
Если все же нужен таймер то из приведённых примеров готовый код можете написать сами просто подставьте свое условие и действие.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)