Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Kas on August 01, 2019, 12:02:29 AM
-
Есть статичный фон, на котором в рандомных местах появляются рандомные картинки, на которые необходимо кликать
Можно ли это как-то реализовать, не имея конкретной картинки или пикселя?
-
Можно попробовать отлавливать появление картинок по изменению контрольной группы пикселей. Экран поделить на несколько секторов и последовательно проверять в каждом секторе не изменинился ли crc группы пикселей в этом секторе. Для ускорения процесса нужно считать не все пиксели сектора, а лишь пиксели небольшого участка.
-
Есть статичный фон, на котором в рандомных местах появляются рандомные картинки, на которые необходимо кликать
Можно ли это как-то реализовать, не имея конкретной картинки или пикселя?
А можно поподробнее про фон? Это область одного цвета, область с какимито картинками, или область с переливающимися цветами?
В общем, если это один цвет или хотябы приблизительно один цвет, то можно просто использовать колормод 7. И искать на экране семь цветов кроме восьмого, того что является цветом фона. Если чтото находит - клик.
-
Есть статичный фон, на котором в рандомных местах появляются рандомные картинки, на которые необходимо кликать
Можно ли это как-то реализовать, не имея конкретной картинки или пикселя?
А можно поподробнее про фон? Это область одного цвета, область с какимито картинками, или область с переливающимися цветами?
В общем, если это один цвет или хотябы приблизительно один цвет, то можно просто использовать колормод 7. И искать на экране семь цветов кроме восьмого, того что является цветом фона. Если чтото находит - клик.
Фон состоит из 2 разных цветов
А как, собственно, заставить кликер искать все цвета, кроме определённых? ;D Я просто слабо во всем этом шарю, где про это почитать можно?
-
Было когда-то предложение внедрения такой функции http://crapware.aidf.org/forum/index.php?topic=2390.msg14945#msg14945
Попробовал написать DLL с данным функционалом, немного потестил, вроде работает.
Код делфи dll
library if_not_pixel;
uses Windows, System.Types, System.IOUtils;
//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
pIntArr = array[0..0] of Integer;
var
file_arr: TArray<System.Byte>;
a, b, c, pixel, res :Integer;
begin
res := 16777216; // если не найдет других цветов
file_arr := TFile.ReadAllBytes('screen.bmp'); // помещаем файл в массив
b := file_arr[10]; //начало пикс данных
for a:= 0 to _size-1 do //цикл по входным цветам
begin
pixel := pIntArr(_mas^)[a];
While(b < Length(file_arr)) do // цикл сравнения пикселей в файле с входными
begin
if (file_arr[b+2]+file_arr[b+1]*256+file_arr[b]*65536) <> pixel then //если не равен
begin
for c:= 0 to _size-1 do //то сравниваем его с всеми входными
begin
if (file_arr[b+2]+file_arr[b+1]*256+file_arr[b]*65536) = pIntArr(_mas^)[c]
then break
end;
if c = _size then res := file_arr[b+2]+file_arr[b+1]*256+file_arr[b]*65536 //если ни с каким из входящих не совпало
end;
// то выход
if res < 16777216 then break ;
inc(b, 4)
end;
//то выход
if res < 16777216 then break ;
end;
result := res;
end;
//------------------------------------------------------------------------------
// список экспорта
exports execute;
begin
// тело пусто
end.
На выходе получаем цвет не совпавший с отправленными в длл цветами. Если таких нет, то в ответ "16777216". Определять координату этого пикселя в длл не стал, много мороки.
Далее, если найден такой пиксель, ищем его стандартным ифпиксельин-ом.
Пример использования в кликермане:
$x1 = 100 //область сканирования
$y1 = 100
$x2 = 300
$y2 = 300
GETSCREEN($x1,$y1, $x2,$y2)
SCREENSHOTFIX($x1,$y1, $x2,$y2, "screen.bmp") //имя файла обязательно такое
CALL("if_not_pixel.dll", 16777215, 0, 255) // ищем в файле все цвета не совпадающие с белым, черным и красным. Можно добавить нужные цвета (неограниченно)
//print($_return1) //можно глянуть что там за он
IF($_return1 < 16777216) //если нашли несовпадение
//ищем этот пиксель кликерманом
IF_PIXEL_IN($x1,$y1, $x2,$y2, $_return1)
//действие
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
halt
Работает давольно быстро, скорость не мерял. Скомпилированный "if_not_pixel.dll" для х32 битной версии кликермана во вложении... чето с ноута не хочет вложения работать :-\. Файл на ядиске https://yadi.sk/d/GCwF_xHK1Z0BZQ
-
Так ищем один цвет. А можно ли возвращать все несовпадающие? Или $_return1 под это не заточен и нужно в файл выгружать?
-
Так ищем один цвет. А можно ли возвращать все несовпадающие? Или $_return1 под это не заточен и нужно в файл выгружать?
Да, $_return1 ограничен 4-мя байтами. Можно в файл, либо вызывать длл с параметром индекса массива file_arr найденного не совпавшего цвета, и собирать массив цветов уже в кликере в цикле.
Подумал, тоже не вариант. У нас длл возвращаяет цвет в 3 байта, остается 1, это всего 256 индексов только можно будет принять из длл, мало :(
Хотя... длл нашел, кликер нашел координаты, эти координаты отправляем опять в длл, с них и начнет поиск. Такчто все возможно.