UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2
Levo222
Если цвет в точке определённый дольше определённого времени цикл прерывается, если нет, продолжается.
Код

while 1==1 do
if color (1, 1) == 0 then
    timeout = os.clock()
     Timeleft = 0
elseif (color (1, 1) ~= 0 and Timeleft = 0) then
     timeout = os.clock() + 6
    Timeleft = 1
   else
  end
end
if timeout < os.clock() then
   break
  else
end
end

Вверх
cirus
Код
--lua
log 'clear' log 'mode compact'

while true do
    if color(338, 493) == 5384704 then  -- если цвет совпадает
        local t = os.clock() + 6  -- ожидать цвет 6 секунд
        while os.clock() < t and color(338, 493) == 5384704 do  -- пока не вышло время и цвет совпадает
            log('Цвет совпадает   ' .. tostring(t - os.clock()) )
            wait (100)
        end
        if os.clock() >= t then break end     -- если прошло заданное количество времени, то выход из цикла
    end
    wait (10)
end

Вверх
Levo222
Цитата(cirus @ 16.4.2021, 15:53)

Код
--lua
log 'clear' log 'mode compact'

while true do
    if color(338, 493) == 5384704 then  -- если цвет совпадает
        local t = os.clock() + 6  -- ожидать цвет 6 секунд
        while os.clock() < t and color(338, 493) == 5384704 do  -- пока не вышло время и цвет совпадает
            log('Цвет совпадает   ' .. tostring(t - os.clock()) )
            wait (100)
        end
        if os.clock() >= t then break end     -- если прошло заданное количество времени, то выход из цикла
    end
    wait (10)
end


Тут вопрос вот в чём. У меня уже внутренний цикл прописан во внешнем. Т.е. дальше при разрыве этого цикла идут некоторые действия, поэтому внутри заново писать их это усложнение кода. Но проходя каждый раз через
Код
if color(338, 493) == 5384704 then  -- если цвет совпадает
local t = os.clock() + 6
скрипт заново присваевает t + 6 секунд, и он никогда не заканчивается, поэтому возникла необходимость использования дополнительных переменных, а так
os.clock() < t
Что-то я не подумал что от времени можно переменную отнять.
Но при проверке этих переменных какая-то сложность возникает: Если "Переменная = 1" это вызывает ошибку.
Т.е., теперь, если я пишу

Код
while 1==1 do
if color (1, 1) == 0 then
    timeout = os.clock()
     Timeleft = 0
elseif (color (1, 1) ~= 0 and Timeleft = 0) then
     timeout = os.clock() + 6
    Timeleft = 1
   else
  end
end
if os.clock() > timeout then
   break
  else
end
end

То скрипт вызывает ошибку на строке
elseif (color (1, 1) ~= 0 and Timeleft = 0) then
Т.е. скрипту не нравится именно формат записи Timeleft = 0, хотя если я писал Timeleft ~= 0 или Timeleft == 0 это не имело никакого эффекта.
Локальные переменные в данном случае не использую, потому что насколько я помню они не в области видимости за пределами внутреннего цикла.
Вверх
Madeus
Цитата(Levo222 @ 16.4.2021, 14:48)

То скрипт вызывает ошибку на строке
elseif (color (1, 1) ~= 0 and Timeleft = 0) then
Т.е. скрипту не нравится именно формат записи Timeleft = 0, хотя если я писал Timeleft ~= 0 или Timeleft == 0 это не имело никакого эффекта.
Локальные переменные в данном случае не использую, потому что насколько я помню они не в области видимости за пределами внутреннего цикла.

Потому что ты присваиваешь 0 а не сравниваешь с ним == должно быть. И end лишний в конце. А вообще ошибку прикрепи.

Вверх
Levo222
Цитата(Madeus @ 16.4.2021, 23:58)

Потому что ты присваиваешь 0 а не сравниваешь с ним == должно быть.

Ну, "t = os.clock()" тоже операция сравнения проводится, однако это не мешает.
Цитата(Madeus @ 16.4.2021, 23:58)

А вообще ошибку прикрепи.

