|
|
  |
FindImage, не находит по картинке |
|
|
mb6467606 |
8.4.2025, 14:45
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Всем привет, сильно не ругайтесь так как я только учусь. С помощью шаблона с вашего форума - https://forum.uokit.com/index.php?showtopic...mp;hl=FindimageСделал картинку и пытаюсь ее найти в игре чтоб сделать по ней клик но ничего не получается (IMG: style_emoticons/default/sad.gif) У картинки левый верхний угол с красным пикселем UoPilot работает от имени администратора Windows 10 Pro UoPilot v 2.39 ( потому что скрипт для создания картинки работает только на этой версии ) монитор 2K+второй Full HD (игра в окне 1920 1080) возможно из за этого что-то не работает сам скрипт Код // Привязка Ctrl + A на окне игры перед запуском
set #startX 0 set #startY 0 set #endX 1920 set #endY 1080
set $path "E:\screen_test\1.bmp" set %image target
// Можно настроить смещение, чтобы клик был в центр картинки (если она 20x20) set findoffsetx 10 set findoffsety 10
:main set #result FindImage (#startX #startY #endX #endY ($path%image.bmp) %coords 2 80 1 5)
if #result > 0 msg Найдена картинка в координатах X = %coords[1 1], Y = %coords[1 2] left %coords[1 1] %coords[1 2] // клик по центру картинки wait 1000 // подождать секунду else msg Картинка не найдена end_if
wait 3000 // пауза 3 секунды goto main // повтор поиска
Помогите кто может. 
|
|
|
|
mb6467606 |
8.4.2025, 18:31
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 8.4.2025, 18:05)  значение #result в лог выведите
18:30:35 2 (autosaved_2.txt, 17): msg - Значение #result: -4 18:30:37 2 (autosaved_2.txt, 24): msg - Картинка не найдена Переделал скрипт и теперь ошибка 0, я так понимаю не находит картинку вообще Код // Привязка Ctrl + A на окне игры перед запуском
// Координаты области поиска (для 2K монитора) set #startX 0 set #startY 0 set #endX 2560 set #endY 1440
// Путь к изображению set $path "E:\screen_test\1.bmp"
// Смещение курсора при клике (если надо кликать в центр) set findoffsetx 10 set findoffsety 10
:main
// Лог: область поиска msg Проверка области: X = #startX:#endX, Y = #startY:#endY
// Поиск изображения (режим 2 = RGB, допуск 80%, без маски, шаг 1) set #result FindImage (#startX #startY #endX #endY ($path) %coords 2 80 0 1)
// Лог: результат msg Значение #result: #result
if #result > 0 msg Найдена картинка в координатах X = %coords[1 1], Y = %coords[1 2] left %coords[1 1] %coords[1 2] wait 1000 else msg Картинка не найдена end_if
wait 3000 goto main
19:01:17 4 (autosaved_4.txt, 24): msg - Значение #result: 0 19:01:29 4 (autosaved_4.txt, 31): msg - Картинка не найдена 19:01:34 4 (autosaved_4.txt, 18): msg - Проверка области: X = #startX:#endX, Y = #startY:#endY 19:01:35 4 (autosaved_4.txt, 24): msg - Значение #result: 0 19:04:13 4 (autosaved_4.txt, 18): msg - Проверка области: X = #startX:#endX, Y = #startY:#endY 19:04:15 4 (autosaved_4.txt, 24): msg - Значение #result: 0 19:04:16 4 (autosaved_4.txt, 31): msg - Картинка не найдена
|
|
|
|
mb6467606 |
10.4.2025, 14:50
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 10.4.2025, 5:08)  Привязку точно делаете? А если координаты задать от 0 и до конца эркана найдет?
привязку конечно делаю как задать от 0 до конца экрана на совсем понимаю как это сделать это разве не от 0 до конца экрана? set #startX 0 set #startY 0 set #endX 2560 set #endY 1440
|
|
|
|
DarkMaster |
10.4.2025, 20:24
|
          
