Author Topic: Поиск картинки и запоминание координат  (Read 2466 times)

0 Members and 2 Guests are viewing this topic.

Vladimir

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Вот видео как наглядно  происходит проверка https://youtu.be/YtQ9a9OAkOE
Эта часть скрипта, другая часть работает как нужно.
Code: (clickermann) [Select]
SUB(check_1)
   
    WAITMS(160)
    $ok = 0
    getscreen($x+50,$y-70, $x+200,$y-30)
    IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne1.bmp")
        $ok = 1
    ELSE
        IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne2.bmp")
            $ok = 1
        ELSE
            IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne3.bmp")
                $ok = 1
            END_IF
        END_IF
    END_IF
   
END_SUB

SUB(action_1)
    lclick($x, $y+5)
END_SUB


SUB(action_2)
    lclick($x+50, $y-23)
END_SUB



SUB(find_501)
    IF_PICTURE_IN($x-10,$y-35, $x+34,$y, "501.bmp")
        lclick($x, $y-25)
        check_1()
        IF($ok)
            LOGWRITE("Найден не тот объект" )
            action_1()
        ELSE
            LOGWRITE(" подтверждён ")
            action_2()
        END_IF
    END_IF
    //MOVE($ox, $oy)
    WAITMS(5)
   
END_SUB

SUB(find_500)
   
    getscreen(20,153, 1920,350)
   
    scanpicture($var, 20,153, 1920,350, "500.bmp")
   
    while (arrsize($var) > 0)
        $y = arrpop($var)
        $x = arrpop($var)
        find_501()
    end_cyc
END_SUB
Картинка 500- цена, 501-свиток, дальше ne1, ne2 , ne3- проверка названия свитка.
Так вот у меня он проверяет постоянно, нужно так чтоб проверил и запомнил что этот свиток не нужен. И после запомнил этого что на том месте находится не тот свиток, ну и соответственно проверка дальше шла если свитки ещё находит
« Last Edit: February 21, 2020, 03:01:54 PM by Vint »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Поиск картинки и запоминание координат
« Reply #1 on: February 21, 2020, 08:43:34 AM »
Судя по видео, я бы на твоем месте сделал бы иначе. У тебя замки эти наверняка всегда в фиксированных координатах. Если скрипт находит картинку - "Мой магазин", но в какой-нибудь из координат не находит замок, то туда и кликает.
Я не ду... Потому и не бу...

Vladimir

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Поиск картинки и запоминание координат
« Reply #2 on: February 21, 2020, 02:18:54 PM »
Тогда он будет кликать по любому предмету, даже если это не свиток, если я вас правильно понял.
А мне нужно чтоб он проверил нажал на нужный свиток, после находит назва свитка  и если это название подтверждает( то есть ($ok)) то он ждёт или исчезновения предмета с тех координат или появления нового свитка( и он так же начнёт проверять его название)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинки и запоминание координат
« Reply #3 on: February 21, 2020, 03:06:55 PM »
ну и соответственно проверка дальше шла если свитки ещё находит

Где в этом коде "дальше"?
Непонятно как часто вызывается find_500 и что там меняется между вызовами.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинки и запоминание координат
« Reply #4 on: February 21, 2020, 04:24:00 PM »
Code: (clickermann) [Select]
SUB(check_1)
    WAITMS(160)
    $ok = 0
    getscreen($x+50,$y-70, $x+200,$y-30)
    IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne1.bmp")
        $ok = 1
    ELSE
        IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne2.bmp")
            $ok = 1
        ELSE
            IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne3.bmp")
                $ok = 1
            END_IF
        END_IF
    END_IF
   
END_SUB

SUB(action_1)
    lclick($x, $y+5)
END_SUB

SUB(action_2)
    lclick($x+50, $y-23)
END_SUB

SUB(find_501)
    IF_PICTURE_IN($x-10,$y-35, $x+34,$y, "501.bmp")
        lclick($x, $y-25)
        check_1()
        IF($ok)
            LOGWRITE("Найден не тот объект" )
            action_1()
            // добавляем неправильный объект в список
            $object = STRCONCAT(":", $x, ",", $y, ":")
            $bad_objects = STRCONCAT($bad_objects, $object)
        ELSE
            LOGWRITE(" подтверждён ")
            action_2()
        END_IF
    END_IF
    //MOVE($ox, $oy)
    WAITMS(5)
