Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Roland on May 20, 2019, 10:33:46 PM
-
Добрый день, простой код:
$check = 0
WHILE($check = 0)
GETSCREEN
If (PXL(267, 36) ! 10751)
SCREENSHOTEX(100, 35, 280, 45, "Мой скриншот_", 1)
$check = 1
WAITMS(50)
ELSE
WAITMS(50)
END_IF
END_CYC
по сути чекается полоска хп. Когда хп падает до определенного уровня - делаю скрин всей полоски.
Проблема в том что я ставлю контрольную точку в начале (вместо x=267 - х=150) или в конце - скрин делается примерно на одном и том же уровне хп. Не могу понять где проблема :(
-
Возможно, что разница в 117 пикселей в вашем случае и есть - примерно один уровень ХП.
SCREENSHOTEX(100, 35, 280, 45, "Мой скриншот_", 1)
здесь как раз вся полоска хп - 100->280
я условно ставил проверку пикселя в интервале 150...267 и срабатывание все равно в одном и том же месте
Наиболее вероятно, что цвет всегда не равен 10751 - в результате вы всегда сразу получаете скрин текущего состояния полоски, независимо от контрольной точки.
я это предполагал.
запускаю скрипт, иду тестить на мобах. Хп постепенно проседает и скрин чекается ВСЕГДА в одном и том же месте. То есть как-то работает все-таки.
-
Ну, так у тебя же скрин есть, на нём и проверь цвет в проверяемой точке. Только не примерно, а именно под PXL, потом смотри соседние цвета.
И покажи хоть пару скринов своей полоски.
-
чтобы поставить условие PXL я навожу курсор на точку полоски в игре и записываю x,y,clr.
скрин только вечером смогу (
-
Мало ли случаев. Привязка, масштаб win не 100%. При этом можно брать координаты не в том месте.
-
полоска хп примерно такая
https://yadi.sk/i/sxD9WlvGgAmepw (https://yadi.sk/i/sxD9WlvGgAmepw)
Привязка, масштаб win не 100%. При этом можно брать координаты не в том месте.
записанные координаты в SCREENSHOTEX совпадают с фактическими.
Масштаб нормальный
-
Контролировать уровень полоски лучше всего с помощью подсчета пикселов определенного цвета
$count = PXLCOUNT(10,10, 100,100, 255)
LOGWRITE ($count) // смотрим в логе количество пикселов
IF($count < 100)
// действие если уровень ниже заданного
END_IF
Чтобы выронить цвет полоски применяем цветокоррекцию 7 уровень
GETSCREEN
COLORMODE(7)
-
Контролировать уровень полоски лучше всего с помощью подсчета пикселов определенного цвета
$count = PXLCOUNT(10,10, 100,100, 255)
LOGWRITE ($count) // смотрим в логе количество пикселов
IF($count < 100)
// действие если уровень ниже заданного
END_IF
Чтобы выронить цвет полоски применяем цветокоррекцию 7 уровень
GETSCREEN
COLORMODE(7)
попробую, спасибо
-
скриншот в формате .jpg ничего не даёт, а вот пара несжатых скриншотов в разных состояниях полоски, сильно поможет пониманию возникших у вас проблем.
в том и дело что независимо от условия - скрин полоски примерно одинаков, залил бмп
https://yadi.sk/i/t7t-T0wTI93Ibg (https://yadi.sk/i/t7t-T0wTI93Ibg)
https://yadi.sk/i/HPwcDU-EKyiygA (https://yadi.sk/i/HPwcDU-EKyiygA)
-
Высота цифр статичная в 7 пикселей, сама строка вроде бы тоже на одном месте, а вот на счёт разделителя я не уверен, но он один и всегда по центру. Так что можешь анализировать полосу здоровья высотой 1 пиксель и на всю ширину индикатора здоровья. Можно еще воспользоваться распознаванием чисел, выбирай сам
-
хорошо видно, что ваши изображения уже были предварительно сжаты, повторная перекодировка ничего в данном случае не меняет.
Если скачать, bmp-шки не сжатые, всё нормально.
Вот только цвета 10751 на них НЕТ!
-
Вот только цвета 10751 на них НЕТ!
смотрел цвет в кликере курсором.
если такого цвета нет - то скрин должен сработать сразу же. Правильно? Но такого не происходит.
-
в-общем PXLCOUNT работает, все спасибо
но почему PXL не пошел - непонятно )
------------------------
спрошу тут - а как зажать клавишу на несколько секунд?
keyDown(#Q)
waitms(4000)
keyUp(#Q)
не пашет
-
Ты так и не сказал используешь привязку или нет.
Зажатия не работают в привязке.
Если это какой нибудь эмулятор андроида, то и другие проблемы могут лезть от туда.
Но указанного тобой цвета на скринах нет, можешь сам проверить. Вот скрин твоего цвета 10751..., видно что он яркий, видимо полоска подсвечивается при наведении курсора, неужели это нельзя заметить? В этом случае цвета нужно брать со скрина.
+Цвета на полоске не постоянные. Смотри скрин где я свёл слоями твои два скрина. Вот область выделенная муравьями не имеет отличий.
Как раз на второй полосе пикселей отличия довольно обширные, есть и в других местах. Составляющая красного цвета там отличается на 1 единицу. Естественно, точный поиск это определит.
Цвет может "плыть" и при изменении значения на полоске, такое часто бывает.
Используй цветокоррекцию 7 уровня и всё как рукой снимет.
$check = 0
WHILE($check = 0)
GETSCREEN(100, 35, 280, 45)
COLORMODE(7, 100, 35, 280, 45)
IF(PXL(267, 36) ! 8355839)
SCREENSHOTEX(100, 35, 280, 45, "Мой скриншот_", 1)
$check = 1
END_IF
WAITMS(50)
END_CYC
-
Ты так и не сказал используешь привязку или нет.
Зажатия не работают в привязке.
Если это какой нибудь эмулятор андроида, то и другие проблемы могут лезть от туда.
нет, привязки не использую пока. Это десктопная игра. Но в ней есть возможность оконного режима с разрешением полного экрана (1920*1080). Может в этом причина что зажатие не работает?
про цвета: может это особенности рендера такие... я взяли другие координаты (36 строку и 446 цвет) и по ней PXL не отрабатывает, а PXLCOUNT вполне точно работает. Про COLORMODE я понял на будущее.
еще вопрос: после GETSCREEN я сколько угодно раз могу обращаться к этому снимку для обработки разных участков?
GETSCREEN по координатам работает существенно быстрее полного?
-
еще вопрос: после GETSCREEN я сколько угодно раз могу обращаться к этому снимку для обработки разных участков?
Да. Если там не было изменений или они не нужны.
GETSCREEN по координатам работает существенно быстрее полного?
Быстрее. На разных машинах по разному. На старых очень заметно.
И от разрешения общего зависит. Это всё только по надобности, если нужно ловить очень быстро, или желательно не грузить лишним процессор.