Помощь - Поиск - Пользователи - Календарь
Полная версия: findimage Lua.
UoKit.com Форумы > Кликер > UO Pilot
Санёк.R.
Добрый день. Хочу написать скрипт с 0. Кто сможет помогите пожалуйста. Буду писать по очериди что надо.
Это есть.
Код

--lua
math.randomseed(os.clock())
local handle = findwindow('кнут')
if handle then
  workwindow(handle[1][1])
  showwindow(handle[1][1])
  windowpos(1, 1, 1366, 768)
else
  log('Окно не найдено')
end
log 'clear' log 'mode compact'
log ("open", 10, 563, 290, 190) -- открыть окно лога в координатах , с размером
log ("АС")

--есть: Работает не очень как хочу но это ПОТОМ.
local startX, startY, endX, endY = 0, 0, 1366, 768  -- координаты поиска
local path = [[C:\Newfindi]] -- путь к картинкам

local image = {"Сундук", "Красный", "Синий", "Зелёный", "Отдать", "Забрать"}   -- Именами картинок
hint ("Всего картинок для поиска " .. #image)
for i= #image, 1, -1  do   --  for i=1, #image do  -- цикл для поиска картинок
    local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2)  -- поиск картинки
    if a > 0 then    -- if  arr then
       kleft (arr[1][1], arr[1][2])
       wait (310 + math.random (100))
    end
end


НАДО:
Сделать Ждал появления Красной картинки на экране и нашёл её в папке где картинки. Это как пример while color(639, 165,"abs") ~= 1331506 do -- ЖДАТЬ
Это первое что надо решить. Потом всё остальное.Спасибо.
DarkMaster
Цитата
for i= #image, 1, -1 do -- for i=1, #image do -- цикл для поиска картинок

Обратный порядок чем-то обусловлен? Закоменченное for i=1, #image do пробще и как-то логичнее.

Цитата
НАДО:
Сделать Ждал появления Красной картинки на экране и нашёл её в папке где картинки.

Что есть нашел картинку в папке? Ну если мы ищем на экране "ваза.bmp", то в папке будет "ваза.bmp".
По ожиданию:
Код

while color(x, y) ~= your_color do
    wait(100)
end


Если задача стоит в случае верного цвета дополнительно проверить наличие картинки (так делать не рекоменду., т.к. только замедлите скрипт, обычно проще по ресурсам сразу искать конечную картинку за исключением случаев очень большой зоны поиска и большой картинки):
Код

while not (color(x, y) == your_color and findimage(...)) do
    wait(100)
end
Санёк.R.
Обратный порядок чем-то обусловлен? Закоменченное for i=1, #image do пробще и как-то логичнее.

for i= #image, 1, -1 do -- for i=1, #image do -- цикл для поиска картинок. Нет просто учусь и пробавал и этот вариант. Спасибо
Demych1
Аналогичная проблема: нужно дождаться появления определенной картинки на экране и кликнуть по ней, и ждать ее снова. Сделал так:

while_not #a > 0
wait 2000
set #a FindImage (100 100 1920 1080 (E:\Картинки\Нашход.bmp) %arr 2 50 20 15)
end_while
Kleft %arr [1 1] %arr [1 2]

Все нормально-ждет потом ее нажимает, если скрипт остановить и снова запустить, тоже ждет и только потом жмет. Проблема кода скрипт без остановки повторяется то ожидания нет, идет исполнение каждой строки и клик в ранее установленные координаты. Как сделать чтоб в зацикленном скрипте тоже работало.
Санёк.R.
Цитата(Demych1 @ 6.11.2022, 11:47) *

Аналогичная проблема: нужно дождаться появления определенной картинки на экране и кликнуть по ней, и ждать ее снова. Сделал так:

while_not #a > 0
wait 2000
set #a FindImage (100 100 1920 1080 (E:\Картинки\Нашход.bmp) %arr 2 50 20 15)
end_while
Kleft %arr [1 1] %arr [1 2]

Все нормально-ждет потом ее нажимает, если скрипт остановить и снова запустить, тоже ждет и только потом жмет. Проблема кода скрипт без остановки повторяется то ожидания нет, идет исполнение каждой строки и клик в ранее установленные координаты. Как сделать чтоб в зацикленном скрипте тоже работало.


Не знаю сам только учусь. А так
while_not #a > 0
wait 2000
end_while
set #a FindImage (100 100 1920 1080 (E:\Картинки\Нашход.bmp) %arr 2 50 20 15)
Kleft %arr [1 1] %arr [1 2]
end_while
Demych1
Цитата(Санёк.R. @ 6.11.2022, 12:02) *

Не знаю сам только учусь. А так
while_not #a > 0
wait 2000
end_while
set #a FindImage (100 100 1920 1080 (E:\Картинки\Нашход.bmp) %arr 2 50 20 15)
Kleft %arr [1 1] %arr [1 2]
end_while