END_SUB

SUB(find_500)
    getscreen(20,153, 1920,350)
    scanpicture($var, 20,153, 1920,350, "500.bmp")
   
    while(arrsize($var) > 0)
        $y = arrpop($var)
        $x = arrpop($var)
       
        // проверяем на вхождение в список неправильных
        $object = STRCONCAT(":", $x, ",", $y, ":")
        $bad = 0
        $bad = STRPOS($bad_objects, $object)
        IF($bad = 0)
            find_501()
        END_IF
    end_cyc
END_SUB

$bad_objects = "" // сбрасываем список неправильных объектов когда нужно
find_500()
find_500()   // ХЗ... при вызове будет учитывать и не обрабатывать "неправильные"
« Last Edit: February 21, 2020, 04:27:17 PM by Vint »


Vladimir

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Поиск картинки и запоминание координат
« Reply #5 on: February 21, 2020, 07:56:15 PM »
от полый скрипт ...
SUB(sort_win)
   $siz = ARRSIZE($window)
   $srtcheck = 0
   FOR($a=$siz-2, $a > 0, -2)
      FOR($b=0, $b < $a, 2)
         IF($window[$b] > $window[$b+2])
            $srtcheck = 1
            $tmp = $window[$b]
            $tmp2 = $window[$b+1]
            $window[$b] = $window[$b+2]
            $window[$b+1] = $window[$b+3]
            $window[$b+2] = $tmp
            $window[$b+3] = $tmp2
         END_IF
      END_CYC
      IF($srtcheck = 0)
         $a = 0
      END_IF
   END_CYC
END_SUB


SUB(check_1)
    WAITMS(160)
    $ok = 0
    getscreen($x+50,$y-70, $x+200,$y-30)
    IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne1.bmp")
        $ok = 1
    ELSE
        IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne2.bmp")
            $ok = 1
        ELSE
            IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne3.bmp")
                $ok = 1
            END_IF
        END_IF
    END_IF
 
END_SUB
 
SUB(action_1)
    lclick($x, $y+5)
END_SUB
 
SUB(action_2)
    lclick($x+50, $y-23)
END_SUB
 
SUB(find_501)
    IF_PICTURE_IN($x-10,$y-35, $x+34,$y, "501.bmp")
        lclick($x, $y-25)
        check_1()
        IF($ok)
            LOGWRITE("Найден не тот объект" )
            action_1()
            // добавляем неправильный объект в список
            $object = STRCONCAT(":", $x, ",", $y, ":")
            $bad_objects = STRCONCAT($bad_objects, $object)
        ELSE
            LOGWRITE(" подтверждён ")
            action_2()
        END_IF
    END_IF
    //MOVE($ox, $oy)
    WAITMS(5)
END_SUB
 
SUB(find_500)
    getscreen(1920,153, 2920,350)
    scanpicture($var, 1920,153, 2920,350, "500.bmp")
 
    while(arrsize($var) > 0)
        $y = arrpop($var)
        $x = arrpop($var)
 
        // проверяем на вхождение в список неправильных
        $object = STRCONCAT(":", $x, ",", $y, ":")
        $bad = 0
        $bad = STRPOS($bad_objects, $object)
        IF($bad = 0)
            find_501()
        END_IF
    end_cyc
END_SUB
 
$bad_objects = "" // сбрасываем список неправильных объектов когда нужно
find_500()

SUB(find_6)
   GETSCREEN($wx1,$wy1, $wx2,$wy2)
   IF_PICTURE_IN($wx1,$wy1, $wx2,$wy2, "6.bmp")
      LCLICK($_return1, $_return2)
      LCLICK($_return1+60, $_return2+9)
   END_IF
END_SUB
SUB(find_10)
   GETSCREEN(1267,569, 1705,782)
   IF_PICTURE_IN(1267,569, 1705,782, "10.bmp")
      LCLICK($_return1, $_return2)
      LCLICK($_return1+60, $_return2+9)
   END_IF
