Как-то так:
SUB(find_glass) //==============================================================
GETSCREEN // обязательно задаём область
COLORMODE(8) // обязательно задаём область
SCANPICTURE($scan, 0,0, $_xmax,$_ymax, "стакан.bmp", -1, 94)
$dist_min = 10000
$scan_size = ARRSIZE($scan)
FOR($i=0, $i < $scan_size, 2)
$X = $scan[$i]
$Y = $scan[$i+1]
$dist = DIST($X,$Y, $old_x,$old_y)
IF($dist < $dist_min)
$dist_min = $dist
$min_x = $X
$min_y = $Y
END_IF
END_CYC
UNDEFINE($scan)
IF($dist_min < 10000)
$old_x = $min_x
$old_y = $min_y
ELSE
LOGWRITE("Ошибка в поиске")
HALT
END_IF
WAITMS(10)
END_SUB
//==============================================================================
// ждём кристалл
$check = 0
WHILE($check = 0)
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "diamond.bmp", -1, 90)
$check = 1
$diamond_x = $_return1
$diamond_y = $_return2
LOGWRITE("--------------------------")
LOGWRITE("diamond X/Y ", $diamond_x, " / ", $diamond_y)
END_IF
WAITMS(100)
END_CYC
// ждём пока кристалл пропадёт
$check = 0
WHILE($check = 0)
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "diamond.bmp", -1, 90)
ELSE
$check = 1
END_IF
WAITMS(50)
END_CYC
// следим за стаканом
$time = $_ms + 3000
$stop = 0
WHILE($stop = 0)
$t_x = $old_x
$t_y = $old_y
find_glass()
IF((ABS($t_x - $old_x) < 3) | (ABS($t_y - $old_y) < 3))
IF($time < $_ms)
$stop = 1
END_IF
ELSE
$time = $_ms + 3000
END_IF
END_CYC
$result_x = $old_x - 4
$result_y = $old_y + 45
LOGWRITE("Поднимаем стакан X/Y ", $result_x, " / ", $result_y)
LCLICK($result_x + RND(-20,20), $result_y + RND(-20,20))
Только заготовку самого кристалла и параметры его поиска нужно подобрать.
А так же задать область для гетскрина, колормода и поиска для сокращения времени поиска.