Модератор UOPilot
Сообщений: 9.720
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29431
Пользователь №: 11.279

|
Цитата это разве не от 0 до конца экрана? Это зависит от того как у вас установлены мониторы. Оно может начинаться не с нуля, может быть отрицательным. Если делаете привязку, то это влиять не будет. Если открыть изображение в пэинте, то находит? Сделайте скриншот и из игры и вставьте его в пэинт, привяжите к нему, попробуйте найти изображение. В качестве теста так же рекомендую попробовать снизить точность, скажем до 60% и увеличить deviation до 8% По кодам ошибок. -4 - это кривой путь, искомая картинка не была найдена на диске, 0 - искало, но не нашло. Если только учитесь, то очень настоятельно рекомендую сразу изучать Lua синтаксис. Команды те же, возможностей больше, нет очень многих проблем которые не видно первым взглядом. Не тратьте время на старый синтаксис.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
mb6467606 |
10.4.2025, 21:51
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 10.4.2025, 20:24)  Это зависит от того как у вас установлены мониторы. Оно может начинаться не с нуля, может быть отрицательным. Если делаете привязку, то это влиять не будет. Если открыть изображение в пэинте, то находит? Сделайте скриншот и из игры и вставьте его в пэинт, привяжите к нему, попробуйте найти изображение.
В качестве теста так же рекомендую попробовать снизить точность, скажем до 60% и увеличить deviation до 8%
По кодам ошибок. -4 - это кривой путь, искомая картинка не была найдена на диске, 0 - искало, но не нашло.
Если только учитесь, то очень настоятельно рекомендую сразу изучать Lua синтаксис. Команды те же, возможностей больше, нет очень многих проблем которые не видно первым взглядом. Не тратьте время на старый синтаксис.
все что бы не делал ничего не помогало, решил последовать вашему совету на счет Lua Все заработало картинка ищется и кликается без проблем но теперь в другом проблема, в скрипте сделал чтоб все было циклично и все время картинка искалась, поставил задержку, но она якобы полностью игнорируется и по картинке делается 5-10 кликов в секунду. сам код Код --lua local path = [["E:\screen_test\1.bmp"]] local startX, startY, endX, endY = 0, 0, 1920, 1080
while true do local arr, a = findimage(startX, startY, endX, endY, {path}, 2)
if arr then log("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
local newX = arr[1][1] - 15 local newY = arr[1][2] + 20
-- двойной клик с паузой между кликами kleft(newX, newY) wait(300) -- пауза между кликами (0.3 сек) kleft(newX, newY)
wait(2000) -- ждём 2 секунды перед следующей проверкой else wait(500) -- если не найдено — подождать 0.5 сек end end
в самом пилоте снизу ставил задержку 100000-1000000 Ms и все так же клики летят
|
|
|
|
mb6467606 |
11.4.2025, 3:47
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 11.4.2025, 3:26)  она не влияет на луа. вставляйте задержки ручками. в качестве теста попробуйте СИЛЬНО увеличить задержки в нужных вам местах. если проблема сохранится - перезагрузитесь. wait пилотовский иногда начинает косячить. есть достаточно простые способы обхода, но применять их если вы реально не столкнулись с проблемами смысла нет
сделал миллионы мс и все равно долбит в 1 точку по 7-10 раз в секунду Код --lua local path = [["E:\screen_test\2.bmp"]] local startX, startY, endX, endY = 0, 0, 1920, 1080
while true do local arr, a = findimage(startX, startY, endX, endY, {path}, 2)
if arr then log("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
local newX = arr[1][1] - 15 local newY = arr[1][2] + 20
-- двойной клик с паузой между кликами kleft(newX, newY) wait(3000000) -- пауза между кликами (0.3 сек) kleft(newX, newY)
wait(2000000) -- ждём 2 секунды перед следующей проверкой else wait(5000000) -- если не найдено — подождать 0.5 сек end end
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644 03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
|
|
|
|
mb6467606 |
12.4.2025, 0:16
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 11.4.2025, 4:42)  Код -- wait(time_to_wait) -- приостановить работу. -- -- time_to_wait - время приостановки в секундах. -- Точность до 1/1000 секунды. do local kernel32 = ffi.load("kernel32") local winmm = ffi.load("Winmm")
ffi.cdef[[ typedef unsigned int UINT; typedef UINT MMRESULT;
void Sleep(unsigned int dwMilliseconds); MMRESULT timeBeginPeriod( UINT uPeriod ); MMRESULT timeEndPeriod( UINT uPeriod ); ]]
wait = function(time_to_wait) winmm.timeBeginPeriod(1) kernel32.Sleep(time_to_wait) winmm.timeEndPeriod(1) end end
вставить в шапку скрипта с этим начали ошибки появляться вроде как сделал все через команду local interval = 15000 -- интервал между кликами (в миллисекундах) Спасибо за помощь!
|
|
|
|
mb6467606 |
12.4.2025, 1:37
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 12.4.2025, 1:31)  какие? это вообще что?
какие уже сказать не могу так как лог не сохранил а скрипт начал работать вот с такими командами Код --lua -- Функция ожидания в секундах function wait_s(seconds) local ms = math.floor(seconds * 1000) wait(ms) end
local path = [["E:\screen_test\2.bmp"]] local startX, startY, endX, endY = 0, 0, 1920, 1080 local interval = 15000 -- интервал между кликами (в миллисекундах)
local lastClickTime = 0
while true do local arr, a = findimage(startX, startY, endX, endY, {path}, 2)
if arr then local currentTime = os.clock() * 1000 -- время в миллисекундах
if currentTime - lastClickTime >= interval then local newX = arr[1][1] - 5 local newY = arr[1][2] + 70
-- двойной клик kleft(newX, newY) wait_s(0.3) kleft(newX, newY)
lastClickTime = currentTime end end
wait_s(0.2) -- цикл каждые 200 мс end
|
|
|
|
DarkMaster |
12.4.2025, 1:58
|
          