END_SUB
SUB(check_count)
   $ok = 0
   IF_PICTURE_IN($ox,$oy, $ox+48,$oy+48, "1.1.bmp")
      $ok = 1
   ELSE
      IF_PICTURE_IN($ox,$oy, $ox+48,$oy+48, "1.2.bmp", -1,40)
         $ok = 1
      END_IF
   END_IF
END_SUB

SUB(action)
   LCLICK($ox, $oy)
   WAITMS(20)
   LCLICK($ox+60, $oy+9)
END_SUB

SUB(find_object, $filename)
   UNDEFINE($object)
   //GETSCREEN($wx1,$wy1, $wx2,$wy2)
   SCANPICTURE($object, $wx1,$wy1, $wx2,$wy2, $filename)
   
   $object_size = ARRSIZE($object)
   FOR($i=0, $i < $object_size, 2)
      $ox = $object[$i]
      $oy = $object[$i+1]
      check_count()
      IF($ok)
         LOGWRITE("Найден объект ", $filename, " в окне № ", $w/2 + 1)
         action()
      ELSE
         LOGWRITE("НЕ подтверждён ", $filename, " Окно № ", $w/2 + 1)
      END_IF
     
      //MOVE($ox, $oy)
      WAITMS(5)
   END_CYC
END_SUB
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


UNDEFINE($window)
GETSCREEN
SCANPICTURE($window, 0,0, 1850,650, "main.bmp", -1,70)

$window_count = ARRSIZE($window)
LOGWRITE("Найдено окон: ", $window_count/2)
sort_win()

WHILE(1)
   FOR($w = 0, $w < $window_count, 2)
      $wx1 = $window[$w] + 28
      $wy1 = $window[$w+1] + 24
      $wx2 = $window[$w] + 302
      $wy2 = $window[$w+1] + 140
     
      find_object("1.bmp")
      find_object("3.bmp")
      find_object("4.bmp")
      find_object("7p.bmp")
      find_500()
      find_6()
      find_100()
   END_CYC
   WAITMS(3)
END_CYC

HALT

Vladimir

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Поиск картинки и запоминание координат
« Reply #6 on: February 21, 2020, 08:55:21 PM »
Code: (clickermann) [Select]
SUB(check_1)
    WAITMS(160)
    $ok = 0
    getscreen($x+50,$y-70, $x+200,$y-30)
    IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne1.bmp")
        $ok = 1
    ELSE
        IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne2.bmp")
            $ok = 1
        ELSE
            IF_PICTURE_IN($x+50,$y-70, $x+200,$y-30, "ne3.bmp")
                $ok = 1
            END_IF
        END_IF
    END_IF
   
END_SUB

SUB(action_1)
    lclick($x, $y+5)
END_SUB

SUB(action_2)
    lclick($x+50, $y-23)
END_SUB

SUB(find_501)
    IF_PICTURE_IN($x-10,$y-35, $x+34,$y, "501.bmp")
        lclick($x, $y-25)
        check_1()
        IF($ok)
            LOGWRITE("Найден не тот объект" )
            action_1()
            // добавляем неправильный объект в список
            $object = STRCONCAT(":", $x, ",", $y, ":")
            $bad_objects = STRCONCAT($bad_objects, $object)
        ELSE
            LOGWRITE(" подтверждён ")
            action_2()
        END_IF
    END_IF
    //MOVE($ox, $oy)
    WAITMS(5)
END_SUB

SUB(find_500)
    getscreen(20,153, 1920,350)
    scanpicture($var, 20,153, 1920,350, "500.bmp")
   
    while(arrsize($var) > 0)
        $y = arrpop($var)
        $x = arrpop($var)
       
        // проверяем на вхождение в список неправильных
        $object = STRCONCAT(":", $x, ",", $y, ":")
        $bad = 0
        $bad = STRPOS($bad_objects, $object)
        IF($bad = 0)
            find_501()
        END_IF
    end_cyc
END_SUB

$bad_objects = "" // сбрасываем список неправильных объектов когда нужно
find_500()
find_500()   // ХЗ... при вызове будет учитывать и не обрабатывать "неправильные"
https://youtu.be/OjWpMbqqZXY
Теперь так. И если  на то место поставить новый свиток то он не проверяет