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

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


**********

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



Скрипт позволяет находить объекты различной формы по нескольким цветам.
Файл с функцией распаковать и положить рядом с exe пилота.
find_heap_pixel, Версия 4.0
Прикрепленный файл  find_heap_pixel4.zip ( 2,58 килобайт ) Кол-во скачиваний: 460

Минимальная версия пилота 2.41 http://uopilot.uokit.com/. Запускать пилот от администратора.
Функция принимает таблицу с параметрами поиска.
Передаваемая таблица:
Код
find = {0, 0, 1920, 1080,      -- координаты поиска (через запятую можно указать шаг поиска, если требуется, по умолчанию шаг 1 1)
        radius = 10,    -- радиус разброса пикселей
        min_pixel_count = 15, max_pixel_count = 1000,   -- минимальное и максимальное количество всех пикселей в группе
        color = {63232, 4727553, 10213092},                  -- цвет или несколько цветов
        min_pixel_color = {0, 0, 0},             -- минимально количество пикселей каждого цвета (необязательный параметр, по умолчанию 0)
        deviation = {2, 0, 1},                       -- погрешность оттенка для каждого цвета (необязательный параметр, по умолчанию 0)
        min_color = 2}                        -- минимальное количество цветов, которые должны присутствовать в группе

Код
find = {0, 0, 1920, 1080,    
        x = 10, y = 15, deltaX = 0,      -- размер искомого объекта и смещение области поиска (необязательный параметр)
        min_pixel_count = 15, max_pixel_count = 1000,
        color = {63232,  "84235-86027", "R(11)+G(73-80)+B(1)"},                  
        min_pixel_color = {0, 0, 0},            
        deviation = {2, 0, 1},                    
        min_color = 2}

Функция возвращает 2 параметра: количество пикселей и массив с данными о группах.
Массив содержит:
Код
КоординатаX    КоординатаY    Всего_пикселей в группе_1    Количество_пикселей_первого_цвета    Второго_цвета и т. д
КоординатаX    КоординатаY    Всего_пикселей в группе_2    Количество_пикселей_первого_цвета    Второго_цвета и т. д

Координаты X и Y это центр группы.

Версия 4.0
1. Исправен баг.

Версия 3.0:
1. Исправлен небольшой баг. Возвращалась таблица даже если группа не найдена, теперь если группа пикселей найдена вторым аргументом возвращает таблицу, иначе nill.

Версия 2.0:
Добавлено:
1. Цвет можно указывать в виде диапазона "84235-86027" и по каналам "R(11)+G(73-80)+B(1)". Если какой-то канал не указан, то он не проверяется.
2. Погрешность в цвете (deviation) может быть не целым числом. Разделитель точка, например: 1.5 - погрешность 1.5%.
3. Вместо радиуса объекта можно указать его размеры X и Y.
4. Если указан размер объекта X и Y можно сместить область поиска. deltaX (необязательный параметр, по умолчанию 0) обозначает на сколько пикселей сместить область поиска по оси X относительно первого найденного пикселя. Максимальное смещение +-X / 2.
Картинка для пояснения
Прикрепленное изображение

Примеры использования (возможно цвета придётся указать свои, в разных браузерах цвет может отличаться):
Открыть картинку, запустить скрипт.
Пример 1
Прикрепленное изображение
Код
--lua
require("find_heap_pixel")  -- загрузка функции

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

log ("clear") log ("mode compact") log ("open", 0, 700, 400, 300)
time = os.clock()
local a, group = find_heap_pixel(find)     -- вызов функции
log ("Всего найдено пикселей: " .. a)
log ("Затрачено времени: " .. string.format("%.3f", os.clock() - time) .. " мсек")
if group then
    for i = 1, #group do
        log (i .. "      " .. table.concat(group[i], " ", 1, 2))
        move (group[i][1], group[i][2])
        wait (500)
    end
end

Пример 2
Прикрепленное изображение
Код
--lua
require("find_heap_pixel")

local find = {0, 0, 1920, 1080,
        radius = 50,
        min_pixel_count = 20, max_pixel_count = 1000,
        color = {3289082},
        min_pixel_color = {0},
        deviation = {1},
        min_color = 1}

local find2 = {0, 0, 1920, 1080,
        radius = 50,
        min_pixel_count = 10, max_pixel_count = 100,
        color = {16183289, 11762371},
        deviation = {1, 1},
        min_color = 1}

