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

Вверх
Levo222
Покопавшись в 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
Подсветилось потому что это зарезервированные переменные.
Вверх
Levo222
Цитата(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


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

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

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
Цитата
Также непонятно почему в разделе времени нету функции os.sleep типа таймера позволяющую делать паузу

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

Таймер - это переменная содержащая количество миллисекунд со времени старта скрипта.
Вверх
FREEON
все разобрался вот готовый таймер
Код

--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
если совсем ужать то получим
Код

--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
Цитата(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
Что можно выполнить за 200-300 миллисекунд? задержка на lua пишется в скобках wait (200).
Если все же нужен таймер то из приведённых примеров готовый код можете написать сами просто подставьте свое условие и действие.
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.