|
|
|
Findimage (lua) |
|
|
YuzveR |
14.2.2024, 13:22
|
Registred
Сообщений: 5
Регистрация: 14.2.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.717
Возраст: 37
|
Доброго времени суток. Вопрос по Findimage: Имеется несколько сохранённых картинок. Например, звезда, треугольник, квадрат и т.д. Возможно ли объединить все искомые картинки в один массив? Например: Код --lua local handle = findwindow ("Безымянный") local startX, startY, endX, endY = 0, 0, 1920, 1080 local path = [[C:\\Image]] local arr = {"blackstar","bluestar","green","orangearr","purple","redstar"} for i=1, #arr do local image, a = findimage (startX, startY, endX, endY, {path .. "\\" .. arr[i] .. ".bmp"}, 2) end Вообще могу прописать к каждой картинке findimage {blackstar.bmp} и т.д., но скрипт очень большой выходит ) Пытаюсь написать выполнение цикла до тех пор, пока все 6(например) картинок не будут кликнуты и не пропадут после клика. И другой вопрос, реально ли реализовать прохождение тестирования через скрипт? Например, Есть вопрос "2+2 = ?" и несколько вариантов ответов "1, 2, 3, 4". И он идёт первым. Через findimage поиск картинки с вопросом и клик на ответ. Но как реализовать, если этот вопрос будет в середине или в конце тестирования? Скрипт же идёт сверху вниз по порядку. То есть это условие появления findimage может возникнуть в любой момент.
|
|
|
|
DarkMaster |
14.2.2024, 18:09
|
Модератор UOPilot
Сообщений: 9.570
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28534
Пользователь №: 11.279
|
Цитата Возможно ли объединить все искомые картинки в один массив? Например: а что с кодом не так? визуально вроде все живо. Если порядок появления не известен - завернуть for в while 1 do end Цитата Но как реализовать, если этот вопрос будет в середине или в конце тестирования? Перебирать все вопросы и тыкать нужный ответ.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
YuzveR |
16.2.2024, 12:37
|
Registred
Сообщений: 5
Регистрация: 14.2.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.717
Возраст: 37
|
Добрый день, нужна помощь. Где-то ошибся, но не могу разобраться где: Код local arrr, ar = findimage (startX, startY, endX, endY, {opredeliteou}, 2) while (arrr) do local brrr, br = findimage (startX, startY, endX, endY, {ou}, 2) while (brrr) do kleft (brrr[1][1], brrr[1][2]) wait (100) brrr, br = findimage (startX, startY, endX, endY, {ou}, 2) end local crrr, cr = findimage (startX, startY, endX, endY, {prodoljit}, 2) while (crrr) do kleft (crrr[1][1], crrr[1][2]) wait (100) crrr, cr = findimage (startX, startY, endX, endY, {prodoljit}, 2) end end local drrr, dr = findimage (startX, startY, endX, endY, {opredeliteod}, 2) while (drrr) do local errr, er = findimage (startX, startY, endX, endY, {od}, 2) while (errr) do kleft (errr[1][1], errr[1][2]) wait (100) errr, er = findimage (startX, startY, endX, endY, {od}, 2) end local crrr, cr = findimage (startX, startY, endX, endY, {prodoljit}, 2) while (crrr) do kleft (crrr[1][1], crrr[1][2]) wait (100) crrr, cr = findimage (startX, startY, endX, endY, {prodoljit}, 2) end end
Находит на экране "ОпределитеОУ" - жмёт "ОУ", затем "Продолжить". Следом появляется "ОпределитеОД", но всё равно жмёт "ОУ", вместо "ОД". Где я не закрыл условие?
|
|
|
|
Madeus |
16.2.2024, 14:36
|
Apprentice
Сообщений: 292
Регистрация: 19.11.2019 Группа: Пользователи Наличность: 9277
Пользователь №: 19.451
Возраст: 32
|
Если внутри цикла while проверить еще раз наличие картинки ОпределитеОУ, то вы выйдите из цикла. Код local arrr, ar = findimage (startX, startY, endX, endY, {opredeliteou}, 2) while (arrr) do local brrr, br = findimage (startX, startY, endX, endY, {ou}, 2) while (brrr) do kleft (brrr[1][1], brrr[1][2]) wait (100) brrr, br = findimage (startX, startY, endX, endY, {ou}, 2) end local crrr, cr = findimage (startX, startY, endX, endY, {prodoljit}, 2) while (crrr) do kleft (crrr[1][1], crrr[1][2]) wait (100) crrr, cr = findimage (startX, startY, endX, endY, {prodoljit}, 2) end arrr, ar = findimage (startX, startY, endX, endY, {opredeliteou}, 2) end Либо использовать break для выхода из любого цикла, но я не знаю ваших условий.
|
|
|
|
YuzveR |
19.2.2024, 13:26
|
Registred
Сообщений: 5
Регистрация: 14.2.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.717
Возраст: 37
|
Цитата(cirus @ 8.3.2023, 20:40) Для примера 2 скрипта, нужно понимать разницу: Код --lua if true then local c = 123 -- локальная переменная, существует только в этом блоке if end end
log(c) -- nil переменной не существует Код --lua local c if true then c = 123 end
log(c) Правильно понимаю, что переменная, присвоенная до начала цикла действует на весь скрипт? А переменная присвоенная уже в цикле - действует до окончания цикла? И какой скрипт будет корректней для такого типа, и будут ли действовать все три? Код local aa = findimage() while (aa) do тело_кода end local ab = findimage() while (ab) do тело_кода end local ac = findimage() while (ac) do тело_кода end
или Код while (aa) do local aa = findimage() тело_кода1 end while (aa) do local aa = findimage() тело_кода2 end while (aa) do local aa = findimage() тело_кода3 end
или Код local aa = findimage() local ab = findimage() local ac = findimage() while (aa) do тело_кода end while (ab) do тело_кода end while (ac) do тело_кода end
|
|
|
|
YuzveR |
19.2.2024, 15:10
|
Registred
Сообщений: 5
Регистрация: 14.2.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.717
Возраст: 37
|
Это понятно. Для варианта №2, если, например, будет: Код while (aa) do local aa = findimage(X) --присвоили, нашли X kleft (aa[1][1], aa[1][2]) --клик, картинка пропала aa = findimage(X) -- проверка отсутствия X end -- цикл закончился while (aa) do local aa = findimage(Y) --присвоили, нашли Y kleft (aa[1][1], aa[1][2]) --клик, картинка пропала aa = findimage(Y) -- проверка отсутствия Y end -- цикл закончился while (aa) do local aa = findimage(Z) --присвоили, нашли Z kleft (aa[1][1], aa[1][2]) --клик, картинка пропала aa = findimage(Z) -- проверка отсутствия Z end
Я к тому, чтобы не плодить много локалов. У меня просто перевалило за 200 и скрипт просто написал ошибку что их более 200 )
|
|
|
|
DarkMaster |
19.2.2024, 15:35
|
Модератор UOPilot
Сообщений: 9.570
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28534
Пользователь №: 11.279
|
Цитата Я к тому, чтобы не плодить много локалов. У меня просто перевалило за 200 и скрипт просто написал ошибку что их более 200 ) Там вроде 63 позволяет. Используйте массивы, либо функциями это решайте. Суть в том, что в одной области видимости не должно быть больше 63. в вашем случае можно что-то вроде: Код local cycle = function(image_name) local aa = findimage(image_name) while aa do kleft(aa[1][1], aa[1][2]) aa = findimage(image_name) end end
for i = 1, #image_arr do cycle(image_arr[i]) end
Что-то типа такого. И он всех их переберет. Если универсальная функция не подходит, т.к. нужно делать индивидуальную обработку каждого случая, то придется делать массив функций. Но я так подозреваю, что проще при необходимости доп параметры в функцию передать. Сообщение отредактировал DarkMaster - 19.2.2024, 15:35
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|