log ("clear") log ("mode compact") log ("open", 0, 700, 400, 300)
time = os.clock()

local a, group = find_heap_pixel(find)
log ("Всего найдено пикселей: " .. a)
log ("Затрачено времени: " .. string.format("%.3f", os.clock() - time) .. " мсек")
if group then
    for i = 1, #group do
        log (i .. "      " .. table.concat(group[i], " ", 1, 2))
        move (group[i][1], group[i][2])
        wait (500)
    end
end

time = os.clock()
local b, group2 = find_heap_pixel(find2)
log ("Всего найдено пикселей: " .. b)
log ("Затрачено времени: " .. string.format("%.3f", os.clock() - time) .. " мсек")
if group2 then
    for i = 1, #group2 do
        log (i .. "      " .. table.concat(group2[i], " ", 1, 2))
        move (group2[i][1], group2[i][2])
        wait (500)
    end
end

Пример 3
Прикрепленное изображение
Код
--lua
require("find_heap_pixel")

local find = {0, 0, 1920, 1080,
        radius = 45,
        min_pixel_count = 50, max_pixel_count = 1000,
        color = {7590904, 14870765},
        min_pixel_color = {0, 0},
        deviation = {2,2},
        min_color = 2}

log ("clear") log ("mode compact") log ("open", 0, 700, 400, 300)
time = os.clock()

local a, group = find_heap_pixel(find)
log ("Всего найдено пикселей: " .. a)
log ("Затрачено времени: " .. string.format("%.3f", os.clock() - time) .. " мсек")
if group then
    for i = 1, #group do
        log ("Группа " .. i .. ", Координаты: " .. table.concat(group[i], " ", 1, 2) .. ", Пикселей в группе: " .. group[i][3])
        move (group[i][1], group[i][2])
        wait (500)
    end
end

Для подбора оптимальных цветов рекомендуется использовать Unique Colors Search

Старые версии (не актуальны):
find_heap_pixel, Версия 3.0
Прикрепленный файл  find_heap_pixel3.zip ( 2,56 килобайт ) Кол-во скачиваний: 456

find_heap_pixel, Версия 2.0
Прикрепленный файл  find_heap_pixel2.zip ( 2,54 килобайт ) Кол-во скачиваний: 394

find_heap_pixel, Версия 1.0
Прикрепленный файл  find_heap_pixel.zip ( 1,44 килобайт ) Кол-во скачиваний: 395

Этот же скрипт на языке пилота (работает медленно)
Код
set #r2 40          //радиус разброса точек
set #min 3       //минимальное количество всех пикселей в группе
set #max 500      //максимальное количество всех пикселей в группе
init_arr %xy (1) 0 0 1920 1080                            //область поиска
init_arr %color (1) 3466222 7138805 2209471 3399657                                                         //цвета для поиска (от 1 до 5 цветов)
init_arr %m (1) 0 0 0 0 0     //минимальное количество пикселей каждого цвета с учётом % отклонения (всегда должно быть 5 чисел)
init_arr %deviat (1) 1 1 1 1 0     // % отклонения для каждого цвета (всегда должно быть 5 чисел)
set #mincol 2          //минимальное количество любого из указанных цветов (от 1 до 5)
set #timeproc 0        // время для поиска, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 цвет


