Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: BuP4uk on December 03, 2014, 11:36:05 AM
-
написал скрипт, все работает, но возник вопрос, возможно ли ускорить действие кликера при появление нужного мне окна?
Вот появились у меня награды за бой и с низу кнопка вернуться к списку уровней, вот хотелось бы чтобы он через 1-2 секунды уже нажимал эту кнопку а не спустя 10 как он делает
//скрипт на фарм greyish snowfield с запуска blueastacks с разрешением 1600х900
//запускаем summon masters
getscreen
if_picture_in(0,0,1600,900, "bstack.bmp")
logwrite(запускаемся)
LCLICK(320,154)
wait(1)
end_if
//обходим рекламу если есть
if_picture_in(0,0,1600,900, "reklama.bmp")
logwrite(выключаем_рекламу)
LCLICK(1171,856)
wait(1)
LCLICK(1396,75)
wait(1)
end_if
//выходим в меню если всетаки прошел по ссылке рекламы
if_picture_in(0,0,1600,900, "browser.bmp")
logwrite(обходим_рекламу)
LCLICK(125,900)
wait(2)
end_if
//входим в игру
if_picture_in(0,0,1600,900, "logo.bmp")
logwrite(входим_в_игру)
wait(4)
LCLICK(879,800)
wait(2)
end_if
//закрываем новости
if_picture_in(0,0,1600,900, "news.bmp")
logwrite(закрываем_новости)
LCLICK(1408,122)
wait(2)
end_if
//заходим в ящик
if_picture_in(0,0,1600,900, "main.bmp")
logwrite(заходим_в_ящик)
LCLICK(128,666)
wait(2)
end_if
//покидаем ящик и запускаем explorer
if_picture_in(0,0,1600,900, "leavebox.bmp")
logwrite(выходим_и_идем_в_эксплорер)
LCLICK(1509,662)
wait(15)
LCLICK(1522,777)
wait(15)
LCLICK(1430,160)
wait(2)
end_if
//выбираем експлор
if_picture_in(0,0,1600,900, "explorer.bmp")
logwrite(выбираем_експлор)
LCLICK(1431,216)
wait(2)
end_if
//выбираем хелл
if_picture_in(0,0,1600,900, "hell.bmp")
logwrite(выбираем_хел_режим)
LCLICK(1543,373)
wait(2)
end_if
//ищем греиш сноуфилд
if_picture_in(0,0,1600,900, "hell2.bmp")
logwrite(ищем_greyish_snowfield)
move(400,400)
wait(1)
wheeldown
wait(4)
wheeldown
wait(4)
wheeldown
wait(4)
wheeldown
wait(4)
LCLICK(301,133)
wait(2)
end_if
//выбираем 2 уровень
if_picture_in(0,0,1073,240, "gs6.bmp")
logwrite(выбераем_второй_уровень)
move(837,516)
wait(1)
wheeldown
wait(3)
wheeldown
wait(3)
LCLICK(827,632)
wait(2)
end_if
//выбираем 2 уровень
if_picture_in(0,0,1600,900, "gs2.bmp")
logwrite(выбераем_второй_уровень)
LCLICK(827,632)
wait(2)
end_if
//выбираем хелпера
if_picture_in(0,0,1600,900, "helper.bmp")
logwrite(выбераем_третьего_хелпера)
LCLICK(803,569)
wait(2)
LCLICK(1154,585)
wait(2)
end_if
//запускаем автобой
if_picture_in(0,0,1600,900, "auto.bmp")
logwrite(запускаем_автобой)
LCLICK(1395,161)
wait(2)
end_if
//забираем награду
if_picture_in(0,0,1600,900, "reward.bmp")
logwrite(возвращаемся_к_выбору_уровня)
LCLICK(1522,777)
wait(20)
end_if
//закончилась энергия
if_picture_in(0,0,1600,900, "ap.bmp")
logwrite(возвращаемся_в_главное_меню(AP<2))
LCLICK(1054,616)
wait(2)
end_if
//нет места в инвентаре
if_picture_in(0,0,1600,900, "inventoryfull.bmp")
logwrite(возвращаемся_в_главное_меню(нет_места))
LCLICK(829,615)
wait(2)
end_if
//нет места в инвентаре2
if_picture_in(0,0,1600,900, "inventoryfull2.bmp")
logwrite(возвращаемся_в_главное_меню(нет_места))
LCLICK(811,607)
wait(2)
LCLICK(51,433)
wait(2)
end_if
//дисконнект
if_picture_in(0,0,1600,900, "disconnect.bmp")
logwrite(перезаходим)
LCLICK(817,601)
wait(2)
end_if
//ежедневный_бонус
if_picture_in(0,0,1600,900, "daylybonus.bmp")
logwrite(забираем_ежедневный_бонус)
LCLICK(864,713)
wait(2)
end_if
//застрял в меню усиления оружия/персонажей
if_picture_in(0,0,1600,900, "zastryal2.bmp")
logwrite(выходим_из_меню_усилений)
LCLICK(1524,781)
wait(2)
end_if
//закрываем тимвивер
if_picture_in(0,0,1600,900, "teamweaver.bmp")
logwrite(закрываем_тимвивер)
LCLICK(1123,581)
wait(2)
end_if
-
Строки нужно заключать в кавычки
logwrite("запускаемся")
Также рекомендую добавить getscreen в конце каждого условия поиска. Чтобы следующее условие получило обновленный скриншот, а не искало по старому скрину сделанному 10 секунд назад.
На счет кода, вставь GOTO чтобы в зависимости от результата прыгнуть в нужную часть скрипта.
getscreen
if_picture_in(0,0,1600,900, "bstack.bmp")
logwrite("запускаемся")
LCLICK(320,154)
wait(1)
getscreen // делаем новый снимок
end_if
-
как ты себе представляешь нулевой пиксель?
Если упрешь курсор в верхний левый угол получишь координату 0,0
-
Как то не логично поиск картинки всегда ведётся в общем секторе 0,0,1600,900
а клики при их нахождении всегда в определённый пиксель к примеру; LCLICK(320,154)
Это значит, что картинки возникают в строго определённых местах и поиск можно ускорить значительно сузив размер сектора, персонально для каждой картинки. к примеру для
if_picture_in(220,0,420,254, "bstack.bmp")
LCLICK(320,154)
это 100 пикселей в каждую сторону от клика, но это примерно так как незнаю размера картинок( подразумевается, что они маленькие)
если клики по картинкам, то почему не использовать результат их нахождения?
LCLICK ($_return1,$_return2) везде а не прописывать персонально каждый пиксель
//скрипт на фарм greyish snowfield с запуска blueastacks с разрешением 1600х900
а почему бу не сделать его на любое разрешение?
if_picture_in(1,1,$_xmaх,$_ymax, "bstack.bmp")
как ты сабе представляешь нулевой пиксель?
клики не по картинкам(кнопка возврата везде одинаковая,а мне ее нужно использовать не всегда), сократить сектор можно(просто не был уверен что это ускорит процесс),
если поставить разрешение екрана больше/меньше изменится вид искомой картинки(сузится)
за идею спасибо. так понимаю если и картинки сделать 10х10 пикселей еще шустрей начнет ?сейчас используются все 50х50...
-
Строки нужно заключать в кавычки
logwrite("запускаемся")
Также рекомендую добавить getscreen в конце каждого условия поиска. Чтобы следующее условие получило обновленный скриншот, а не искало по старому скрину сделанному 10 секунд назад.
На счет кода, вставь GOTO чтобы в зависимости от результата прыгнуть в нужную часть скрипта.
getscreen
if_picture_in(0,0,1600,900, "bstack.bmp")
logwrite("запускаемся")
LCLICK(320,154)
wait(1)
getscreen // делаем новый снимок
end_if
а вот тут проблема, снимок может не успеть обновиться, так как после клика бывают задержки в плоть до 20 секунд в зависимости от соединения...
м... без ковычек отображается нормально что делает, время это врятли сократит...
-
а вот тут проблема, снимок может не успеть обновиться, так как после клика бывают задержки в плоть до 20 секунд в зависимости от соединения...
м... без ковычек отображается нормально что делает, время это врятли сократит...
Воспользуййся циклом для ожидания картинки
// бесконечное ожидание картинки
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
$check = 1
LCLICK($_return1, $_return2)
WAITMS(100)
ELSE
WAITMS(50)
END_IF
END_CYC
// Не бесконечное ожидание
$time = $_time_t + 30 // таймер на 30 секунд
WHILE($time > $_time_t)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
$time = 0
LCLICK($_return1, $_return2)
WAITMS(100)
ELSE
WAITMS(500)
END_IF
END_CYC
IF($time ! 0)
// время истекло, картинка не найдена
END_IF
-
написал скрипт, все работает, но возник вопрос, возможно ли ускорить действие кликера при появление нужного мне окна?
Вот появились у меня награды за бой и с низу кнопка вернуться к списку уровней, вот хотелось бы чтобы он через 1-2 секунды уже нажимал эту кнопку а не спустя 10 как он делает
У тебя каждая проверка вносит задержку в работу сценария, таким образом чем больше у тебя будет проверок, тем дольше будет выполняться 1 проход сценария
Также многие условия наверняка взаимоисключаемы, т.е., если сработало первое условие, то не имеет смысла проверять все остальные
Рекомендую переделать скрипт следующим образом: создать дерево условий, где все взаимоисключающие ситуации будут находиться в ELSE,
во все блоках IF, вместо LCLICK($x,$y)/wait($s) , присваивай некоторой переменной значение, которое будет означать то или иное действие,
после всех блоков с анализом экрана добавь блок switch, в котором будет выполняться соотв. действие для каждой ситуации:
logclear
logshow(1)
// флаги состояния игры
// по идее это должны быть константы, определенные через #, их тогда можно использовать в
// блоках switch, например: case(#REKLAMA), но определение констант в сценарии пока не реализовано насколько знаю
$BSTACK = 1
$REKLAMA = 2
$BROWSER = 3
$LOGO = 4
$UNKNOWN = -1
// состояние игры
$state = $UNKNOWN
// счетчик неопределенных подряд состояний
$unknown_count = 0
// определяем положение окна игры на экране
// логика может быть разной
// например ищем кусочки картинок, которые всегда на экране
// по их положению расчитываем координаты игры
// if_picture_in будет долго выполняться для всего экрана
// необходимо для каждого искомого фрагмента определить границы поиска,
// в которых он всегда попадает
// положение элементов интерфейса в игре наверняка ориентировано
// либо на один из углов, либо на центр либо на сторону-центр
// это можно использовать для вычисления положений элементов интерфейса
// независимо от масштаба окна игры, исключение - игры с масштабированием графики
// также сами фрагменты должны представлять из себя уникальную последовательность пикселей
// в большинстве ситуаций использую картинки высотой в 1px и длиной около 10px
// здесь просто выставляем на весь экран
$x1 = 0
$y1 = 0
$x2 = $_xmax
$y2 = $_ymax
while(1 = 1)
// для отладки
print("DEBUG: тик-так")
// по умолчанию состояние не определено
$state = $UNKNOWN
getscreen
// определяем состояние
if_picture_in($x1, $y1, $x2, $y2, "bstack.bmp")
$state = $BSTACK
$unknown_count = 0
else
//обходим рекламу если есть
if_picture_in($x1, $y1, $x2, $y2, "reklama.bmp")
$state = $REKLAMA
$unknown_count = 0
else
//выходим в меню если всетаки прошел по ссылке рекламы
if_picture_in($x1, $y1, $x2, $y2, "browser.bmp")
$state = $BROWSER
$unknown_count = 0
else
//входим в игру
if_picture_in($x1, $y1, $x2, $y2, "logo.bmp")
$state = $LOGO
$unknown_count = 0
else
INC($unknown_count)
end_if
end_if
end_if
end_if
// реакция на состояние
switch($state)
case(1)
logwrite("запускаемся")
LCLICK(320,154)
wait(1)
case(2)
logwrite("выключаем_рекламу")
LCLICK(1171,856)
wait(1)
LCLICK(1396,75)
wait(1)
case(3)
logwrite("обходим_рекламу")
LCLICK(125,900)
wait(2)
case(4)
logwrite("входим_в_игру")
wait(2)
LCLICK(879,800)
wait(2)
default
logwrite("неизвестное состояние:", $unknown_count)
if ($unknown_count > 4)
logwrite("определить состояние так и не удалось, завершение работы")
goto(the_end)
end_if
wait(2)
end_switch
// разгружаем процессор
waitms(50)
end_cyc
the_end:
halt