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

> Нужен совет по findcolor
Topdeck
сообщение 30.5.2018, 5:39
Сообщение #1


*

Registred
Сообщений: 5
Регистрация: 29.7.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.556
Возраст: 21



Добрый день! Сижу занимаюсь созданием не сложного бота-кликера, в одной изометрической старой онлайн игрушке через findcolor.
Опишу задумку, заменил и вырезал все лишние текстуры на экране, мобы представляют из себя грубо говоря квадратики одного цвета, после того как экран почищен от квадратиков(мобов) бот двигается по указаным цветным точкам далее (условный круг), если замечены мобы они снова выпиливаются.
Идеальный бой - это одиночный клик на моба, ожидание его спилки несколько секунд и после его смерти(исчезания модельки) клик на ближайшего следующего с минимальной задержкой.

Пример моего скрипта, кликает на нужный цвет активируя авто-атаку тем самым ( без передвежений, только на проклик мобов):

set mouseclickdelay 50
set #a findcolor (0, 0 1024, 768 (3613183) %arr 2 -1 3)
if #a > 0
move_smooth %arr [1,1] %arr [1,2]
kleft %arr [1,1] %arr [1,2]
wait 5000
end_if

Столкнулся с несколькими проблемами, которые связаны друг с другом. Не знал даже как сформулировать чтобы воспользоваться поиском.

Первое - это то, что мобы умирают за какой-то рандомный промежуток времени(криты,миссы плюс преодоление расстояния до цели) и никак не угадаешь подходящую задержку через команду wait, если сделать быстро, то персонаж будет метаться и выходит куча недобитых мобов, если медленно, то не эффективно и очень палевно. Хочу сделать здесь так чтобы, если он начал бить какого-то конкретного врага делал это до конца и только после переключался на другого с минимальной задержкой.
(Здесь, была мысль проверять цвет по текущими координатами курсора, но что-то у меня так и не получилось реализовать)

Второе - это то, что через findcolor мне необходимо, чтобы убивались в первую очередь, мобы которые находятся рядом с персонажем(условный центр окна), у меня же ситуация такая, что есть пачка из нескольких мобов убивается один и перс бежит бить моба в противоположном углу экрана, поскольку цвет у всех одинаковый. Уменьшение зоны поиска, желанного результата не даёт, т.к всёравно даже в меньшей зоне может кликнуть на дальний объект.

Ищу советы по решению моих вопросов)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 31.5.2018, 11:24
Сообщение #2


***********

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



Цитата
get mouse_pos

Использовать не рекомендую, вдруг мышь сдвинется. Когда вы делаете клик, то вы же знаете уже координаты, где будет мышь, зачем вам заново получать ее координаты?
Цитата
getcolor просто не работает со значениями #x #y

Для начала он через пробел get color, либо можно использовать просто color()
Цитата
Примеры очень сильно бы всё для меня упростили.

Мне тоже, поэтому я попрошу вас привести вашу реализацию через findcolor, которая не работает для ожидания смерти моба.

Цитата
можно почитать подробнее о реализации подобной конструкции

А что о ней можно читать?) Все на виду, бери да пиши =)
Код

// Область поиска
set #xMin 100
set #xMax 200
set #yMin 300
set #yMax 400

// Текущая позиция
set #xCur 122
set #yCur 364

// Размер шага
set #xStep 10
set #yStep 10

// Рассчет стартовых координат.
// Чтобы текущая позиция оказалась
// в центре одной из областей.
set #xStart #xCur - #xStep / 2 - ((#xCur - #xStep / 2 - #xMin) / #xStep + 1) * #xStep
set #yStart #yCur - #yStep / 2 - ((#yCur - #yStep / 2 - #yMin) / #yStep + 1) * #yStep

set #i 1
for #x #xStart #xMax #xStep
    for #y #yStart #yMax #yStep
        // Создание сетки для поиска.
        set %field[#i 1] #x
        set %field[#i 2] #y
        set %field[#i 3] #x + #xStep - 1
        set %field[#i 4] #y + #yStep - 1

        // Рассчет дистанции от текущей позиции
        set #xAvg (%field[#i 1] + %field[#i 3]) / 2 + 1
        set #yAvg (%field[#i 2] + %field[#i 4]) / 2 + 1
        set %field[#i 5] round(point_distance(#xAvg #yAvg #xCur #yCur))

        set #i #i + 1
    end_for
end_for

sort_array %field 5

for #i 1 size(%field) 1
    log %field[#i 1] %field[#i 2] %field[#i 3] %field[#i 4] %field[#i 5]
    // Тут финдколор set #a findcolor (%field[#i 1] %field[#i 2] %field[#i 3] %field[#i 4] ....
    // if #a > 0
    //   break // нашли и прерываем
    // end_if
end_for


Сообщение отредактировал DarkMaster - 31.5.2018, 13:09


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


*

Registred
Сообщений: 5
Регистрация: 29.7.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.556
Возраст: 21



Цитата(DarkMaster @ 31.5.2018, 11:24) *

Мне тоже, поэтому я попрошу вас привести вашу реализацию через findcolor, которая не работает для ожидания смерти моба.


Свой вариант по клику через findcolor я указал в самом первом посте

Код
set mouseclickdelay 50
set #a findcolor (0, 0 1024, 768 (3613183) %arr 2 -1 3) //
if #a > 0
move_smooth %arr [1,1] %arr [1,2]
kleft %arr [1,1] %arr [1,2]
wait 5000
end_if


Камера находится сверху, моб, допустим в правой части экрана, когда я на него нажму через findcolor персонаж побежит к нему, на каком-то радиусе он спулится и побежит на встречу, но поскольку активируется авто-атака персонаж его рано или поздно убьёт в мили, но позиция моба (квадратика) уже измениться и будет где-то под персонажем в центре экрана, необходимо чтобы программа понимала когда моб пропал и только после этого начала искать остальных. Просто прописанная задержка через wait не стабильная и очень не удобная, т.к расстояние до мобов разное и время их спила тоже, плюс к этому часть мобов уже может саагриться атаковать персонажа в мили. Мышка при этом не двинется, т.к я адаптировал всё это под виртуальную машину.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



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

 

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