set linedelay 0
log mode compact
while 1 = 1
    log clear
    set size(%result)      // уничтожить массив с прошлыми результатами поиска
    call heap %xy %color %m %deviat #r2 #min #max #mincol #timeproc
    if  size(%result) > 0                       // если найдено хотя бы 1 группа
        //save_array %result C:\resultarray.txt       // массив с результатами поиска
        log Всего найдено size(%result) групп из #pixel пикселей.
        log
        for #i 1 size(%result)
            log Группа #i --- из %result [#i 3] пикселей    %result [#i 4]  %result [#i 5]  %result [#i 6]  %result [#i 7] %result [#i 8]
            log Начальные координаты группы:   %result [#i 1] %result [#i 2]
            log
        end_for

        // Вывод в hint (можно убрать), если рабочее окно находится не в левом верхнем углу монитора будет отображать со смещением
        set #timeout 1000      // сколько времени отображать hint
        call hint %result size(%result) #size1 #group #timeout
        set #group 0
        set #size1 0
        proc hint %result #size #size1 #group #timeout
            set #size1 #size1 + 1
            set #group #group + 1
            if  #size = #size1
                while 1 = 1 and timer < #timeout
                    hint (16 clRed %result [#size1 1] %result [#size1 2] (#group))
                    wait 100
                end_while
            else
                hint (16 clRed %result [#size1 1] %result [#size1 2] (#group))
                call hint %result #size #size1 #group #timeout
            end_if
        end_proc
        //
    end_if
end_while
end_script

// процедура поиска
proc heap %xy %color %m %deviat #r2 #min #max #mincol #timeproc
    set #current_script current_script
    set delimiter ' '
    set #Xstart %xy[1 1]
    set #Ystart %xy[1 2]
    set #Xend %xy[1 3]
    set #Yend %xy[1 4]
    set #deviat maxx(%deviat[1])
    set #pix 0
    set #pix1 0
    set #g 0
    set size(%b)
    set size(%result)
    while size(%a) = 0 and (#timeproc > timer or #timeproc = 0)
        set #a findcolor(#Xstart #Ystart #Xend #Yend (%color[1]) %a 2 -1 #deviat)
        wait 10
    end_while
    set #pixel.#current_script #a
    if  #a > 0
        gosub rgb
        for #i 1 size(%a)
            set #g #g +1
            set #c1 0
            set #c2 0
            set #c3 0
            set #c4 0
            set #c5 0
            for #j #i size(%a)
                set #r round(point_distance(%a[#i 1] %a[#i 2] %a[#j 1] %a[#j 2]))
                if  #r < #r2
                    set #pixl #pix
                    if  %a[#j 3] >= %color[2 1] and %a[#j 3] <= %color[3 1]
                        set #c1 #c1 +1
                    else
                        if  %a[#j 3] >= %color[2 2] and %a[#j 3] <= %color[3 2]
                            set #c2 #c2 +1
                        else
                            if  %a[#j 3] >= %color[2 3] and %a[#j 3] <= %color[3 3]
                                set #c3 #c3 +1
                            else
                                if  %a[#j 3] >= %color[2 4] and %a[#j 3] <= %color[3 4]
                                    set #c4 #c4 +1
                                else
                                    if  %a[#j 3] >= %color[2 5] and %a[#j 3] <= %color[3 5]
                                        set #c5 #c5 +1
                                    end_if
                                end_if
                            end_if
                        end_if
                    end_if
                    set #pix #c1 +#c2 +#c3 +#c4 +#c5
                    if  #pixl != #pix
                        set %a[#j 4] #g
                    else
                        set %a[#j 4] 0
                    end_if
                end_if
            end_for
            init_arr %b (#g) %a[#i 1] %a[#i 2] #pix #c1 #c2 #c3 #c4 #c5
            for #i #i size(%a)
                if  %a[#i 4] = ""
                    set #i #i -1
                    break
                end_if
            end_for
        end_for
        set #z 0
        for #l 1 size(%b)
            if  %b[#l 3] >= #min and %b[#l 3] <= #max
                if  (%b[#l 4] >= %m[1 1] or %m[1 1] = 0) and (%b[#l 5] >= %m[1 2] or %m[1 2] = 0) and (%b[#l 6] >= %m[1 3] or %m[1 3] = 0) and (%b[#l 7] >= %m[1 4] or %m[1 4] = 0) and (%b[#l 8] >= %m[1 5] or %m[1 5] = 0)
                    set #z1 0
                    for #m 4 8
                        if  %b[#l #m] > 0
                            set #z1 #z1 +1
                        end_if
                    end_for
                    if  #z1 >= #mincol
                        set #z #z +1
                        init_arr %result (#z) %b[#l]
                    end_if
                end_if
            end_if
        end_for
        for #i 1 size(%result)
            for #j 1 size(%result[])
                set %result.#current_script [#i #j] %result [#i #j]
            end_for
        end_for
    end_if
    goto end

    :rgb
        for #n 1 size(%color[1])
            set #cvet %color[1 #n]
            set #a1 colortorgb(#cvet %rgb)
            set #dev 255*%deviat[1 #n]/100
            set #bmin %rgb[1 3]-#dev
            set #bmax %rgb[1 3]+#dev
            if  #bmax > 255
                set #bmax 255
            end_if
            if  #bmin < 0
                set #bmin 0
            end_if
            set #gmin %rgb[1 2]-#dev
            set #gmax %rgb[1 2]+#dev
            if  #gmax > 255
                set #gmax 255
            end_if
            if  #gmin < 0
                set  #gmin 0
            end_if
            set #rmin %rgb[1 1]-#dev
            set #rmax %rgb[1 1]+#dev
            if  #rmax > 255
                set #rmax 255
            end_if
            if  #rmin < 0
                set #rmin 0
            end_if
            set %color[2 #n] #bmin *256*256+#gmin *256+#rmin
            set %color[3 #n] #bmax *256*256+#gmax *256+#rmax
        end_for
    return

    :end
end_proc

Скрипт позволяет находить объекты различной формы по нескольким цветам. Указать можно от 1 до 5 цветов. Версия пилота 2.38 или выше.
https://youtu.be/zET6Qg9BROo

Результат из процедуры возвращается в массив %result. В первой строке массива информация по первой группе, во второй строке по второй и т. д.
%result [1 1] - координата X первой группы
%result [1 2] - координата Y первой группы
%result [1 3] - из скольких пикселей состоит первая группа
%result [1 4] - количество пикселей первого цвета
%result [1 5] - второго (если указан)
%result [1 6] - третьего
%result [1 7] - четвёртого
%result [1 8] - пятого
Количество найденных групп size(%result).
Количество найденных пикселей содержится в переменной #pixel.

set #r2 40 - радиус разброса точек, примерный размер искомого объекта в пикселях, лучше указать больше, чем меньше.
set #min 3 - минимальное количество всех пикселей в группе.
set #max 500 - максимальное количество всех пикселей в группе.
init_arr %xy (1) 0 0 1920 1080 - область поиска
init_arr %color (1) 3466222 7138805 2209471 3399657 - цвета для поиска (от 1 до 5 цветов)
init_arr %m (1) 0 0 0 0 0 - минимальное количество пикселей в группе каждого цвета с учётом deviation (всегда должно быть 5 чисел)
init_arr %deviat (1) 1 1 1 1 0 - погрешность оттенка в % для каждого цвета (всегда должно быть 5 чисел)
set #mincol 2 - минимальное количество любого из указанных цветов (от 1 до 5), например, в %color указано 4 цвета, чтобы пиксели считались одной группой, как минимум 2 цвета должны присутствовать.
set #timeproc 0 - время для поиска цветов (вычисления в это время не входят), если 0 не выйдет из процедуры пока не найдётся хотя бы 1 цвет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 15.1.2017, 2:02
Сообщение #2


***********

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



Цитата
Скрипт работает не слишком быстро. Нужно делать функцию.

Скоро будешь переписывать, чтобы работал быстро(тссс).


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


**********

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



Перенесено в первый пост.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 15.8.2017, 11:01
Сообщение #4


***********

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



Производительность сравнивал?


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


**********

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



Цитата
Производительность сравнивал?

Сравнение не совсем корректное, т. к. изменён принцип поиска групп. Но все-таки, 57 секунд на языке пилота и тоже самое 180 мсек на lua.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 30.6.2018, 15:03
Сообщение #6


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Здравствуйте ваш скрипт отлично работает но при попытки дописать к нему нажатие скилов и тюд выдает ошибку это возможно или нада писать 2й который который запускался после этого? тока после move прописал строчку на left работает нормального остальные дополнение выдают ошибку
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.6.2018, 15:34
Сообщение #7


**********

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



Скрипт, который на луа или языке пилота?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 30.6.2018, 16:40
Сообщение #8


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Цитата(cirus @ 30.6.2018, 15:34) *

Скрипт, который на луа или языке пилота?

на луа
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.6.2018, 17:45
Сообщение #9


**********

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



Можно дописать нужные действия. Тут 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 завершит работу, допустим убьёт моба.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 30.6.2018, 19:55
Сообщение #10


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Цитата(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 завершит работу, допустим убьёт моба.

все работает спасибо но с толкнулся с проблемой прописания кардинат чтоб перс не багал по всей локе как я понял он ищет с верхннего левого по низ право а с помощью ctrl+a вставляю карддинаты выдает ошибку или в луа как то подругому надо их определять
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.6.2018, 20:12
Сообщение #11


**********

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



Цитата
или в луа как то подругому надо их определять

Разница только в том что параметры указываются в скобках, через запятую. Т. е. если было kleft 100 100, то в луа kleft (100, 100).
Если имеются ввиду координаты передаваемые в функцию, то следите чтоб везде были запятые.
Цитата
чтоб перс не багал по всей локе

Если координаты перса известны, то можно находить ближайшего моба.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 1.7.2018, 14:24
Сообщение #12


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Цитата(cirus @ 30.6.2018, 20:12) *

Разница только в том что параметры указываются в скобках, через запятую. Т. е. если было kleft 100 100, то в луа kleft (100, 100).
Если имеются ввиду координаты передаваемые в функцию, то следите чтоб везде были запятые.

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

координаты локации поиска
find = {0, 0, 1920, 1080, -- координаты поиска
их когда меняю оштбку выдает как как сделать чтоб ближайщего убивал или он уже ближайщего гасит по тогму скрипту что выше в луа так поиск?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 1.7.2018, 15:09
Сообщение #13


**********

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



Цитата
когда меняю оштбку выдает

На какие меняете? И что за ошибку пишет?
Цитата
как сделать чтоб ближайщего убивал

Картинку скиньте, на которой есть перс и мобы.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 3.7.2018, 12:34
Сообщение #14


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Цитата(cirus @ 1.7.2018, 15:09) *

На какие меняете? И что за ошибку пишет?

Картинку скиньте, на которой есть перс и мобы.

вот скрин


Прикрепленные файлы
Прикрепленный файл  2018_07_03_153211.bmp ( 1,12 мегабайт ) Кол-во скачиваний: 541
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 3.7.2018, 13:10
Сообщение #15


**********

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



Обновил скрипт (в первом посте), исправлен небольшой баг. Скачайте его.
Прикрепленный файл  111.zip ( 2,5 мегабайт ) Кол-во скачиваний: 371
В архиве видео. Пример как найти координаты перса, найти координаты мобов и навести курсор на ближайшего к персу моба.
Файл с функцией распаковать и положить рядом с exe пилота, открыть картинку в пайнте и запустить скрипт. Прикрепленный файл  2018_07_03_153211.bmp ( 1,12 мегабайт ) Кол-во скачиваний: 611

Скрипт, найти ближайшего к персу моба
Код
--lua
require("find_heap_pixel")  -- загрузка функции

-- функция находит ближайшего к персу моба
-- принимает координаты перса и массив с координатами мобов
function min_distance(persX, persY, arr)
    local function distance(x1, y1, x2, y2)
       return math.sqrt((x1-x2)^2+(y1-y2)^2)
    end
    local min, minNum, dist = 9999999, -1
    for i=1, #arr do
        dist=distance(persX, persY, arr[i][1], arr[i][2])
        if dist < min then min=dist minNum=i end
    end
    return arr[minNum][1], arr[minNum][2]    -- возвращает координаты ближайшего моба
end
----------------

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

-- таблица с параметрами поиска перса
local pers = {0, 0, 1920, 1080,      -- координаты поиска
radius = 80,                 -- радиус разброса пикселей
min_pixel_count = 50, max_pixel_count = 1000,   -- минимальное и максимальное количество всех пикселей в группе
color = {4145143 , 1032191, 48127},                      -- цвет или несколько цветов
min_pixel_color = {0, 0, 0},             -- минимально количество пикселей каждого цвета
deviation = {5, 5, 5},                       -- погрешность оттенка для каждого цвета
min_color = 3}                        -- минимальное количество цветов, которые должны присутствовать в группе

local a, group = find_heap_pixel(mob)     -- вызов функции
local b, group2 = find_heap_pixel(pers)     -- вызов функции
--log (group, group2)  -- результат поиска, если nill - не найдено,  LuaTable - найдено

if group and group2 then   -- если моб и перс найдены
    local x, y = min_distance(group2[1][1], group2[1][2], group)  -- передаём в функцию координаты перса и массив с координатами мобов
    move (x, y)     -- навести курсор на моба
    -- тут нужные действия
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 6.7.2018, 11:25
Сообщение #16


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Цитата(cirus @ 3.7.2018, 13:10) *

Обновил скрипт (в первом посте), исправлен небольшой баг. Скачайте его.
Прикрепленный файл  111.zip ( 2,5 мегабайт ) Кол-во скачиваний: 371
В архиве видео. Пример как найти координаты перса, найти координаты мобов и навести курсор на ближайшего к персу моба.
Файл с функцией распаковать и положить рядом с exe пилота, открыть картинку в пайнте и запустить скрипт. Прикрепленный файл  2018_07_03_153211.bmp ( 1,12 мегабайт ) Кол-во скачиваний: 611

Скрипт, найти ближайшего к персу моба
Код
--lua
require("find_heap_pixel")  -- загрузка функции

-- функция находит ближайшего к персу моба
-- принимает координаты перса и массив с координатами мобов
function min_distance(persX, persY, arr)
    local function distance(x1, y1, x2, y2)
       return math.sqrt((x1-x2)^2+(y1-y2)^2)
    end
    local min, minNum, dist = 9999999, -1
    for i=1, #arr do
        dist=distance(persX, persY, arr[i][1], arr[i][2])
        if dist < min then min=dist minNum=i end
    end
    return arr[minNum][1], arr[minNum][2]    -- возвращает координаты ближайшего моба
end
----------------

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

-- таблица с параметрами поиска перса
local pers = {0, 0, 1920, 1080,      -- координаты поиска
radius = 80,                 -- радиус разброса пикселей
min_pixel_count = 50, max_pixel_count = 1000,   -- минимальное и максимальное количество всех пикселей в группе
color = {4145143 , 1032191, 48127},                      -- цвет или несколько цветов
min_pixel_color = {0, 0, 0},             -- минимально количество пикселей каждого цвета
deviation = {5, 5, 5},                       -- погрешность оттенка для каждого цвета
min_color = 3}                        -- минимальное количество цветов, которые должны присутствовать в группе

local a, group = find_heap_pixel(mob)     -- вызов функции
local b, group2 = find_heap_pixel(pers)     -- вызов функции
--log (group, group2)  -- результат поиска, если nill - не найдено,  LuaTable - найдено

if group and group2 then   -- если моб и перс найдены
    local x, y = min_distance(group2[1][1], group2[1][2], group)  -- передаём в функцию координаты перса и массив с координатами мобов
    move (x, y)     -- навести курсор на моба
    -- тут нужные действия
end


1 вопрос он выполняет действия 1 раз а фунции ю на повтор вставляю выдает ошибку как в пред скрипте
while 1 do -- выполнять бесконечно
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.7.2018, 11:33
Сообщение #17


**********

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



Кроме while 1 do надо ещё end добавлять.
Код
while 1 do
    -- тут действия, которые выполняются в цикле
    wait (1)  -- пауза чтобы не грузить процесор
end

код
Код
--lua
require("find_heap_pixel")  -- загрузка функции

-- функция находит ближайшего к персу моба
-- принимает координаты перса и массив с координатами мобов
function min_distance(persX, persY, arr)
    local function distance(x1, y1, x2, y2)
       return math.sqrt((x1-x2)^2+(y1-y2)^2)
    end
    local min, minNum, dist = 9999999, -1
    for i=1, #arr do
        dist=distance(persX, persY, arr[i][1], arr[i][2])
        if dist < min then min=dist minNum=i end
    end
    return arr[minNum][1], arr[minNum][2]    -- возвращает координаты ближайшего моба
end
----------------

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

-- таблица с параметрами поиска перса
local pers = {0, 0, 1920, 1080,      -- координаты поиска
radius = 80,                 -- радиус разброса пикселей
min_pixel_count = 50, max_pixel_count = 1000,   -- минимальное и максимальное количество всех пикселей в группе
color = {4145143 , 1032191, 48127},                      -- цвет или несколько цветов
min_pixel_color = {0, 0, 0},             -- минимально количество пикселей каждого цвета
deviation = {5, 5, 5},                       -- погрешность оттенка для каждого цвета
min_color = 3}                        -- минимальное количество цветов, которые должны присутствовать в группе

while 1 do
    local a, group = find_heap_pixel(mob)     -- вызов функции
    local b, group2 = find_heap_pixel(pers)     -- вызов функции
    --log (group, group2)  -- результат поиска, если nill - не найдено,  LuaTable - найдено

    if group and group2 then   -- если моб и перс найдены
        local x, y = min_distance(group2[1][1], group2[1][2], group)  -- передаём в функцию координаты перса и массив с координатами мобов
        move (x, y)     -- навести курсор на моба

        -- тут нужные действия
        wait (3000)
    end
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rus2146
сообщение 6.7.2018, 12:36
Сообщение #18


**

Neophyte
Сообщений: 15
Регистрация: 8.1.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.284
Возраст: 22



Цитата(cirus @ 6.7.2018, 11:33) *

Кроме while 1 do надо ещё end добавлять.
Код
while 1 do
    -- тут действия, которые выполняются в цикле
    wait (1)  -- пауза чтобы не грузить процесор
end

код
Код
--lua
require("find_heap_pixel")  -- загрузка функции

-- функция находит ближайшего к персу моба
-- принимает координаты перса и массив с координатами мобов
function min_distance(persX, persY, arr)
    local function distance(x1, y1, x2, y2)
       return math.sqrt((x1-x2)^2+(y1-y2)^2)
    end
    local min, minNum, dist = 9999999, -1
    for i=1, #arr do
        dist=distance(persX, persY, arr[i][1], arr[i][2])
        if dist < min then min=dist minNum=i end
    end

    return arr[minNum][1], arr[minNum][2]    -- возвращает координаты ближайшего моба
end
----------------

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

-- таблица с параметрами поиска перса
local pers = {0, 0, 1920, 1080,      -- координаты поиска
radius = 80,                 -- радиус разброса пикселей
min_pixel_count = 50, max_pixel_count = 1000,   -- минимальное и максимальное количество всех пикселей в группе
color = {4145143 , 1032191, 48127},                      -- цвет или несколько цветов
min_pixel_color = {0, 0, 0},             -- минимально количество пикселей каждого цвета
deviation = {5, 5, 5},                       -- погрешность оттенка для каждого цвета
min_color = 3}                        -- минимальное количество цветов, которые должны присутствовать в группе

while 1 do
    local a, group = find_heap_pixel(mob)     -- вызов функции
    local b, group2 = find_heap_pixel(pers)     -- вызов функции
    --log (group, group2)  -- результат поиска, если nill - не найдено,  LuaTable - найдено

    if group and group2 then   -- если моб и перс найдены
        local x, y = min_distance(group2[1][1], group2[1][2], group)  -- передаём в функцию координаты перса и массив с координатами мобов
        move (x, y)     -- навести курсор на моба

        -- тут нужные действия
        wait (3000)
    end
end


ясно спсибо

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


*

Registred
Сообщений: 1
Регистрация: 27.5.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.329
Возраст: 40



ФУНКЦИЯ ПЕРЕМЕЩАЕТ КУРСОР В ТОЧКУ 1,1 ЭКРАНА

Воспользовался данным скриптом, лог выдает

23:31:24 4 (autosaved_4.txt, 0): LuaTable LuaTable
23:31:40 4 (autosaved_4.txt, 0): LuaTable LuaTable

т.е. находит? но мышь в верхний левый угол экрана передвигает.



--lua
require("find_heap_pixel") -- загрузка функции

-- функция находит ближайшего к персу моба
-- принимает координаты перса и массив с координатами мобов
function min_distance(persX, persY, arr)
local function distance(x1, y1, x2, y2)
return math.sqrt((x1-x2)^2+(y1-y2)^2)
end
local min, minNum, dist = 9999999, -1
for i=1, #arr do
dist=distance(persX, persY, arr[i][1], arr[i][2])
if dist < min then min=dist minNum=i end
end
return arr[minNum][1], arr[minNum][2] -- возвращает координаты ближайшего моба
end
----------------

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

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

local a, group = find_heap_pixel(mob) -- вызов функции
local b, group2 = find_heap_pixel(pers) -- вызов функции
log (group, group2) -- результат поиска, если nill - не найдено, LuaTable - найдено

if group and group2 then -- если моб и перс найдены
local x, y = min_distance(group2[1][1], group2[1][2], group) -- передаём в функцию координаты перса и массив с координатами мобов
move (x, y) -- навести курсор на моба
-- тут нужные действия
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.5.2019, 15:07
Сообщение #20


**********

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



Версия пилота какая? Попробуйте 2.40, в 2.41 менялся синтаксис findcolor.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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