Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: krot12348 on May 04, 2015, 05:35:05 PM
-
Всем привет, появился вопрос и по моему его никто не обсуждал.
GETSCREEN
IF_PIXEL_IN(0,0,$_xmax,$_ymax,7030057)
LDOWN ($_return1, $_return2)
WAITMS(RND(80,160))
LUP($_return1, $_return2)
WAITMS(RND(80,140))
goto(go)
Короче в чём суть дела, цвет мы находим, но находим на всём экране,(везде где он есть)
У нас есть перс который стоит в центре карты (экрана ) и собирает лут. но собирает его как попало.
Если на экране скажем 10 ящиков лута, то он собирает тот ,который находится в верхнем левом углу,
вот он зараза и летит туда, хотя и в центре есть.
Я пробовал несколько таких блоков кода с координатами от центра, всё получается. но увеличивается
время поиска и нагрузка на проц.
Может есть вариант попроще, подскажите уважаемые форумчане, хотяб мыслю подкиньте,
Как сделать чтоб лут собирался от центра экрана.
-
Вот скрипт, вычисляет ближайшую от центра координату.
GETSCREEN
SCANPXL($ARR_SCAN, 0,0, $_xmax,$_ymax, 7030057)
$dist = 10000
$Xcentr = INT($_xmax/2)
$ycentr = INT($_ymax/2)
WHILE (ARRSIZE($ARR_SCAN) > 0)
$Y = ARRPOP($ARR_SCAN)
$X = ARRPOP($ARR_SCAN)
IF(DIST($Xcentr, $ycentr, $X, $Y) < $dist)
$dist = DIST($Xcentr, $ycentr, $X, $Y)
$X_centr = $X
$Y_centr = $Y
END_IF
END_CYC
UNDEFINE($ARR_SCAN)
IF($dist ! 10000)
LDOWN($X_centr,$Y_centr) // клик
WAITMS(RND(80,160))
LUP($X_centr,$Y_centr)
WAITMS(RND(80,140))
END_IF
-
ну и я какраз коечто настряпал, принцип тотже
$x=0
$y=0
$cent_x=int($_xmax/2)
$cent_y=int($_ymax/2)
GETSCREEN
SCANPXL($arr,0,0,$_xmax,$_ymax,7030057)
FOR($a=0,$a<ARRSIZE($arr),2)
IF(DIST($arr[$a],$arr[$a+1],$cent_x,$cent_y)<DIST($x,$y,$cent_x,$cent_y))
$x=$arr[$a]
$y=$arr[$a+1]
END_IF
END_CYC
UNDEFINE($arr)
IF(($x+$y)>0)
LDOWN ($x, $y)
WAITMS(RND(80,160))
LUP($x, $y)
WAITMS(RND(80,140))
END_IF
-
Я не так давно делал по заданию, только там ещё и радиус ограничен и изометрия (по вертикали 0,75)
Ну типа этого
$mob = "Моб" // пример имён картинок Моб1_1
$mob_n = 2 // количество мобов
$count = 10 // число действий
$log = 1 // вывод лога 1- да, 0- нет
$mobcorX = 0 // коррекция X найденного моба
$mobcorY = 0 // коррекция Y найденного моба
LOGCLEAR
// ищем себя
GETSCREEN
COLORMODE(7)
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "str.bmp", 65280, 90)
$ggX = $_return1 +3 //+ 4
$ggY = $_return2 //+ 64
$vX1 = $ggX - 350
$vY1 = $ggY - 200
$vX2 = $ggX + 350
$vY2 = $ggY + 200
IF($vX1 < 0)
$vX1 = 0
END_IF
IF($vY1 < 0)
$vX1 = 0
END_IF
IF($vX2 > $_xmax)
$vX2 = $_xmax
END_IF
IF($vY2 > $_ymax)
$vX2 = $_ymax
END_IF
IF($log = 1)
LOGWRITE ("Нашли себя ", $ggX, " / ", $ggY)
END_IF
ELSE
LOGWRITE ("НЕ нашли себя! СТОП")
HALT
END_IF
GETSCREEN($vX1,$vY1,$vX2,$vY2)
COLORMODE(6,$vX1,$vY1,$vX2,$vY2)
$len = 0
FOR($n=1, $n < $mob_n+1)
FOR($i=1, $i < 7)
SCANPICTURE($arr, $vX1,$vY1,$vX2,$vY2, STRCONCAT($mob, $n, "_", $i, ".bmp"), -1, 90)
//IF($log = 1)
//LOGWRITE ("Ищем ", STRCONCAT($mob, $n, "_", $i, ".bmp"))
//END_IF
IF($len ! ARRSIZE($arr))
IF($log = 1)
LOGWRITE ("Найдено ", STRCONCAT($mob, $n, "_", $i, ".bmp ", (ARRSIZE($arr)-$len)/2, " шт."))
END_IF
$len = ARRSIZE($arr)
END_IF
END_CYC
END_CYC
FOR($i=0, $i < (ARRSIZE($arr)/2))
$mobX = $arr[$i*2] + $mobcorX
$mobY = $arr[$i*2+1] + $mobcorY
$mobYiz = INT(($mobY - $ggY)*1.75 + $ggY)
$dist[$i] = DIST($ggX,$ggY,$mobX,$mobYiz)
LOGWRITE("dist[", $i, "] = ", $dist[$i])
END_CYC
$num = 0
LOGWRITE(" ")
WHILE(($num*2 < ARRSIZE($arr)) & ($num < $count))
$min = $dist[$num]
$ind = $num
FOR($i=($num+1), $i < ARRSIZE($dist))
IF($dist[$i] < $min)
$min = $dist[$i]
$ind = $i
END_IF
END_CYC
LOGWRITE($num, " минимум: ", $min, " [", $ind, "]")
// меняем мистами минимальную дистанцию и текущую
$dtemp = $dist[$ind]
$dist[$ind] = $dist[$num]
$dist[$num] = $dtemp
// меняем мистами коры с мин. дистанцией и текущие
$X = $arr[$ind*2]
$Y = $arr[$ind*2+1]
$arr[$ind*2] = $arr[$num*2]
$arr[$ind*2+1] = $arr[$num*2+1]
$arr[$num*2] = $X
$arr[$num*2+1] = $Y
IF($log = 1)
LOGWRITE($X, " / ", $Y)
MOVE($X, $Y)
//WAITMS(900)
END_IF
//LCLICK($X, $Y) // Клик
LDOWN($X, $Y)
WAITMS(70)
LUP($X, $Y)
WAITMS(100)
INC($num)
END_CYC
KEYPRESS(#a)
KEYPRESS(#r)
UNDEFINE($arr)
UNDEFINE($dist)
HALT
-
Ребят, большое спасибо за вашу помощь , скрипты работают на ура.
Скрипт от dramster вроде постабильней.