Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Hito on October 17, 2016, 04:19:54 PM
-
Ребят, бьюсь над ловлей тригера уже более двух суток. На видео сначала появляется тригер, который просто нужно теребить вправо-влево. С ним проблем нет. У него на раскадровке просто несколько положений и их можно поймать. Проблем с ним нет потому, что поймав одно из положений, нам не нужно гадать - в какую сторону им теребить, а просто вызываем:
[spoiler]SUB(t_triger)
$var=0
WHILE($var < 15)
KEYPRESS(#A)
WAITMS(30)
KEYPRESS(#D)
WAITMS(30)
$var=$var+1
END_CYC
END_SUB
[/spoiler]
В этом случае все работает. На видео с этим как раз справляется кликер.
А вот в конце видео появляется тригер, который нужно крутить, вызвав:
[spoiler]SUB(n_po_chas_p)
KEYDOWN(#D)
WAITMS(30)
KEYDOWN(#S)
WAITMS(30)
KEYUP(#D)
WAITMS(30)
KEYDOWN(#A)
WAITMS(30)
KEYUP(#S)
WAITMS(30)
KEYDOWN(#W)
WAITMS(30)
KEYUP(#A)
WAITMS(30)
KEYDOWN(#D)
WAITMS(30)
KEYUP(#W)
WAITMS(30)
KEYDOWN(#S)
WAITMS(30)
KEYUP(#D)
WAITMS(30)
KEYDOWN(#A)
WAITMS(30)
KEYUP(#S)
WAITMS(30)
KEYUP(#A)
WAITMS(30)
END_SUB
[/spoiler]
Но в этом случае кликеру мало - понять, что картинка с тригером появилась.
Его еще нужно заставить понять - в какую именно сторону крутить этот тригер.
Вот видео:
https://youtu.be/UgaclIzHo8M (https://youtu.be/UgaclIzHo8M)
Вот раскадровка нужного момента, так сказать - от и до:
[spoiler](http://f3.s.qip.ru/~17zmt2zpg.png) (http://shot.qip.ru/00R6pv-317zmt2zpg/)
(http://f6.s.qip.ru/~17zmt2zpk.png) (http://shot.qip.ru/00R6pv-617zmt2zpk/)
(http://f6.s.qip.ru/~17zmt2zpl.png) (http://shot.qip.ru/00R6pv-617zmt2zpl/)
(http://f5.s.qip.ru/~17zmt2zpm.png) (http://shot.qip.ru/00R6pv-517zmt2zpm/)
(http://f5.s.qip.ru/~17zmt2zpo.png) (http://shot.qip.ru/00R6pv-517zmt2zpo/)
(http://f3.s.qip.ru/~17zmt2zpq.png) (http://shot.qip.ru/00R6pv-317zmt2zpq/)
(http://f5.s.qip.ru/~17zmt2zps.png) (http://shot.qip.ru/00R6pv-517zmt2zps/)
(http://f6.s.qip.ru/~17zmt2zpt.png) (http://shot.qip.ru/00R6pv-617zmt2zpt/)
(http://f1.s.qip.ru/~17zmt2zpv.png) (http://shot.qip.ru/00R6pv-117zmt2zpv/)
(http://f1.s.qip.ru/~17zmt2zpw.png) (http://shot.qip.ru/00R6pv-117zmt2zpw/)
(http://f6.s.qip.ru/~17zmt2zpx.png) (http://shot.qip.ru/00R6pv-617zmt2zpx/)
(http://f1.s.qip.ru/~17zmt2zpy.png) (http://shot.qip.ru/00R6pv-117zmt2zpy/)
(http://f3.s.qip.ru/~17zmt2zpz.png) (http://shot.qip.ru/00R6pv-317zmt2zpz/)
(http://f2.s.qip.ru/~17zmt2zpA.png) (http://shot.qip.ru/00R6pv-217zmt2zpA/)
(http://f3.s.qip.ru/~17zmt2zpB.png) (http://shot.qip.ru/00R6pv-317zmt2zpB/)
(http://f6.s.qip.ru/~17zmt2zpC.png) (http://shot.qip.ru/00R6pv-617zmt2zpC/)
(http://f5.s.qip.ru/~17zmt2zpD.png) (http://shot.qip.ru/00R6pv-517zmt2zpD/)
(http://f3.s.qip.ru/~17zmt2zpE.png) (http://shot.qip.ru/00R6pv-317zmt2zpE/)
(http://f2.s.qip.ru/~17zmt2zpG.png) (http://shot.qip.ru/00R6pv-217zmt2zpG/)
(http://f5.s.qip.ru/~17zmt2zpH.png) (http://shot.qip.ru/00R6pv-517zmt2zpH/)
(http://f5.s.qip.ru/~17zmt2zpJ.png) (http://shot.qip.ru/00R6pv-517zmt2zpJ/)
(http://f4.s.qip.ru/~17zmt2zpK.png) (http://shot.qip.ru/00R6pv-417zmt2zpK/)
(http://f5.s.qip.ru/~17zmt2zpM.png) (http://shot.qip.ru/00R6pv-517zmt2zpM/)
(http://f1.s.qip.ru/~17zmt2zpN.png) (http://shot.qip.ru/00R6pv-117zmt2zpN/)
(http://f4.s.qip.ru/~17zmt2zpO.png) (http://shot.qip.ru/00R6pv-417zmt2zpO/)
(http://f6.s.qip.ru/~17zmt2zpP.png) (http://shot.qip.ru/00R6pv-617zmt2zpP/)
(http://f6.s.qip.ru/~17zmt2zpQ.png) (http://shot.qip.ru/00R6pv-617zmt2zpQ/)
(http://f5.s.qip.ru/~17zmt2zpR.png) (http://shot.qip.ru/00R6pv-517zmt2zpR/)
(http://f4.s.qip.ru/~17zmt2zpS.png) (http://shot.qip.ru/00R6pv-417zmt2zpS/)
(http://f5.s.qip.ru/~17zmt2zpT.png) (http://shot.qip.ru/00R6pv-517zmt2zpT/)
(http://f3.s.qip.ru/~17zmt2zpU.png) (http://shot.qip.ru/00R6pv-317zmt2zpU/)
(http://f3.s.qip.ru/~17zmt2zpV.png) (http://shot.qip.ru/00R6pv-317zmt2zpV/)
(http://f4.s.qip.ru/~17zmt2zpW.png) (http://shot.qip.ru/00R6pv-417zmt2zpW/)
(http://f5.s.qip.ru/~17zmt2zpX.png) (http://shot.qip.ru/00R6pv-517zmt2zpX/)
(http://f3.s.qip.ru/~17zmt2zpY.png) (http://shot.qip.ru/00R6pv-317zmt2zpY/)[/spoiler]
Я пробовал поймать по стрелке под тригером, но она - гадина, полупрозрачная и в режиме COLORMODE(6) выглядит вот так:
[spoiler](http://f3.s.qip.ru/~17zmt2zq2.png) (http://shot.qip.ru/00R6pv-317zmt2zq2/)
(http://f5.s.qip.ru/~17zmt2zq3.png) (http://shot.qip.ru/00R6pv-517zmt2zq3/)
(http://f2.s.qip.ru/~17zmt2zq5.png) (http://shot.qip.ru/00R6pv-217zmt2zq5/)
(http://f5.s.qip.ru/~17zmt2zq6.png) (http://shot.qip.ru/00R6pv-517zmt2zq6/)[/spoiler]
Если бы она хотя бы свой цвет не меняла, то проблемы не было бы.
Я много раз сталкивался с проблемами, с которыми, на первый взгляд (а в моем случае,и на второй, и на третий :) ), Clickermann не справится, но всегда оказывалось, что не справлялся не Clickermann, а мои познания в его языке и находчивость. Может есть у кого какие идеи? :)
-
Здесь бы увидеть эту стрелку на разных фонах.
Как вариант, могу предлжить считать кол-во "рыжих" пикселеи раздельно по этим зонам (см. скрин).
Если больше в синей - крутим по часовой. В зелёной - против.
Но не факт. Может там такие фоны каверзные бывают что почти уравнивают количество по зонам, помимо стрелки.
-
Как вариант, могу предлжить считать кол-во "рыжих" пикселеи раздельно по этим зонам (см. скрин).
Я думал над этим, но вот такая ситуация сводит эту идею на "нет"...
(http://f4.s.qip.ru/~17zmt2zqW.png) (http://shot.qip.ru/00R6pv-417zmt2zqW/)
-
Тогда считать сумму рыжих и жёлтых. Те цвета что из середины стрелки.
-
Или проверять несколько контрольных точек. как на картинке. Можно больше. И зеркально на левой половине.
Если все цвета с одной стороны имеют один из двух цветов (рыжий или жёлтый) то стрелка туда.
-
С подсчетом цветов идея пролетает... Я просто устал скрины загружать - там пердоманохль с цветами полный.
А вот мне пришла идея только что - ухватиться как-то за последовательность положений самого тригера... Он цвет не меняет, но можно ли поймать именно ПОСЛЕДОВАТЕЛЬНОСТЬ его положений? Надо пробовать...
-
Или проверять несколько контрольных точек. как на картинке. Можно больше. И зеркально на левой половине.
Если все цвета с одной стороны имеют один из двух цветов (рыжий или жёлтый) то стрелка туда.
Это для примера - почему отпадает идея.
-
В общем как-то вот, вот так... :)
https://youtu.be/MitNDDx239A (https://youtu.be/MitNDDx239A)
В итоге пришлось все таки пиксели перебирать и красить:
FOR($y=$y1,$y<$y2+1)
FOR($x=$x1,$x<$x2+1)
$color = pxl($x,$y)
IF($color = 8372159)
PXLREPLACE($x,$y,$x,$y,$color,8372223)
END_IF
IF($color = 8388607)
PXLREPLACE($x,$y,$x,$y,$color,8372223)
END_IF
IF($color ! 8372223)
PXLREPLACE($x,$y,$x,$y,$color,0)
END_IF
END_CYC
END_CYC
IF_PICTURE_IN ($x1,$y1,$x2,$y2, "screens\u_t_l.bmp", -1, 80)
$ms2=$_ms
$chek=0
SETTHREAD (n_po_chas_p, 1)
ELSE
IF($_ms > $ms2+100)
SETTHREAD (n_po_chas_p, 2)
IF($chek = 0)
KEYUP(#W)
KEYUP(#D)
KEYUP(#S)
KEYUP(#A)
$chek = 1
END_IF
END_IF
END_IF
Только сами действия (при обнаружении условия), пришлось выкинуть не в подпрограммы, а в потоки, которые запускаются, а потом останавливаются при условии, что нужная картинка не найдена в течении секунды-полторы (на тот случай, если стрелку на мгновение прикрыл тригер). А вообще я конечно херею... Там, где нужно теребить тригер в стороны, чтобы выйти из каменного состояния, у меня в коде стоит:
THREAD(t_triger, 0)
KEYPRESS(#A)
WAITMS(10)
KEYPRESS(#D)
WAITMS(10)
END_THREAD
Если паузу ставишь в 20 мс, то уже не всегда успеваешь выжить. Это попа... Я помню, как на этом боссе я сутки ломал джойстик... ))
-
Если паузу ставишь в 20 мс, то уже не всегда успеваешь выжить. Это попа... Я помню, как на этом боссе я сутки ломал джойстик... ))
А ты в настройках кликера убрал паузу в 30 мс для KEYPRESS ?
-
и снова много лишних действий :D .
можно обойтись без перебтрания всех пикселей. и зачем менять цвета 8372159 и 8388607 на 8372223. можно же их свести в один из уже существующих, в 8372159 или 8388607 (если конечно 8372223 не существующий).
ладно, принцип такой
PXLREPLACE($x1,$y1,$x2,$y2,8372159,8388607)
//PXLREPLACE($x1,$y1,$x2,$y2,8372223,8388607) // это только если 8372223 уже есть на скрине, и тебе нужно учитывать уже существующие цвета 8372223.
//FOR($y=$y1,$y<$y2+1) //используется только для создания заготовки, которую будем использовать при поиске картинки с использованием игнорируемого цвета 255
// FOR($x=$x1,$x<$x2+1)
// $color = pxl($x,$y)
// IF($color ! 8372223)
// PXLREPLACE($x,$y,$x,$y,$color,255)
// END_IF
// END_CYC
//END_CYC
IF_PICTURE_IN ($x1,$y1,$x2,$y2, "screens\u_t_l.bmp", 255, 80)
//.......
//.......
-
Если паузу ставишь в 20 мс, то уже не всегда успеваешь выжить. Это попа... Я помню, как на этом боссе я сутки ломал джойстик... ))
А ты в настройках кликера убрал паузу в 30 мс для KEYPRESS ?
Ты про это?
-
и зачем менять цвета 8372159 и 8388607 на 8372223. можно же их свести в один из уже существующих, в 8372159 или 8388607 (если конечно 8372223 не существующий).
Там три цвета ) Два первых я крашу в третий, а третьим условием закрашиваю все, кроме этого третьего цвета.
PXLREPLACE($x1,$y1,$x2,$y2,8372159,8388607)
//PXLREPLACE($x1,$y1,$x2,$y2,8372223,8388607) // это только если 8372223 уже есть на скрине, и тебе нужно учитывать уже существующие цвета 8372223.
//FOR($y=$y1,$y<$y2+1) //используется только для создания заготовки, которую будем использовать при поиске картинки с использованием игнорируемого цвета 255
// FOR($x=$x1,$x<$x2+1)
// $color = pxl($x,$y)
// IF($color ! 8372223)
// PXLREPLACE($x,$y,$x,$y,$color,255)
// END_IF
// END_CYC
//END_CYC
IF_PICTURE_IN ($x1,$y1,$x2,$y2, "screens\u_t_l.bmp", 255, 80)
//.......
//.......
Я что-то твоей схемы не пойму... У тебя что - вся искомая картинка одним цветом получается?
Не... Ты убрал весь цикл перебора пикслей и у тебя вообще закрашивается только первый пиксель картинки... Или я чего-то не понимаю...?
Так... Я еще не проснулся... Сейчас кофе попью, покурю и попробую вникнуть. Ты тут и цикл свой какой-то впендюрил )) Просто залочил его зачем-то. Ща вкурю ))
-
Ты про это?
:o
Про это:
-
Я что-то твоей схемы не пойму... У тебя что - вся искомая картинка одним цветом получается?
Не... Ты убрал весь цикл перебора пикслей и у тебя вообще закрашивается только первый пиксель картинки... Или я чего-то не понимаю...?
PXLREPLACE меняет все пикселы N на M в области. Если область -это не один пиксель, то PXLREPLACE сам себе цикл внутри, который на делфи и который не нужно интерпретировать на каждом проходе.
Вот ты сеешь пшеницу... Зачем сажать по одному зёрнышку если команда позволяет взять в жменю и раскидать?
По одному можно тоже, но ооочень долго.
-
Ты про это?
:o
Про это:
Упс... А я в этот файл и не заглядывал никогда... ))) Это что за пауза? Это пауза, между нажатием клавиши и отпусканием, или просто - дополнительная пауза, после KEYPRESS?
-
PXLREPLACE меняет все пикселы N на M в области. Если область -это не один пиксель, то PXLREPLACE сам себе цикл внутри, который на делфи и который не нужно интерпретировать на каждом проходе.
Вот ты сеешь пшеницу... Зачем сажать по одному зёрнышку если команда позволяет взять в жменю и раскидать?
По одному можно тоже, но ооочень долго.
Сорри за тормоза, но для чего в нем тогда координаты указываются? - PXLREPLACE($x1,$y1,$x2,$y2,8372159,8388607) И они же не меняются без цикла...
Аааааа! Это же коры первой и последней точки картинки...!
-
Упс... А я в этот файл и не заглядывал никогда... ))) Это что за пауза? Это пауза, между нажатием клавиши и отпусканием, или просто - дополнительная пауза, после KEYPRESS?
Между. Но на общее время влияет.
Для быстрых-быстрых действий нужно править настройку. Я предпочитаю, после скачивания новой версии, сразу её ставить 0, а задержками управлять в скрипте как нужно.
-
Между.
Благодарю.
Но на общее время влияет.
Это и ежику понятно )) Если вклинивается 30 мс, то выполнение следующей части скрипта сдвигается )
то PXLREPLACE сам себе цикл внутри, который на делфи и который не нужно интерпретировать на каждом проходе.
Иными словами - в цикле:
FOR($y=$y1,$y<$y2+1)
FOR($x=$x1,$x<$x2+1)
$color = pxl($x,$y)
IF($color = 8372159)
PXLREPLACE($x,$y,$x,$y,$color,8372223) // Тут мы зачем-то запускаем еще и внутренний цикл каждый раз?
END_IF
END_CYC
END_CYC
Ептыть...! А почему у меня раньше не возникло вопроса - почему в команде PXLREPLACE четыре координаты, а не две...?
Тогда вот так вот получается?
PXLREPLACE($x1,$y1,$x2,$y2,8372159,8372223)
PXLREPLACE($x1,$y1,$x2,$y2,8388607,8372223)
FOR($y=$y1,$y<$y2+1)
FOR($x=$x1,$x<$x2+1)
$color = pxl($x,$y)
IF($color ! 8372223)
PXLREPLACE($x,$y,$x,$y,$color,0)
END_IF
END_CYC
END_CYC
-
Ну вообще здорово... Этот эмулятор PS2 еще и картинки меняет что ли...? Вчера картинка на шляпке тригера была одной, а сегодня другая... И сегодня все, что работало вчера, не работает...
-
А размер окна тот же? Может потянул.
-
А размер окна тот же? Может потянул.
Да не - все то же самое... Даже по скринам видно, что размер-то "болта" тот же самый...