Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Piano GX on February 27, 2016, 08:58:18 PM
-
Нужно написать программу,которая считывает кол-во пикселей в данной области(команда scanpxl), а после получения данных о координатах пикселей, прокликать по очереди каждый пиксель. Я написал программу, но она бешенно стучит по одной пикселей, помогите)))
-
Все есть в шаблонах
GETSCREEN
SCANPXL($ARR_SCAN, 0,0, $_xmax,$_ymax, 255)
$ARR_NUM = 0
$SHIFT_X = 1 // смещение (кол-во игнор пикселов после найденного)
$SHIFT_Y = 1
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
$X = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
$Y = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
IF(($X > $X2) | ($Y > $Y2))
$X2 = $X + $SHIFT_X
$Y2 = $Y + $SHIFT_Y
LCLICK($X, $Y) // Клик
WAITMS(100)
END_IF
END_CYC
UNDEFINE($ARR_SCAN)
-
Большое спасибо, работает. Только я не понял, что такое SHIFT , вернее как он работает, и что вы делаете в IF
-
ошибся, не всегда работает
-
Например на экране есть 3 красных объекта размером в 10x10 пикселей. Функция SCANPXL вернет все координаты красных пикселей. Но нам не нужно кликать в каждый пиксел на объекте, нужен лишь 1 клик.
Вот поэтому мы выставляем в параметрах
$SHIFT_X = 10 // смещение (кол-во игнор пикселов после найденного)
$SHIFT_Y = 10
чтобы клик пришелся только на первый пиксел а все остальные, в пределах 10x10 ниже и правее от этого пиксела, были пропущены.
Если уж тебе нужно кликать на каждый пиксел то пиши так
GETSCREEN
SCANPXL($ARR_SCAN, 0,0, $_xmax,$_ymax, 255)
FOR($a=0,$a<ARRSIZE($ARR_SCAN),2) // здесь в цикле мы выводим все пары координат из массива
LCLICK($ARR_SCAN[$a], $ARR_SCAN[$a+1]) // Клик
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
-
СПАСИБО. if_PIXEL_IN начинает работать с левого верхнего угла ?
-
getscreen
define($W,0)
if_pixel_in(1058,87,1180,136,2928382) //ищет моба на карте
$W=1
end_if
IF($W=0) //выходит, если не нашёл моба
KEYPRESS(#S)
end_if
В чем проблема, он не выходит с боя, когда нет мобов
-
ПРограмма у меня такова. если есть моб по близости, делает атаку и делает ход.
Я хочу чтобы он постоянно атаковал. а не чтобы я постоянно запускал прогу, поэтому убрал halt
И почему когда я убераю HALT , он начинает делать программу не с начала. а с конца только???
То есть не атакуя делает ход
-
// New Script
// Author: Anonymous
// Version: 1.0 (27.02.2016)
#name "New Script"
// begin your script here
WAIT(2)
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
END_iF
getscreen
define($w,0)
if_pixel_in(1058,87,1180,136,2928382) //ищет моба на карте
$w=1
end_if
IF($w=0) // выходит с боя если не нашел
KEYPRESS(#S)
end_if
DEFINE($E,0)
GETSCREEN
if_pixel_in(194,86, 1049,466, 4867928, 8354971, 6709384,14540253,13224393,12829897)//смотрит моба по близости
INC($E,1)
END_IF
IF($E=0)//пропускает ход если нет моба рядом, кстати это тоже не работает
KEYPRESS($D)
END_IF
if($E>0) //атакует если нашел
getscreen
define($a,2)
while($a>0)
if_pixel_in(194,86, 1049,433, 4867928, 8354971, 6709384,14540253,13224393,12829897,9013641,3092271,9474962)
lclick($_return1, $_return2)
DEFINE($Y,$_RETURN2)
END_IF
inc($a,-1)
END_CYC //убит 1 моб
WAITMS(20)
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
END_iF
WAITMS(40)
define($B,2) //2 моб
while($B>0)
if_pixel_in(194,$Y+1, 1049,433, 4867928, 8354971, 6709384,14540253,13224393,12829897,9013641,3092271,9474962)
lclick($_return1, $_return2)
$Y=$_RETURN2
END_IF
INC($B,-1)
end_cyc
WAITMS(20)
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
END_iF
WAITMS(40)
WAITMS(40)
define($R,2) //3 моб
while($R>0)
if_pixel_in(194,$Y+1, 1049,433, 4867928, 8354971, 6709384,14540253,13224393,12829897,9013641,3092271,9474962)
lclick($_return1, $_return2)
$Y=$_RETURN2
END_IF
INC($R,-1)
end_cyc
WAITMS(20)
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
END_iF
WAITMS(40)
WAITMS(40)
define($T,2) //4 моб
while($R>0)
if_pixel_in(194,$Y+1, 1049,433, 4867928, 8354971, 6709384,14540253,13224393,12829897,9013641,3092271,9474962)
lclick($_return1, $_return2)
$Y=$_RETURN2
END_IF
INC($T,-1)
end_cyc
WAITMS(20)
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
END_iF
WAITMS(40)
WAITMS(40)
define($U,2) //5 моб
while($R>0)
if_pixel_in(194,$Y+1, 1049,433, 4867928, 8354971, 6709384,14540253,13224393,12829897,9013641,3092271,9474962)
lclick($_return1, $_return2)
$Y=$_RETURN2
END_IF
INC($U,-1)
end_cyc
WAIT(1)
KEYPRESS(#R)
keypress(#D) //делает ход, вот после того как убераем halt начинает, делать только эту команду
$w=0
wait(1)
end_if
-
прежде чем искать пикселы нужно сделать снимок в буфер кликера командой GETSCREEN. У тебя первый же поиск без снимка.
DEFINE объявляет переменную но потом уже не влияет на неё, поэтому все твои переменные на втором круге остаются со старыми значениями.
Да и вообще все пишется куда проще.
Вот оптимизированный исправленный код.
GETSCREEN
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
WAITMS(100)
END_iF
GETSCREEN
if_pixel_in(1058,87,1180,136,2928382) //ищет моба на карте
ELSE
KEYPRESS(#S) // выходит с боя если не нашел
WAITMS(100)
end_if
SUB(mob,$cor_Y)
FOR($a=0,$a<2) //2 моб
GETSCREEN
if_pixel_in(194,$cor_Y, 1049,433, 4867928, 8354971, 6709384,14540253,13224393,12829897,9013641,3092271,9474962)
lclick($_return1, $_return2)
$Y=$_RETURN2
WAITMS(50)
END_IF
END_CYC
WAITMS(20)
GETSCREEN
IF_PIXEL_IN(975,428,976,429,5587757)
KEYPRESS(#R)
WAITMS(50)
END_iF
WAITMS(40)
END_SUB
GETSCREEN
if_pixel_in(194,86, 1049,466, 4867928, 8354971, 6709384,14540253,13224393,12829897)//смотрит моба по близости
//атакует если нашел
mob(86) // 1 моб
mob($Y+1) // 2 моб
mob($Y+1) // 3 моб
mob($Y+1) // 4 моб
mob($Y+1) // 5 моб
WAIT(1)
KEYPRESS(#R)
WAITMS(50)
keypress(#D) //делает ход, вот после того как убераем halt начинает, делать только эту команду
wait(1)
ELSE
KEYPRESS($D) //пропускает ход если нет моба рядом, кстати это тоже не работает
WAITMS(100)
END_IF