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

3 страниц V < 1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Поиск скученности пикселей, Готовый скрипт
dron4938
сообщение 16.12.2021, 13:20
Сообщение #21


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



(IMG:https://i.ibb.co/7WC8b3z/Screenshot-9.png)
Не очень понял. Радиус ищет только вниз, т.е область полумесяца?
или и вверх тоже?

И какой пиксель находится первым? Тот что указан в строке поиска первым? Или тут без разницы.
Если я укажу зеленый первым, то все равно первый найдет фиолетовый?
(IMG:https://i.ibb.co/Vm71Wjr/Screenshot-11.png)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.12.2021, 15:21
Сообщение #22


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



Цитата
Если я укажу зеленый первым, то все равно первый найдет фиолетовый?

Да. Нет разницы в каком порядке они указаны.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 17.12.2021, 5:39
Сообщение #23


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(cirus @ 30.6.2018, 17:45) *

Можно дописать нужные действия. Тут 2 варианта.
1. Дописать нужные действия в этом скрипте на луа.
2. Запускать другой скрипт, который можно написать хоть на луа, хоть на языке пилота.
Введение в синтаксис Lua
Список функций (Lua)
Код
--lua
require("find_heap_pixel")  -- загрузка функции

-- таблица с параметрами поиска
find = {0, 0, 1920, 1080,      -- координаты поиска
radius = 100,                 -- радиус разброса пикселей
min_pixel_count = 5, max_pixel_count = 1000,   -- минимальное и максимальное количество всех пикселей в группе
color = {9896023, 35807},                      -- цвет или несколько цветов
min_pixel_color = {0, 0},             -- минимально количество пикселей каждого цвета
deviation = {5, 5},                       -- погрешность оттенка для каждого цвета
min_color = 2}                        -- минимальное количество цветов, которые должны присутствовать в группе

while 1 do  -- выполнять бесконечно
    local a, group = find_heap_pixel(find)     -- вызов функции

    if group and #group > 0 then   -- если моб найден
        kleft (group[1][1], group[1][2])     -- клик по нему

        -- тут нужные действия, например:
        start_script(1, "wait")    -- запустить скрипт 1 и ждать когда он завершит работу
    end
end

Скрипт найдет моба, кликнет по нему и запустит скрипт1 и будет ждать когда скрипт1 завершит работу, допустим убьёт моба.

(IMG:https://i.ibb.co/zJ3LtMP/222.png)
функция в бесконечном цикле жрет 30 фпс в игре. Как вылечить это?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 17.12.2021, 11:17
Сообщение #24


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



Цитата
функция в бесконечном цикле жрет 30 фпс в игре. Как вылечить это?

Никак, это же не функция для распознавания текста.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Мащекус
сообщение 14.2.2023, 20:28
Сообщение #25


*

Registred
Сообщений: 4
Регистрация: 13.2.2023
Группа: Пользователи
Наличность: 0
Пользователь №: 20.486



Всем привет!
Ребятушки, а в Lua вообще отдельно Findcolor есть, как в пилоте?
Просто скрипт огонь (автору огромный респектос). Мне бы в условие Findcolor вставить, чтобы понять когда тормозить клики... т.к. даже при радиусе 5 пикселей, иногда не попадает в нужную область с первого раза.

--lua
require("find_heap_pixel")

local find = {0, 0, 1920, 1080,
radius = 5,
min_pixel_count = 0, max_pixel_count = 1000,
color = {870911, 8411405},
min_pixel_color = {0, 0},
deviation = {0,5},
min_color = 2}

local a, group = find_heap_pixel(find)

if group then
for i = 1, #group do
double_kleft (group[i][1], group[i][2])
wait (500)

----- ВОТ ТУТ БЫ ВСТАВИТЬ Findcolor и break, для понимания, что по мобу попали, на нем появился таргет

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


****

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



https://forum.uokit.com/index.php?showtopic...dcolor&st=0
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 19.2.2023, 1:08
Сообщение #27


****

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



эта функция слишком сложна для меня(хотя разбираться в ней нет необходимости), а если искать скученность вот так
Код

--lua
local x, y, x1, y1 = 0, 0, 0, 0
while 1 == 1 do
    local a = findcolor(0, 0, 1920, 1080, "(12225101-12291882)", '%arr', 2, 1, 0)  --найти один пиксель или сколько захотите
    if a then
        x = arr[1][1] - 10
        y = arr[1][2] - 10
        x1 = arr[1][1] + 10
        y1 = arr[1][2] + 10
        local b = findcolor(x, y, x1, y1, "(12225101-12291882)", '%arr', 2, -1, 0)  --проверить область 20х20 вокруг найденного пикселя
        if b > 5 then    --если в квадрате больше 5 нужных цветов то

        end
    end
end

насколько велика разница?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.2.2023, 9:22
Сообщение #28


***********

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



просто и элегантно. рекомендую делать getimage в данном случае чтобы дергать изображение только один раз.

Сообщение отредактировал DarkMaster - 19.2.2023, 9:22


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


***********

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



Цитата
x = arr[1][1] - 10
y = arr[1][2] - 10
x1 = arr[1][1] + 10
y1 = arr[1][2] + 10

В минус смысла делать нет - там мы уже проверили. Т.е. должно быть:
Код

    x = arr[1][1]
    y = arr[1][2]
    x1 = arr[1][1] + 20
    y1 = arr[1][2] + 20

Результат будет в любом случае, но так он будет быстрее во многих ситуацих.


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


****

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



Цитата(DarkMaster @ 19.2.2023, 10:55) *

В минус смысла делать нет - там мы уже проверили. Т.е. должно быть:
Код

    x = arr[1][1]
    y = arr[1][2]
    x1 = arr[1][1] + 20
    y1 = arr[1][2] + 20

Результат будет в любом случае, но так он будет быстрее во многих ситуацих.

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


****

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



наверное по Х все таки надо отнимать, например если объект имеет какую-нибудь такую форму
(IMG:https://i.ibb.co/dKnQT2r/klyak.png)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.2.2023, 17:18
Сообщение #32


***********

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



Пожалуй соглашусь.


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


****

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



Цитата(DarkMaster @ 19.2.2023, 9:22) *

просто и элегантно. рекомендую делать getimage в данном случае чтобы дергать изображение только один раз.

не могу разобраться с getimage, взял пример с вики
Код

address, width, height, length = getimage (100, 100, 1000, 1000)
log (address) -- адрес в памяти
log (width)   -- ширина изображения
log (height)  -- высота изображения
log (length)  -- длина строки в байтах

какие бы значения я не записал в getimage, в логах всегда пишет ширину 1921 и длину 1081.
После поиска на форуме решил что findcolor в запомненной картинке должен выглядеть так
Код

local a = findcolor(0, 0, width, height, 12345, '%arr', address, 1, 0)

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


***********

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



пример фунции под имидж.
Я не могу дать никакой гарантии по поводу еденичек пограничных. В плане того нужно считать с 0 или с 1 и заканчивать x2-x1 (+1-1 или 0?).
Код
local my_find = function(x1, y1, x2, y2, image, method, acc, count, deviation, edge)
    local img, h, w, l = getimage(x1, y1, x2, y2, method)
    ext.black_and_white(img, h, w, l, edge)
    local arr, err = findimage(0, 0, x2-x1, y2-y1, image, method, acc, count, deviation)
    return arr, err
end


Цитата
какие бы значения я не записал в getimage, в логах всегда пишет ширину 1921 и длину 1081.

гетимидж условно создает квадрат малевича размером с приложение или рабочий стол, потом в левый верхний угол закидывает тот кусок изображения который запрашивался. По сути баг.


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


****

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



с размерами понятно, спасибо, хочу только уточнить - адрес нужно записывать туда где тип поиска и в findcolor и в findimage?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.2.2023, 22:12
Сообщение #36


***********

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



да


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


****

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



в общем у меня че то не получается, нарисовал в пэинте толстую красную линию, у меня задача сначала найти ближайшую точку, потом проверить скопление вокруг нее, перед запуском открываю картинку на весь экран без каких либо рамок
Код
--lua
local gip, min, x, y, x1, x2, y1, y2 = 0, 0, 0, 0, 0, 0, 0, 0
while 1 == 1 do
    fog = getimage (179, 84, 1049, 651)
    local A = findcolor(0, 0, 870, 567, 2366701, '%arr', fog, -1, 0)
    if A then
        for i = 1, A do   -- поиск ближайшей точки
            gip = math.sqrt((960 - arr[i][1])^2 + (520 - arr[i][2])^2)
            if i == 1 then
                min = gip
            end
            if min >= gip then
                min = gip
                x = arr[i][1]
                y = arr[i][2]
            end
        end
        --move (x + 179, y + 84)  --до сюда всё работает как надо указывает на ближайшую точку
        x1 = x - 10
        y1 = y - 10       --это в случае с ближайшей точкой тоже нужно, так как она может быть в самом низу
        x2 = x + 10
        y2 = y + 10
        local B = findcolor(x1, y1, x2, y2, 2366701, '%arr2', fog, -1, 0) -- не может найти ни одной точки, как будто что-то со смещением, но не могу понять что.
                                   -- Визуально и по логам указывает на ту область(x1, y1, x2, y2) где была найдена эта ближайшая точка.
                                                                   -- Если поменять +-10 на +-50 тогда что-то находит, но ясности это не вносит
        if B and B > 3 then
            x = x + 179
            y = y + 84
            move (x, y)
            wait (1000)
        end
        deleteimage (fog)
    end
end


Сообщение отредактировал nykep - 20.2.2023, 14:57
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 20.2.2023, 8:41
Сообщение #38


***********

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



Код

local ffi=require "ffi"
local rmem=ffi.cast

local ext = {}
ext.color_to_rgb = function(c)
    local r,g,b
    b = math.floor(c/65536)
    g = math.floor(c/256-b*256)
    r = c-b*256*256-g*256
    return r, g ,b
end


ext.pix_painting = function(img, x, y, color)
    local r, g, b = ext.color_to_rgb(color)
    local pix = rmem("unsigned char*", img[1])
    pix[ img[4]*y + x*3 ]  = b
    pix[ img[4]*y + x*3+1] = g
    pix[ img[4]*y + x*3+2] = r
end

Попробуй покрасить углы и сохранить изображение качестве отладки.
img - в данном случае массив {address, h, w, l}
сохранять обычным saveimage

Сообщение отредактировал DarkMaster - 20.2.2023, 14:49


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


****

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



блин, это для меня темный лес. Единственное, могу сказать что saveimage сохраняет картинку слева сверху обрезанную по координатам указанным в getimage, а справа вниз весь оставшийся экран независимо от того какие конечные координаты я напишу. Но по-моему проблема не в этом, потому что этот скрипт выше я делю пополам, сначала выполняю первый поиск и всё нормально, потом из него беру полученную область для второго поиска, записываю в отдельный скрипт тот же самый getimage и этот второй поиск с координатами которые получил в первом и никакого толку. Может я какую то ошибку делаю, но у меня уже терпения не хватает, если с getimage всё так сложно я пожалуй отложу его до лучших времен
Код
--lua
    fog = getimage (200, 100, 1000, 500)
    local A = findcolor(0, 0, 800, 300, 2366701, '%arr', fog, -1, 0)
    if A then
        x1 = arr[1][1] - 10
        y1 = arr[1][2] - 10
        x2 = arr[1][1] + 10
        y2 = arr[1][2] + 10
        log (x1, y1, x2, y2)
    end
deleteimage (fog)


Код
--lua
    fog = getimage (200, 100, 1000, 500)
    local B = findcolor(60, 5, 80, 25, 2366701, '%arr2', fog, -1, 0)
    if B and B > 2 then
        move (arr2[1][1] + 200, arr2[1][2] + 100)
    end
deleteimage (fog)

второй скрипт начинает находить по мере уменьшения начального Х = 60, но со смещением на величину этого Х вправо и правильно указывает мышью при начальном Х = 0, че с этим делать я сообразить не могу, может тогда в getimage вообще нету смысла в этом случае? А и еще в результате всех сохранений через saveimage у меня ни с того ни с сего одна картинка получилась без каких либо черных квадратов и смещений в верхний левый угол и размером точно как указывал, почему не знаю и повторить не смог.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 20.2.2023, 19:01
Сообщение #40


****

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



Попробуйте брать getimage с привязанного окна, обычно это помогает взять картинку без бага с черной областью или же брать абсолютные координаты.
Код
--lua
local handle = findwindow('Paint')
if not handle then
  log('Окно не найдено')
end

fog = getimage(200, 100, 1000, 500, handle[1]][1])
-- fog = getimage(200, 100, 1000, 500, 'abs')
local B = findcolor(60, 5, 80, 25, 2366701, '%arr2', fog, -1, 0)
if B and B > 2 then
  move (arr2[1][1] + 200, arr2[1][2] + 100)
end
deleteimage (fog)
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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