Короче я чёт запутался. Lua числа и выражения они разве не по-разному присваиваются?
если =
expected near '='
Syntax Error During /
если == то
attemt to compare nil with number
Вверх
Madeus
Цитата(Levo222 @ 16.4.2021, 21:21)

Ну, "t = os.clock()" тоже операция сравнения проводится, однако это не мешает.

Это не сравнение, а присваивание переменной t значение функции os.clock(), сравнение равенства делается через ==
Цитата(Levo222 @ 16.4.2021, 21:21)

attemt to compare nil with number

на какую строчку эта ошибка?
Вверх
Levo222
Цитата(Madeus @ 17.4.2021, 3:44)

Это не сравнение, а присваивание переменной t значение функции os.clock(), сравнение равенства делается через ==

на какую строчку эта ошибка?

Хрен его знает:
Вот код, и он не работает.
Код

if color (11, 91) == 0 then
TS = os.clock()
St1 = 0
else
if (color (11, 91) ~= 0 and St1 ~= 0) then
TS = os.clock() + 6
St1 = 1
wait (1000)
else
end
end
wait (100)
if (BlaBlaBla (11, 124) == 16579836 or ((os.clock() > TS))
then
какие-то действия
end

Но это не работает, end-ов там дальше хватает, все циклы и операции закрыты, и почему то где-то не тот знак присваивания или сравнения
Там формат времени какой-то странный: он то 4-х значный, то 6-ти, то 5-ти, как будто то минуты то секунды. В результате, когда я присваиваю несколько секунд он их по-разному воспринимает в разные моменты времени.
Вверх
cirus
Цитата
Но это не работает

Выкладывать куски кода нет смысла.
Вверх
Levo222
Цитата(cirus @ 1.5.2021, 13:20)

Выкладывать куски кода нет смысла.

Да он работает. Проблема лишь в присваивании и сравнении а также в формате времени - из-за чего в этом фрагменте выдаёт ошибку.
Хорошо, вот вам не "кусок кода"
скрипт
Код
local St1 = 0 --заранее создаём переменную чтобы код не считал её "несуществующей"
while true do

if color (11, 91) == 0 then
   TS = os.clock() --обнуляем время, если условия не выполняются.
    St1 = 0 --вводим переменную чтобы избежать повторной проверки
   else
    St1 = 1
end

if (color (11, 91) ~= 0 and St1 == 1) then  --если условия соблюдаются и переменная =1
  TS = os.clock() + 6 --засекаем 6 сек
   St1 = 1 --изменяем переменную чтобы время повторно не засекалось до изменения главного условия
    wait (100)
   else
end

if (BlaBlaBla (11, 124) == 16579836 or ((os.clock() > TS)) --если какое-то условие или с момента засечения времени прошло 6 секунд(при этом главное условие не менялось, потому что переменная St1 обнулила бы время)
  then
   break --выйти из цикла
end

end

Я уже разбил на простые блоки его, но это не помогает.

Вобще-то наверное вот так лучше:
скрипт
Код
local St1 = 0 --заранее создаём переменную чтобы код не считал её "несуществующей"
while true do

if color (11, 91) == 0 then
   TS = os.clock() --обнуляем время, если условия не выполняются.
    St1 = 0 --обнуляем переменную чтобы избежать повторной проверки
   else
    St1 = 1
end

if (color (11, 91) ~= 0 and St1 == 0) then  --если условия соблюдаются и переменная = 0
  TS = os.clock() + 6 --засекаем 6 сек
   St1 = 1 --изменяем переменную чтобы время повторно не засекалось до изменения главного условия
    wait (10)
   else
end

if (BlaBlaBla (11, 124) == 16579836 or ((os.clock() > TS)) --если какое-то условие или с момента засечения времени прошло 6 секунд(при этом главное условие не менялось, потому что переменная St1 обнулила бы время)
  then
   break --выйти из цикла
end

end

Вверх
cirus
Цитата
если какое-то условие или с момента засечения времени прошло 6 секунд

Выше есть пример такого кода.
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.