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

 
Ответить в эту темуОткрыть новую тему
> Таймер на IF, внутри цикла
Levo222
сообщение 7.9.2019, 0:12
Сообщение #1


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Как сделать таймер на If внутри цикла? --Lua
Код
                  if  условие
                        and () -- условие 1
                        and () -- условие 2
                        and () -- условие 3
                         then
Где-то здесь должен быть таймер на исполнение по истечении которого выполнение отменяется и ищется заново, иначе происходит задержка выполнения и клавиша нажимается когда все условия уже прошли.
                        send217 ("клавиша")
                        wait (0)
                    else
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 10.9.2019, 3:51
Сообщение #2


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



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


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Подсветилось потому что это зарезервированные переменные.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 10.9.2019, 4:20
Сообщение #4


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



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

Подсветилось потому что это зарезервированные переменные.

Нашел функцию Timer в самом конце функции 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


при таком написании функция таймера же будет абсолютна бесполезна, что она есть что её нету?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 10.9.2019, 22:57
Сообщение #5


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



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

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


***********

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



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

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

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 11.9.2019, 1:35
Сообщение #7


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



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

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


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



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

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


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(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 мс, где-то больше где-то меньше, Нужно в каждое условие вставлять разные. Как я буду это делать?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 13.9.2019, 14:02
Сообщение #10


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Что можно выполнить за 200-300 миллисекунд? задержка на lua пишется в скобках wait (200).
Если все же нужен таймер то из приведённых примеров готовый код можете написать сами просто подставьте свое условие и действие.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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