Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: lokipall on December 21, 2016, 10:19:12 AM
-
Прошу заранее прощение за тупые вопросы (которые я обязательно задам) так как не программист и понимаю в этом может чуть меньше чем ничего. пытаюсь написать сейчас достаточно вменяемый и по возможности универсальный код, и что бы не доводить до белого колена грамотных людей, пробую конструкции на упрощенных вариантах, в одном из них столкнулся с непонятным в доску фактом.
1)хочу что бы программа с экрана брала область с пятью иконками и распознавало их, нумеруя в массиве, что бы эти переменные потом использовать далее. файлы прикрепил для примера но не все.
Безымянный- область для распознавания
1,2,3- варианты
и вроде работает, пока я не пытаюсь игнорировать белый фон иконок:
#name "New Script"
$a=0
$b=1
GETSCREEN (12,151,530,225)//выбираем область для анализа экрана
FOR($a, $a < 5) //цикл на номер врага с лева на право от 1 до 5
$b=1
$p[$a]=0
FOR($b, $b < 6)
IF_PICTURE_IN (12+$a*103,151,12+($a+1)*103,225, STRCONCAT("variant\",$b, ".bmp"), 16777215, 100)
WAITMS(100)
$p[$a]=$b
END_IF
END_CYC
print("враг №"$a," получает ", $p[$a]," мечей" )
END_CYC
на выходе всем дает значение 5
такой вариант работает правильно:
#name "New Script"
$a=0
$b=1
GETSCREEN (12,151,530,225)//выбираем область для анализа экрана
FOR($a, $a < 5) //цикл на номер врага с лева на право от 1 до 5
$b=1
$p[$a]=0
FOR($b, $b < 6)
IF_PICTURE_IN (12+$a*103,151,12+($a+1)*103,225, STRCONCAT("variant\",$b, ".bmp"), -1, 100)
WAITMS(100)
$p[$a]=$b
END_IF
END_CYC
print("враг №"$a," получает ", $p[$a]," меченй" )
END_CYC
распределяет все как надо, но вот фон в самой игре мне может помешать и хотелось бы разобраться в чем я так отчаянно туплю.
2) цветокорекция позволит сделать код универсальным для двух машин с одинаковой ОС, ну конечно при условии что идет привязка к окну по названию и координаты приводятся в соответствие. первый опыт показал что отснятые на одной машине скрины не подходят на второй. Да и какой показатель цветокорекции подойдет лучше
3) http://crapware.aidf.org/forum/index.php?topic=33.30 тут читал про :
Написание подпрограммы для вычисления даты
Пример создания пользовательских подпрограмм и их подключения через директиву include
такая конструкция у меня упорно не работает
а работает чуть другая форма:
SUB(loka)
HINTPOPUP ("Нажмите CTRL для продолжения","Укажите локацию которую чистим") //выводим всплывающее окно
WHILE(iskeydown(#CTRL)=0) //ждем пока не нажмут контрл
WAITMS(20)
END_CYC
$lokx = $_xmouse //запоминаем координаты
$loky = $_ymouse //запоминаем координаты
//WHILE(iskeydown(#CTRL)=1)
// WAITMS(20)
//END_CYC
print ("кординаты локации(подпрограмма): ",$lokx," ; ",$loky)
END_SUB
#name "gneci"
#include "loka.cms" //подгружаю файл подпрограммы, файл ф той же папке что и скрипт имя -loka для определения целевой локации
//тут пропущу кусок кода он не к тому относится
loka() // запускаю подпрограмму loka переменные в нее не передаются
print("локация врага(осн)",$lokx,"; ",$loky)
//тут пропущу кусок кода он не к тому относится
halt // Точка выхода из скрипта
версия программы 4.12 это устаревшая безнадежно? или я опять чего то не понял? есле устаревшая, то кода на новую перенос вызовет большие трудности?
P.S. справку читал, гуглом пользовался, ответов не нашел. может просмотрел, может чукча :) :)
-
Версия кликера какая? Почему начальные значения не задаются в самом FOR?
По первому вопросу.
Если всё написано так как в посте, то должно работать. Такой результат как есть вижу только в двух случаях.
1. Если в скрипте по невнимательности строка IF_PICTURE_IN была повреждена (лишний параметр, не хватает или лишняя скобка), то условие IF не будет выполнятся совсем и тело условия будет работать всегда.
Как раз получим все последние значения.
2. Если при проверке случайно включил привязку, да ещё не к тому окну. То у нас GETSCREEN будет выдавать всё поле чёрным. Проигнорировав белый, на образцах ничего и нет кроме чёрного 0. Получаем что нашли все.
Ну проверь логами что находит, а что нет
GETSCREEN (12,151,530,225)//выбираем область для анализа экрана
FOR($a=0, $a < 5) //цикл на номер врага с лева на право от 1 до 5
$p[$a]=0
FOR($b=1, $b < 6)
IF_PICTURE_IN (12+$a*103, 151, 12+($a+1)*103, 225, STRCONCAT("variant\",$b, ".bmp"), 16777215, 100) // "
print("нашли ", $b, " в позиции ", $a)
$p[$a]=$b
ELSE
print("НЕ нашли ", $b, " в позиции ", $a)
END_IF
END_CYC
print("враг №"$a," получает ", $p[$a]," мечей" )
END_CYC
-
2) цветокорекция позволит сделать код универсальным для двух машин с одинаковой ОС, ну конечно при условии что идет привязка к окну по названию и координаты приводятся в соответствие. первый опыт показал что отснятые на одной машине скрины не подходят на второй. Да и какой показатель цветокорекции подойдет лучше
Цветокоррекция помогает бороться с флуктуациями цвета. Она не всегда позволит сделать код универсальным для двух машин ДАЖЕ с одинаковой ОС.
Может быть разное разрешение экрана и соответственно разный размер окна игры. Для универсальности часто их нужно привести в один размер. Зависит от того как рендерится.
Даже на одном типе OC может быть включен разный режим сглаживания экранных шрифтов, что влияет, например на текст в Win и FLASH.
Ещё за масштабом проследить, чтоб 100% был везде.
Про 3 вопрос совсем не понятно. Что не работает? В "той" теме обсуждается не один вопрос и код не один. К тому же она очень... нет, ОЧЕНЬ старая и под старые версии.
4.12 - последняя релизная.
4.13 пока beta, там ошибок вагон.
4.11 тоже ничего, отличий мало. Я пользуюсь 4.11 в основном.
-
Версия кликера какая? Почему начальные значения не задаются в самом FOR?
версия 4.12
начальные значения :o осознал исправляюсь
По первому вопросу.
Если всё написано так как в посте, то должно работать. Такой результат как есть вижу только в двух случаях.
1. Если в скрипте по невнимательности строка IF_PICTURE_IN была повреждена (лишний параметр, не хватает или лишняя скобка), то условие IF не будет выполнятся совсем и тело условия будет работать всегда.
Как раз получим все последние значения.
в пост копировал все с файлов полностью код файла созданного что бы проверить работоспособность этой конструкции и привязку тут не делал, она есть только в основном файле но он пока не тревожит
Ну проверь логами что находит, а что нет
GETSCREEN (12,151,530,225)//выбираем область для анализа экрана
FOR($a=0, $a < 5) //цикл на номер врага с лева на право от 1 до 5
$p[$a]=0
FOR($b=1, $b < 6)
IF_PICTURE_IN (12+$a*103, 151, 12+($a+1)*103, 225, STRCONCAT("variant\",$b, ".bmp"), 16777215, 100) // "
print("нашли ", $b, " в позиции ", $a)
$p[$a]=$b
ELSE
print("НЕ нашли ", $b, " в позиции ", $a)
END_IF
END_CYC
print("враг №"$a," получает ", $p[$a]," мечей" )
END_CYC
halt
логи
[spoiler]
16:20:15 нашли 1 в позиции 0
16:20:15 нашли 2 в позиции 0
16:20:16 нашли 3 в позиции 0
16:20:16 нашли 4 в позиции 0
16:20:16 нашли 5 в позиции 0
16:20:16 враг №0 получает 5 мечей
16:20:17 нашли 1 в позиции 1
16:20:17 нашли 2 в позиции 1
16:20:18 нашли 3 в позиции 1
16:20:18 нашли 4 в позиции 1
16:20:18 нашли 5 в позиции 1
16:20:18 враг №1 получает 5 мечей
16:20:19 нашли 1 в позиции 2
16:20:19 нашли 2 в позиции 2
16:20:19 нашли 3 в позиции 2
16:20:20 нашли 4 в позиции 2
16:20:20 нашли 5 в позиции 2
16:20:20 враг №2 получает 5 мечей
16:20:21 нашли 1 в позиции 3
16:20:21 нашли 2 в позиции 3
16:20:21 нашли 3 в позиции 3
16:20:22 нашли 4 в позиции 3
16:20:22 нашли 5 в позиции 3
16:20:22 враг №3 получает 5 мечей
16:20:22 нашли 1 в позиции 4
16:20:22 нашли 2 в позиции 4
16:20:22 нашли 3 в позиции 4
16:20:22 нашли 4 в позиции 4
16:20:22 нашли 5 в позиции 4
16:20:22 враг №4 получает 5 мечей
[/spoiler]
GETSCREEN (12,151,530,225)//выбираем область для анализа экрана
FOR($a=0, $a < 5) //цикл на номер врага с лева на право от 1 до 5
$p[$a]=0
FOR($b=1, $b < 6)
IF_PICTURE_IN (12+$a*103, 151, 12+($a+1)*103, 225, STRCONCAT("variant\",$b, ".bmp"), -1, 100) // "
print("нашли ", $b, " в позиции ", $a)
$p[$a]=$b
ELSE
print("НЕ нашли ", $b, " в позиции ", $a)
END_IF
END_CYC
print("враг №"$a," получает ", $p[$a]," мечей" )
END_CYC
halt
логи
[spoiler]16:21:39 НЕ нашли 1 в позиции 0
16:21:39 НЕ нашли 2 в позиции 0
16:21:39 нашли 3 в позиции 0
16:21:39 НЕ нашли 4 в позиции 0
16:21:39 НЕ нашли 5 в позиции 0
16:21:39 враг №0 получает 3 мечей
16:21:39 НЕ нашли 1 в позиции 1
16:21:39 нашли 2 в позиции 1
16:21:39 НЕ нашли 3 в позиции 1
16:21:39 НЕ нашли 4 в позиции 1
16:21:40 НЕ нашли 5 в позиции 1
16:21:40 враг №1 получает 2 мечей
16:21:40 НЕ нашли 1 в позиции 2
16:21:40 НЕ нашли 2 в позиции 2
16:21:40 НЕ нашли 3 в позиции 2
16:21:40 НЕ нашли 4 в позиции 2
16:21:40 нашли 5 в позиции 2
16:21:40 враг №2 получает 5 мечей
16:21:40 НЕ нашли 1 в позиции 3
16:21:40 нашли 2 в позиции 3
16:21:40 НЕ нашли 3 в позиции 3
16:21:40 НЕ нашли 4 в позиции 3
16:21:40 НЕ нашли 5 в позиции 3
16:21:40 враг №3 получает 2 мечей
16:21:41 НЕ нашли 1 в позиции 4
16:21:41 НЕ нашли 2 в позиции 4
16:21:41 НЕ нашли 3 в позиции 4
16:21:41 НЕ нашли 4 в позиции 4
16:21:41 НЕ нашли 5 в позиции 4
16:21:41 враг №4 получает 0 мечей
[/spoiler]
коды скопированы полностью без редактирования, логи разумеется тоже. похоже проблема связана какраз с изображениями, но в чем именно понять не могу. после смены черного на синий цвет оба кода выдают одинаково верные логи
[spoiler]16:27:14 НЕ нашли 1 в позиции 0
16:27:15 НЕ нашли 2 в позиции 0
16:27:15 нашли 3 в позиции 0
16:27:15 НЕ нашли 4 в позиции 0
16:27:15 НЕ нашли 5 в позиции 0
16:27:15 враг №0 получает 3 мечей
16:27:16 НЕ нашли 1 в позиции 1
16:27:16 нашли 2 в позиции 1
16:27:16 НЕ нашли 3 в позиции 1
16:27:16 НЕ нашли 4 в позиции 1
16:27:17 НЕ нашли 5 в позиции 1
16:27:17 враг №1 получает 2 мечей
16:27:17 НЕ нашли 1 в позиции 2
16:27:17 НЕ нашли 2 в позиции 2
16:27:18 НЕ нашли 3 в позиции 2
16:27:18 НЕ нашли 4 в позиции 2
16:27:18 нашли 5 в позиции 2
16:27:18 враг №2 получает 5 мечей
16:27:18 НЕ нашли 1 в позиции 3
16:27:18 нашли 2 в позиции 3
16:27:19 НЕ нашли 3 в позиции 3
16:27:19 НЕ нашли 4 в позиции 3
16:27:19 НЕ нашли 5 в позиции 3
16:27:19 враг №3 получает 2 мечей
16:27:20 НЕ нашли 1 в позиции 4
16:27:20 НЕ нашли 2 в позиции 4
16:27:21 НЕ нашли 3 в позиции 4
16:27:21 НЕ нашли 4 в позиции 4
16:27:21 НЕ нашли 5 в позиции 4
16:27:21 враг №4 получает 0 мечей
[/spoiler]
...Зависит от того как рендерится.
Даже на одном типе OC может быть включен разный режим сглаживания экранных шрифтов, что влияет, например на текст в Win и FLASH.
такого кода может хватить для браузерной игрушки в неполноэкранном режиме при условии что диоганали разрешение и даже отношение сторон мониторов разное или я тут утопией занимаюсь и надо искать другой монитор?
#name "gneci"
#include "loka.cms" //подгружаю файл подпрограммы, файл ф той же папке что и скрипт имя -loka для определения целевой локации
//тут я переменные всовываю
$HWnd = 0 // Дескриптор окна(указатель на окно)
DEFINE($xn , 0) // размер окна по горизонтали
DEFINE($yn , 0) //размер окна по вертикали
DEFINE($xmax , 1250) // размер окна по горизонтали
DEFINE($ymax , 920) //размер окна по вертикали
$HWnd = WNDFIND ("RPG TCG Жнецы душ") // ищем игру жнецы душь открытую в браузере вкладка должна быть активной
wait(1) // Ждем 1 сек.
//тут подготовка к запуску
if ($HWnd > 0) // Проверяем нашлось ли окно
WNDSTATE($HWnd, 1) // разворачиваем окно
WndPos ($HWnd,$xn,$yn) // Двигаем окно
WaitMS(500)
WndSize ($HWnd, $xmax, $ymax) // Меняем его размер
WAITMS(300)
MOVE($xmax-30,$yn+300)//ставлю курсор на пустое место
WAITMS(300)
WHEELUP(10) // колесиком прокручиваю полосу прокрутки вверх
WAITMS(300)
WHEELDOWN (1)// чуть прокручиваем вниз 3 строки текста)
WaitMS(500)
print("нашел окно") // в логах пишет если нашел нужное окно
loka() // запускаю подпрограмму loka переменные в нее не передаются
print("локация врага(осн)",$lokx,"; ",$loky)
ELSE
print("фигня с окном") // не нашел окно
WaitMS(500)
end_if
halt
Про 3 вопрос совсем не понятно. Что не работает? В "той" теме обсуждается не один вопрос и код не один. К тому же она очень... нет, ОЧЕНЬ старая и под старые версии.
http://crapware.aidf.org/forum/index.php?topic=33.msg708#msg708 вот точная ссылка на пост.
именно не понимаю команды "GOSUB(UPDATE_DATE)" у меня с такой командой не работает код и даже полностью скопированый код приводимый в посте как пример у меня дает сомнительный результат(вернее отсутствие такового)
но судя по другим темам
http://crapware.aidf.org/forum/index.php?topic=2886.msg18843#msg18843
это и правда проблема версий программы
-
http://crapware.aidf.org/forum/index.php?topic=33.msg708#msg708 вот точная ссылка на пост.
именно не понимаю команды "GOSUB(UPDATE_DATE)" у меня с такой командой не работает код и даже полностью скопированый код приводимый в посте как пример у меня дает сомнительный результат(вернее отсутствие такового)
но судя по другим темам
http://crapware.aidf.org/forum/index.php?topic=2886.msg18843#msg18843
это и правда проблема версий программы
Ну ты полез. Это приданье старины глубокой под версию максимум 4.5.
Это не "проблема". Вызов подпрограмм был изменён.
v4.9 (31.12.13)
+ Интерпретатор:
+ Изменения:
+ Изменен вид и вызов подпрограмм, теперь они поддерживают параметры
( callsub более не используется )
А с поиском... поздравляю! Ты нашёл баг. Баг проявляется на версиях 4.11 - 4.12, до этих версий всё нормально.
И только с чёрным цветом (не тестил).
Сам почти не применяю прозрачность, а если применял то с перекрашенным ядовито-зелёным аля Хромакей.
Вывод: не используй белый как цвет прозрачности или чистый чёрный как основной. Что там к чему надо тестить. Но проще исправить как было.
-
А с поиском... поздравляю! Ты нашёл баг. Баг проявляется на версиях 4.11 - 4.12, до этих версий всё нормально.
И только с чёрным цветом (не тестил).
Сам почти не применяю прозрачность, а если применял то с перекрашенным ядовито-зелёным аля Хромакей.
Вывод: не используй белый как цвет прозрачности или чистый чёрный как основной. Что там к чему надо тестить. Но проще исправить как было.
спасибо за подсказки и мысли к размышлению, к стати, сейчас кода и логов не сохранилось, может завтра попробую поймать снова но по-моему с чисто черным баг проявляется даже когда на цветном изображении ищешь, тоесть если область экрана содержит разнообразный ресунок но искомая картинка содержит только черный цвет и игнорируемый фон, то он будет везде показывать что результат поиска положительный. эт если я не путаю результат одного из неудачных своих циклов
-
lokipall награда нашла своего героя!
медаль "Антибаг" II степени.