Модератор UOPilot
Сообщений: 9.720
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29431
Пользователь №: 11.279

|
Цитата local interval = 15000 -- интервал между кликами (в миллисекундах) Цитата local currentTime = os.clock() * 1000 -- время в миллисекундах Зачем это приводится к миллисекундам? Цитата -- Функция ожидания в секундах function wait_s(seconds) local ms = math.floor(seconds * 1000) wait(ms) end зачем это приводится к секундам? Цитата wait(ms) так вэйт работает или нет?
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
mb6467606 |
12.4.2025, 2:58
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 12.4.2025, 1:58)  Зачем это приводится к миллисекундам?
зачем это приводится к секундам?
так вэйт работает или нет?
работает только строка local interval = 2000 -- интервал между кликами (в миллисекундах) в нее я ставлю нужные секунды я понимаю что криво но главное добился результата буду учиться делать все правильно
|
|
|
|
mb6467606 |
12.4.2025, 13:57
|
 
Neophyte
Сообщений: 10
Регистрация: 1.4.2025 Группа: Пользователи Наличность: 2
Пользователь №: 20.943
Возраст: 21

|
Цитата(DarkMaster @ 12.4.2025, 4:13)  ???
я задал вам достаточно простые и прозрачные вопросы.
local currentTime = os.clock() * 1000 -- время в миллисекундах Функция os.clock() возвращает время в секундах, прошедшее с момента запуска скрипта, в виде числа с плавающей точкой, например: 3.456 секунд. Чтобы сравнивать это значение с интервалом ожидания (interval = 15000 — это миллисекунды), нужно перевести os.clock() в миллисекунды, т.е. умножить на 1000. С этими изменениями Wait работает
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|