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

 
Ответить в эту темуОткрыть новую тему
> 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.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29636
Пользователь №: 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
Сообщений: 260
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1776
Пользователь №: 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.735
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29636
Пользователь №: 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
Сообщений: 260
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1776
Пользователь №: 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
Сообщений: 260
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1776
Пользователь №: 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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dunkel
сообщение 20.2.2025, 20:22
Сообщение #9


***

Novice
Сообщений: 87
Регистрация: 20.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.296
Возраст: 30



Можно ли как то повторить условия while определённое количество раз?

Кто знает подскажите на примера этого простинького скрипта. Что мне надо дописать чтобы он срабатывал например 5 раз при соблюдении условий и потом прерывался?

while 770, 27 4208180
sendex {Spacebar}
wait 4000
end_while

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 21.2.2025, 0:12
Сообщение #10


*****

Journeyman
Сообщений: 317
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 10840
Пользователь №: 19.451
Возраст: 32



Добавить цикл for внутри цикла while.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dunkel
сообщение 21.2.2025, 0:47
Сообщение #11


***

Novice
Сообщений: 87
Регистрация: 20.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.296
Возраст: 30



Кто разбирается может мне объяснить на примере моего скрипта что я привёл выше, пожалуйста?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 23.2.2025, 7:21
Сообщение #12


****

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



напиши просто
Код
if 770, 27 4208180
    repeat 5
        sendex {Spacebar}
        wait 4000
    end_repeat
end_if
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dunkel
сообщение 23.2.2025, 17:08
Сообщение #13


***

Novice
Сообщений: 87
Регистрация: 20.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.296
Возраст: 30



Да я так и сделал через «репит». До этого я закосячил и скрипт работал не так и я думал что это команда не годиться.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

- Текстовая версия | Версия для КПК Сейчас: 29.6.2025, 0:52
Designed by Nickostyle
Loading...