Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Srsk on November 08, 2014, 03:57:58 PM
-
Столкнулся с проблемой не могу сделать простое сравнение картинок.
Выполняются определенные действия и после сканируется область
и при совпадении области выдает определенное сообщение в трее
*Ранее задумка была на сравнение картинок и выдачи определенного действия
*стравнение с 2я катинками со воими действиями (если не совпадают)
*сравнение с другими картинками +-15 штук (если не совпадают)
*сделать скриншот и сообщить о появлении новой картинки
*BEEP(*,*) просто не работает, хотя динамик отменно пищит при рестарте компьютера ???
Но так как просто тестовый код не получается сделать рабочим и обратился к вам за помошью
WAIT(2)
//=============================================
GETSCREEN
COLORMODE(8, 692, 428, 709, 435) //для точного отображения эмблемы (черный фон белые эмблемы)
IF_PICTURE_IN (692, 428, 709, 435, "[pref]0000.bmp", 0, 0) {
HINTPOPUP (" - ")
halt
}
IF_PICTURE_IN (692, 428, 709, 435, "[pref]0001.bmp", 0, 0) {
HINTPOPUP (" 1 ")
halt
}
IF_PICTURE_IN (692, 428, 709, 435, "[pref]0002.bmp", 0, 0) {
HINTPOPUP (" 2 ")
halt
}
IF_PICTURE_IN (692, 428, 709, 435, "[pref]0003.bmp", 0, 0) {
HINTPOPUP (" 3 ")
halt
}
IF_PICTURE_IN (692, 428, 709, 435, "[pref]0004.bmp", 0, 0) {
HINTPOPUP (" 4 ")
halt
}
else
screenshotex(692, 428, 709, 435, ["pref"])
HINTPOPUP (" Новый скрин!!! ")
halt
BEEP(800,200)
END_IF
В этом коде выполняется первое условие, даже если картинка не совпадает.
Эмблемы скринил так
$hwnd = 1313920
getscreen
COLORMODE(8, 692, 428, 708, 435) //цветокоррекциядо 2х цветов
screenshotex(692, 428, 708, 435, ["pref"])
halt // for single run
-
Код совершенно неверен.
В кликере можно реализовать сравнение через скриншоты. Но куда проще, если область никуда не двигается, использовать снятие хеша.
GETSCREEN
$hash1 = PXLCRC(692,428, 709,435) // снимаем хеш с области
WAIT(1)
// действия
GETSCREEN
$hash2 = PXLCRC(692,428, 709,435) // снимаем хеш с области
IF($hash1 = $hash2) // сравниваем
HALT
END_IF
В чем твои ошибки, в справке квадратные скобки указывают на необязательные параметры. Сами скобки конечно не пишут.
{} - вот это вообще не из этой оперы :o
Твой код правильно пишется так:
WAIT(2)
//=============================================
GETSCREEN
COLORMODE(8, 692, 428, 709, 435) //для точного отображения эмблемы (черный фон белые эмблемы)
IF_PICTURE_IN (692, 428, 709, 435, "screens\Image_0000.bmp", -1, 100)
HINTPOPUP (" - ")
halt
END_IF
IF_PICTURE_IN (692, 428, 709, 435, "screens\Image_0001.bmp", -1, 100)
HINTPOPUP (" 1 ")
halt
END_IF
IF_PICTURE_IN (692, 428, 709, 435, "screens\Image_0002.bmp", -1, 100)
HINTPOPUP (" 2 ")
halt
END_IF
IF_PICTURE_IN (692, 428, 709, 435, "screens\Image_0003.bmp", -1, 100)
HINTPOPUP (" 3 ")
halt
END_IF
IF_PICTURE_IN (692, 428, 709, 435, "screens\Image_0004.bmp", -1, 100)
HINTPOPUP (" 4 ")
halt
else
screenshotex(692, 428, 709, 435, "Image_", 0)
HINTPOPUP (" Новый скрин!!! ")
BEEP(800,200)
halt
END_IF
А это что?
$hwnd = 1313920
тупо записал число 1313920 в переменную $hwnd ??? а зачем?
-
разумеется выполняется условие
у тебя IF_PICTURE_IN (692, 428, 709, 435, "[pref]0004.bmp", 0, 0)
IF_PICTURE_IN (x, y, x2, y2, "file", [bgcolor], [currency]) - производит поиск изображения в прямоугольной области буфера анализа
currency - необязательный параметр; точность поиска в процентах (1..99)
задал 0% точность, оно и совпадает с чем угодно если точность не нужна, потому и выполняется условие
-
Вот тот скрипт который ты хотел.
Полный автомат, сам сравнивает, сам скриншотит.
Чтобы кликер знал с каким количеством картинок работать, счетчик записывает значение в файл "config.ini"
IF(TFCOUNT("config.ini")>0)
$Image_count_s = INT(INIREAD("config.ini", "Image_count_s"))
ELSE
$Image_count_s = 0
INIWRITE("config.ini", "Image_count_s", "0")
END_IF
$check = 0
GETSCREEN
COLORMODE(8, 692, 428, 709, 435)
WHILE($check = 0)
$len = STRLEN($gen)
IF($len < 1)
$gen2 = STRCONCAT ("0000", $gen)
Else
IF($len < 2)
$gen2 = STRCONCAT ("000", $gen)
Else
IF($len < 3)
$gen2 = STRCONCAT ("00", $gen)
Else
IF($len < 4)
$gen2 = STRCONCAT ("0", $gen)
Else
$gen2 = $gen
END_IF
END_IF
END_IF
END_IF
INC($gen,1)
$num = $gen2
INC($Image_count,1)
IF($Image_count > $Image_count_s)
$check = 1
ELSE
IF_PICTURE_IN (692, 428, 709, 435, STRCONCAT("screens\Image_", $num,".bmp"), -1, 100)
HINTPOPUP (" - ")
halt
END_IF
END_IF
END_CYC
IF($check = 1)
INIWRITE("config.ini", "Image_count_s", $Image_count)
screenshotex(692, 428, 709, 435, "Image_", 0)
HINTPOPUP (" Новый скрин!!! ")
BEEP(800,200)
WAIT(1)
halt
END_IF
-
Код совершенно неверен.
В кликере можно реализовать сравнение через скриншоты. Но куда проще, если область никуда не двигается, использовать снятие хеша.
Хеш конечно хорошо, но я до работы с ним еще не добрался, не знаю как его сохранить на определенные переменные.
В чем твои ошибки, в справке квадратные скобки указывают на необязательные параметры. Сами скобки конечно не пишут.
{} - вот это вообще не из этой оперы :o
Каюсь грешон приплел скобочки неподумавши а 2ые с С++ и подумал авось поможет.
А это что?
$hwnd = 1313920
тупо записал число 1313920 в переменную $hwnd ??? а зачем?
$hwnd привязка к окну, на момент тестов hwnd в коде был равен $hwnd окну.
Спасибо что тыкнули носом!
Передумал код в корне почитал функции и решил перекидать тест код
Для точности написал вот этот код и использовал перед созданием скринов, и проверкой кода работает отменно
[spoiler]
$hwnd = 270424
$W = 1440
$h = 900
hsettext($hwnd, "Hammp") //Çàãîëîâîê îêíà
WNDSIZE ($hwnd, $w, $h) //Ðàçìåð îêíà
WNDPOS ($hwnd, 0, 0) //Ðàñïîëîæåíèå îêíà
WAIT(3) //Çàäåðæêà
WNDBUMP($hwnd) //Îêíî íà ïåðåäíèé ïëàí
hset($hwnd, 1) //Îêîííûé ðåæèì
WAIT(1) //Çàäåðæêà
#ps2_keyboard //ïåðâîä ñèñòåìíûõ ñèãíàëîâ ìûøè â ïñ2(ÍÅ ÈÇÌÅÍßÒÜ ÇÍÀ×ÅÍÈÅ)
KEYDOWN (#ALT) //Ñáðîñ íàñòðîåê îêîí
KEYPRESS (#L) //Ðàáîòàåò
KEYUP (#ALT)
WAIT(2) //Çàäåðæêà
halt
[/spoiler]
сам код с которым ну никак разобраться не могу
картинки уже все от скринены в папочке лежат но не хотят проверяться
[spoiler]
$hwnd = 270424
$pref="textures\pref" //наÑтройка пути к Ñкинам
//$x1 = 699 //эталонные значения положения скринов
//$y1 = 429
//$x2 = 705
//$y2 = 438
$a = 4
$x1 = 681 //значения области в которой искать совпадения
$y1 = 416
$x2 = 719
$y2 = 454
GETSCREEN
COLORMODE(8, 680, 415, 720, 455) // область которую перевести в черно белый
WAIT(1)
FOR ($i=0, $i < $a)
IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT($pref,$i,".bmp"), -1, 100) //поиск картинки в прямоугольной области (фон задаю как черный тоже не помогает)
HINTPOPUP (" ----------- +"$i ) //не выводится
if($i > 0 & $i < $a)
WAIT(3)
HINTPOPUP (" èè "$i )
end_if
if($i = 0)
HINTPOPUP (" 000000000000 ")
WAITMS(300)
end_if
end_if
INC($i, 1)
END_CYC
[/spoiler]
А самое веселое что вот этот код работал вчера вечером как задуманно выше хъотя
не должно было рабочее состояние кода забыл засейвить
[spoiler]
$pref="textures\pref" // ??????? ???? ?????? ? ???????
$x1 = 699
$y1 = 429
$x2 = 705
$y2 = 438
GETSCREEN
COLORMODE(8, 699, 429, 705, 438)
FOR ($i=0, $i=6, 1)
IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT($pref,$i,".bmp"))
if($_return1 = $x1)
HINTPOPUP (" ??????? ?? $i ")
else
HINTPOPUP (" $i ")
end_if
END_CYC
[/spoiler]
Еще один тест и ноль эмоций, ну что то вообще не хочет оно находить картинки хоть убей
[spoiler]
$hwnd = 270424
$pref="textures\pref" // ??????? ???? ?????? ? ???????
//$x1 = 699 //эталонные значения положения скринов
//$y1 = 429
//$x2 = 705
//$y2 = 438
$x1 = 690 //область поиска сходств
$y1 = 420
$x2 = 710
$y2 = 440
//$zatochka
GETSCREEN
COLORMODE(8, 695, 415, 715, 445)
//screenshotex(699, 429, 705, 438, "pref") //повторно перескринил и добавил в текстуры
WAIT(1)
FOR ($i=0, $i>6) //функция
IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT($pref,$i,".bmp")) //поиск в прямоуголнике (пробовал и , -1, 90 и , 0, 90)
if($i > 0)
HINTPOPUP (" ??????? ?? $i ")
//goto(delay) //отправка на действия
else
HINTPOPUP (" $i ")
//HALT
end_if
INC($i, 1)
WAIT(1)
END_IF
END_CYC
//=========
HALT
[/spoiler]
По поводу вашего автоматического кода самого скринящего и проверяющего
Я пока с кодом не разобрался, в начеле застопорился на понимании логики
Пока не пойму я его и использовать не смогу*(
А вот вашь код с перебором цыфр в играх мне помог.
-
Хеш суммы можно записывать в файл. и потом в цикле читать строки и сравнивать значение. Так куда проще. Я не знаю ведь что ты там делаешь. Зачем например COLORMODE(8) ?
Теперь про ошибки:
Неверный код
HINTPOPUP (" ----------- +"$i )
HINTPOPUP (" èè "$i )
Правильно так
HINTPOPUP (STRCONCAT(" ----------- +", $i))
Еща ошибка
if($i > 0 & $i < $a)
Верный код
if(($i > 0) & ($i < $a))
-
Исправленный код.
Кстати к сведению, цикл FOR сам наращивает переменную $i
и надеюсь картинки у тебя называются "pref0.bmp" "pref1.bmp" "pref2.bmp" и тд.
$hwnd = 270424
$pref="textures\pref" //настройка пути к скинам
//$x1 = 699 //эталонные значения положения скринов
//$y1 = 429
//$x2 = 705
//$y2 = 438
$a = 4
$x1 = 681 //значения области в которой искать совпадения
$y1 = 416
$x2 = 719
$y2 = 454
GETSCREEN
COLORMODE(8, $x1, $y1, $x2, $y2) // область которую перевести в черно белый
WAIT(1)
FOR($i=0, $i < $a)
IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT($pref,$i,".bmp"), -1, 100) //поиск картинки в прямоугольной области (фон задаю как черный тоже не помогает)
HINTPOPUP (STRCONCAT(" ----------- +", $i)) //не выводится
if(($i > 0) & ($i < $a))
WAIT(3)
HINTPOPUP (STRCONCAT(" ии ", $i))
end_if
if($i = 0)
HINTPOPUP (" 000000000000 ")
WAITMS(300)
end_if
end_if
END_CYC
-
Не ошибки а функции вывода в трее сообщения, работаю в нескольких редакторах.
Еща ошибка
if($i > 0 & $i < $a)
Верный код
if(($i > 0) & ($i < $a))
Вот спасибо напомнил за скобки, давно я не писал код по забывал основы.
И методом проб и ошибок я все таки нашел в чем ошибки.
До
//FOR ($i=0, $i>6) //ôóíêöèÿ
// IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT($pref,$i,".bmp")) //ïîèñê â ïðÿìîóãîëíèêå (ïðîáîâàë è , -1, 90 è , 0, 90)
// if($i > 0)
// HINTPOPUP (" ??????? ?? $i ")
// //goto(delay) //îòïðàâêà íà äåéñòâèÿ
// else
// HINTPOPUP (" $i ")
// //HALT
// end_if
// INC($i, 1)
// WAIT(1)
// END_IF
//END_CYC
После
FOR ($i=0, $i < 5, 1)
HINTPOPUP (" Proverka № +"$i )
WAIT(3)
IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT($pref,$i,".bmp"))
HINTPOPUP (" Функции поиска работает "$i )
if($i > 0 & $i < 6)
WAIT(3)
HINTPOPUP (" Пойман №"$i )
goto(lasso)
end_if
if($i = 0)
HINTPOPUP (" Искать следующего ")
WAIT(3)
HALT
end_if
end_if
END_CYC
Както не важно тут спойлеры работают
-
STRCONCAT
Нужно ведь использовать в том случае если идет текс переменная текст и.т.п, и нужно объединение ибо кликермэн не понимает.
А в моем случает идет текст и переменная кликермэн понимает, но думаю да все таки с моей стороны это помарка(Пример не очень правильного кода).
Тоже возьму на вооружение спасибо.
Всем спасибо большое за участие и помошь в расстолковании моих ошибок.
Отдельное спасибо Oraven.
Тему закрываю.
-
Да скажи спасибо такому умному интерпретатору который вместо ругани проглатывает текст+переменная ;D
Но разбор такого неправильного кода замедляет работу и может приводить к ошибкам.