нет не работает: Не могу найти начало цикла: 'While
Demych1
Цитата(Demych1 @ 6.11.2022, 11:47) *

Аналогичная проблема: нужно дождаться появления определенной картинки на экране и кликнуть по ней, и ждать ее снова. Сделал так:

while_not #a > 0
wait 2000
set #a FindImage (100 100 1920 1080 (E:\Картинки\Нашход.bmp) %arr 2 50 20 15)
end_while
Kleft %arr [1 1] %arr [1 2]

Все нормально-ждет потом ее нажимает, если скрипт остановить и снова запустить, тоже ждет и только потом жмет. Проблема кода скрипт без остановки повторяется то ожидания нет, идет исполнение каждой строки и клик в ранее установленные координаты. Как сделать чтоб в зацикленном скрипте тоже работало.


Решил: требуется добавить шестую строку строку:
set #a 0

Все работает и в цикле теперь.
DarkMaster
Demych1, пишите сразу на луа. В данный момент нет причин начинать писать на старом синтаксисе.
Санёк.R.
while not (color(x, y) == your_color and findimage(...)) do
wait(100)
end
Куда не ставлю не выходит у меня. Вот написал простой скрипт чтоб понятней было что хочу . Всё по парядку работает как надо.только надо сократить и правельно сделать всё в findimange.Если не трудно помогите или отавлю таким рабочим но не красивым.

Код

::start::
local startX, startY, endX, endY = 0, 0, 1366, 768  -- координаты поиска
local path = [[C:\Newfindi]] -- путь к картинкам

while color(715, 396,"abs") ~= 1914709 do -- ЖДАТЬ  НАДО Что бы findimange Было.
wait(500 + math.random(150))
end

-- БЛОК КАРТИНОК ПРЕДМЕТОВ.
local image = {"книга", "клыки", "коты"} -- ИМЕНА КАРТИНОК.
  hint ("Всего картинок для поиска " .. #image)
    for i=1, #image do  -- цикл для поиска картинок
local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2)  -- поиск картинки
    if  arr then
kleft (arr[1][1], arr[1][2])
   wait (230 + math.random (100))
end
end

После клика по картинки выезжает табло со словами.
-- БЛОК КАРТИНОК НАДПИСЕЙ.
   wait (230 + math.random (100))
local image = {"открыть", "опусташить", "вскрыть"} -- ИМЕНА СЛОВ.
  hint ("Всего картинок для поиска " .. #image)
    for i=1, #image do  -- цикл для поиска картинок
local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2)  -- поиск картинки
    if  arr then
kleft (arr[1][1], arr[1][2])
   wait (1110 + math.random (170))
end
end

local image = {"череп"} --
  hint ("Всего картинок для поиска " .. #image)
    for i=1, #image do  -- цикл для поиска картинок
local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2)  -- поиск картинки
    if  arr then
   wait (210 + math.random (100))
log('Череп')
goto start
end
end
while color(715, 396,"abs") ~= 1914709 do -- ЖДАТЬ  НАДО Что бы findimange Было.
wait(500 + math.random(150))
end
Ниже бругие блоки срипта.
goto start
Madeus
Цитата(Санёк.R. @ 6.11.2022, 20:51) *

while not (color(x, y) == your_color and findimage(...)) do
wait(100)
end

Если правильно понял что ты хочешь
Код
repeat
  image1 =  findimage(startX, startY, endX, endY, {path .. "\\" .. your_image .. ".bmp"}, 2)  
until image1
Санёк.R.
Цитата(Madeus @ 7.11.2022, 10:53) *

Если правильно понял что ты хочешь
Код
repeat
  image1 =  findimage(startX, startY, endX, endY, {path .. "\\" .. your_image .. ".bmp"}, 2)  
until image1


Спасибо. Попробую.
DarkMaster
Если проблема осталась - сообщите, поможем.

// Пожалуйста, форматируйте код (отступы) для нормального всприятия.
Санёк.R.
Спасибо Всем. Ошибка найдена, проблема решена, всё работает как надо. По подсказке Cirus я выбрал этот вариант кода может кому пригодится.

local startX, startY, endX, endY = 0, 0, 1366, 768 -- координаты поиска
local path = [[W:\Картинки\Зелёный.bmp]] -- путь к картинкам

while findimage(startX, startY, endX, endY, {path}, 2) == nil do
wait (300 + math.random (200))
log('Ждать')
end
Zenogiasu
Прошу прощения за нубский вопрос, но не подскажете нубасику как делать findimage в луа? Ато в списке функций на сайте отсутствует таковая для луа.
nykep
Цитата(Zenogiasu @ 3.12.2022, 4:14) *

