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

 
Ответить в эту темуОткрыть новую тему
> while и repeat
kdv
сообщение 12.3.2023, 21:05
Сообщение #1


**

Neophyte
Сообщений: 24
Регистрация: 23.3.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 19.927
Возраст: 40



Здравствует.

Делаю скрипт для игры, и возникла проблема
Код

while 1 == 1 do

local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)

  if a > 80   then     --нашли
        wait (1000)
        hw.mouse.left (453, 1018  ,  "abs")   --удар
   else

       --  while a > 80 do
          repeat
            wait (500)
            hw.mouse.left (514, 1020  ,  "abs")       ---подняли
            wait (1000 + math.random (250))
            hw.mouse.left (823, 1020 ,  "abs")          --ищу
            local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
            local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)
          until  a > 80
       --  end

  end

end



Все хорошо проходить с repeat, только при нахождение объекта лишний раз выполняется команда
Код

wait (500)
            hw.mouse.left (514, 1020  ,  "abs")       ---подняли
            wait (1000 + math.random (250))
            hw.mouse.left (823, 1020 ,  "abs")          --ищу
            local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
            local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)


я предполагал поставить while, так как с начало проверяется условие, но у меня в таком случае не работает вообще все
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.3.2023, 21:48
Сообщение #2


***********

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



local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
либо кавычки и двойные \\ либо квадратные скобки. В данный момент у вас кавычки не признак строки, а часть строки

Проблема в том, что local переменые уничтожаются перед каждым новым витком цикла. Соответственно присвоив "а" некоторе значение внутри цикла вы не можете проверить ее значение в следующем витке. Решение простое - объявите некоторые переменные вне блока while и сохраняйте в них результат поиска.


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


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1162
Пользователь №: 15.246
Возраст: 25



у тебя по коду не понятно что именно ты хочешь
Код

if a > 80 then     --если нашел картинку
    wait (1000)
    hw.mouse.left (453, 1018  ,  "abs")   --удар
else --если не нашел
    --while a > 80 do противоречит условию если не нашел
    repeat
        wait (500)
        hw.mouse.left (514, 1020  ,  "abs")       ---подняли
        wait (1000 + math.random (250))
        hw.mouse.left (823, 1020 ,  "abs")          --ищу
        local path = [["C:\uopilot\pic\pic_target_red.bmp"]] --это лишнее
        local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)
    until  a > 80
       --  end

  end

чтоб два раза не выполняло можешь вместо repeat записать так
Код
while findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do

и мне интересно что такое hw.mouse.left? объясните кто знает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.3.2023, 22:15
Сообщение #4


***********

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



Цитата
и мне интересно что такое hw.mouse.left? объясните кто знает

Это ардуинка.


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


**

Neophyte
Сообщений: 24
Регистрация: 23.3.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 19.927
Возраст: 40



Цитата(nykep @ 12.3.2023, 22:04) *

у тебя по коду не понятно что именно ты хочешь

чтоб два раза не выполняло можешь вместо repeat записать так
Код
while findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do

и мне интересно что такое hw.mouse.left? объясните кто знает


Ишу картинку,
Код
local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)

если картинка есть бью,
Код
 hw.mouse.left (453, 1018  ,  "abs")   --удар

пока картинка не исчезнет.

или ищу эту картинку скилом

Код
hw.mouse.left (823, 1020 ,  "abs")          --ищу
local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)


до тех пор пока не найду, как найду возвращаюсь бить

Код
while findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do

а как считывает программа, там же просто говорится что while имеет такое значение, т.е. что 0, что 45, 100.... оно просто будет т.е. сравнение есть ли картинка или нет не будет, или я не совсем понял.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 13.3.2023, 13:35
Сообщение #6


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1162
Пользователь №: 15.246
Возраст: 25



Код

local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)
while findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do --не выйдет из цикла пока в зоне поиска есть картинка
    wait (1000)
    hw.mouse.left (453, 1018  ,  "abs")   --удар
end

точность поиска стоит 80, значит будет выполнять пока видит картинку попадающую в эту точность
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kdv
сообщение 13.3.2023, 15:31
Сообщение #7


**

Neophyte
Сообщений: 24
Регистрация: 23.3.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 19.927
Возраст: 40



Цитата(nykep @ 13.3.2023, 13:35) *

Код

local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
local arr, a = findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5)
while findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do --не выйдет из цикла пока в зоне поиска есть картинка
    wait (1000)
    hw.mouse.left (453, 1018  ,  "abs")   --удар
end

точность поиска стоит 80, значит будет выполнять пока видит картинку попадающую в эту точность

а если картинки нету ....по тому , для того я внес эту операцию в else и он будет ее искать пока эта картинка не появится на экране, только когда появляется у меня она еше раз повторно ищет когда использую repeat, а с while не получается
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 13.3.2023, 19:19
Сообщение #8


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1162
Пользователь №: 15.246
Возраст: 25



Код

local path = [["C:\uopilot\pic\pic_target_red.bmp"]]
while 1 do
    while not findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do
        wait (500)
        hw.mouse.left (514, 1020  ,  "abs")       ---подняли
        wait (1000 + math.random (250))
        hw.mouse.left (823, 1020 ,  "abs")          --ищу
    end
    while findimage (761, 3 , 943, 53 , {path}, 2, 80, 1, 5) do --не выйдет из цикла пока в зоне поиска есть картинка
        wait (1000)
        hw.mouse.left (453, 1018  ,  "abs")   --удар
    end
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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