Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: krot12348 on May 04, 2015, 05:35:05 PM

Title: Определение центральных координат в области
Post 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 ящиков лута, то он собирает тот ,который находится в верхнем левом углу,
вот он зараза и летит туда, хотя и в центре есть.
Я пробовал несколько таких блоков кода с координатами от центра, всё получается. но увеличивается
время поиска и нагрузка на проц.
Может есть вариант попроще, подскажите уважаемые форумчане, хотяб мыслю подкиньте,
Как сделать чтоб лут собирался от центра экрана.
Title: Re: Определение координат пикселей
Post by: Oraven on May 04, 2015, 07:13:40 PM
Вот скрипт, вычисляет ближайшую от центра координату.

Code: (clickermann) [Select]
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
Title: Re: Определение координат пикселей
Post by: dramster on May 04, 2015, 07:21:09 PM
ну и я какраз коечто настряпал, принцип тотже
Code: (clickermann) [Select]
$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
Title: Re: Определение координат пикселей
Post by: Vint on May 04, 2015, 10:08:01 PM
Я не так давно делал по заданию, только там ещё и радиус ограничен и изометрия (по вертикали 0,75)

Ну типа этого
Code: (clickermann) [Select]
$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
Title: Re: Определение центральных координат в области
Post by: krot12348 on May 10, 2015, 03:24:54 PM
Ребят, большое спасибо за вашу помощь , скрипты работают на ура.
Скрипт от dramster вроде постабильней.