Прошу прощения за нубский вопрос, но не подскажете нубасику как делать findimage в луа? Ато в списке функций на сайте отсутствует таковая для луа.

https://uopilot.tati.pro/index.php?title=Findimage_(Lua)
Zenogiasu
Цитата(nykep @ 3.12.2022, 4:51) *

Блин, ошибся)) я имел в виду Финдколор. Финдколор это замечательно и это спасение, если комп не тянет поиск мощных картинок в играх с норм графой.
Интересует именно поиск цвета в области с возможностью указать погрешность и кол-во пикселей, а не просто ИФ-Цвет.
Остап Бендер
Цитата(Zenogiasu @ 3.12.2022, 5:22) *

Блин, ошибся)) я имел в виду Финдколор. Финдколор это замечательно и это спасение, если комп не тянет поиск мощных картинок в играх с норм графой.
Интересует именно поиск цвета в области с возможностью указать погрешность и кол-во пикселей, а не просто ИФ-Цвет.

Читай темы тут много таких образцов для Колор. А про findimage старинный, слабый бук всё тянет тестирую на таком.
DarkMaster
там есть "фишки"
Код

close = {} -- Обязательно дожен быть глобальын. НЕ local
local stat = findcolor(303, 291, 417, 392, 1, 1, "(0xC0E9F0-0xC0E9F9)", '%close',2,100,100)
Санёк.R.
Может кому пригодится новичкам как я. Подсказка cirus.

--lua
log 'clear' log 'mode compact'
log ("open", 10, 593, 290, 185)
log ("Бои")

local startX, startY, endX, endY = 387, 40, 838, 282 -- координаты ТАБЛО ПОБЕДА.
local path = [[W:\Надписи\победа.bmp]] -- надпись ПОБЕДА.

local startX2, startY2, endX2, endY2 = 422, 490, 1065, 621 -- СУНДУК с ОРУЖИЕМ.
local path2 = [[W:\Картинки]]
local image = {"блок","нож","щит","топор"} -- ИМЕНА КАРТИНОК: УДАРЫ.

local Win = 0
while Win == 0 do -- пока значение переменной равно 0
for i=1, #image do
local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки победа
if arr then -- если найдена
log ("Победа!!!")
Win = 1 -- присвоить переменной значение 1
break -- выход из цикла поиска картинок
end

local arr, a = findimage (startX2, startY2, endX2, endY2, {path2 .. "\\" .. image[i] .. ".bmp"}, 2, 80, 1, 3)
if arr then
kleft (arr[1][1], arr[1][2])
wait (930 + math.random (300))
end
end

if Win == 1 then break end -- если значение переменной равно 1, то выход из цикла while
wait (310 + math.random (300))
end
Zenogiasu
Цитата(Остап Бендер @ 3.12.2022, 8:26) *

Читай темы тут много таких образцов для Колор. А про findimage старинный, слабый бук всё тянет тестирую на таком.

финдимаге может больше чем сама игра жрать при поиске банального поплавка для рыболовного бота
поэтому приходится финдколором выкручиваться по умному
DarkMaster
Производительность очень сильно зависит от размера области и размера изображения. Так изображение 5x5 в области 100x100 будет находиться в 16 раз быстрее, чем 10x10 в области 200x200.
Мащекус
Нужна помощь - понимаю логику написания, но не до конца понимаю отдельные моменты в работе Lua.

Задача:
Пока ждем картинку1, ищем картинку2 или 3. После нахождения картинки1, проверяем, нашлась ли картинка2 или 3.

Мой код:

Код

--lua

local startX, startY, endX, endY = 0, 0, 1920, 1080

local path = [["F:\путь\картинка1.bmp"]]
while not findimage (startX, startY, endX, endY, {path}, 2) do
        local path1 = [[F:\путь]]
        local image = {"картинка2", "картинка3"}
        for i=1, #image do                    
            local arr, c = findimage (startX, startY, endX, endY, {path1 .. "\\" .. image[i] .. ".bmp"}, 2, 70, 2, 2)
        end
end

-- после появления картинки1, проверяем, нашлась ли картинка2 или 3 (то есть берем переменную из предыдущего цикла)
if c then        
        local x = (1727 + math.random (39))
        local y = (965 + math.random (15))
        move (x, y)
end
cirus
Цитата
но не до конца понимаю отдельные моменты в работе Lua.

Для примера 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)
nykep
а почему здесь {path1 .. "\\" .. image[i] .. ".bmp"} двойной слэш? это получается F:\путь\\картинка2.bmp. Это верная запись?
cirus
Цитата
а почему здесь {path1 .. "\\" .. image[i] .. ".bmp"} двойной слэш?

Escape-последовательность
Код
--lua
log("C:\\folder1\\folder2")


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.