Author Topic: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL  (Read 9249 times)

0 Members and 3 Guests are viewing this topic.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #15 on: January 17, 2017, 01:12:00 PM »
Нашёл свои посты что тогда делал
http://crapware.aidf.org/forum/index.php?topic=119.msg1562#msg1562

И я угадал, январь 2013г. Версия кликера 4.7 SE
ЭТО начало моего пути(извращений).

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #16 on: January 17, 2017, 01:15:13 PM »
Проявления психических отклонений, они всегда в деталях и в сравнении с общим фоном. Внимательно читайте контекст, если вы решили разработать новую, удобную или полезную функцию, то вы безусловно гений и при отсутствии имеющихся возможностей текущей версии программы вам следовало-бы оказывать всестороннюю помощь.
НО вот в свете того что ваши разработки ничего такого не несут и вы имея коробку конфет, предпочитаете её выбросить по странной причине" Конфет слишком много" и вместо этого начинаете лепить ещё большее число собственных конфеток из Г...на.
Прошу не обижаться, я просто дал вам виденье ситуации со стороны, в любом случае желаю вам творческих успехов!
Спасибо.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #17 on: January 17, 2017, 01:15:27 PM »
Не могли бы вы не надолго вернуться в прошлое...?
Зачем? чтоб мотыгой копать?

Я так понимаю на экране находится несколько похожих картинок. Тогда применяемый IF_PICTURE_IN при поиске первого пиксела не применим. Он находит только первый.
Если можно разбить на области (они известны и постоянны) можно искать в разных областях.
Или заменить на SCANPXL, но!... SCANPXL это лютый п...  получится. так как найдёт их вагон и от каждого нужно проверять. В чём тогда весь смысл данной затеи? Почему не искать картинку? Это будет быстрее в несколько раз.


open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #18 on: January 17, 2017, 01:22:32 PM »
Области известны и постоянны, их 6. В первой находит если задать точку отсчета (она постоянна). Но бывает в первой нет кнопки "ПРОДАТЬ". Как перенести поиск во вторую?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #19 on: January 17, 2017, 01:30:09 PM »
Если углубиться в прошлое то вот нарыл у себя старый скрипт для поиска всех пикселов заданного цвета на экране с помощью  if_pixel_in
Плюсом является возможность отступать на некоторое количество пикселов от найденного что ускоряет поиск.

Code: (clickermann) [Select]
LOGCLEAR
// область поиска
$x1 = 19 // верхний левый угол
$y1 = 94
$x2 = 741 // нижний правый угол
$y2 = 693

// цвет
$color = 255

// отступ
$size = 10

// задержка "мс" минимум 1
$wait = 1
//================================

getscreen
if_pixel_in($x1, $y1, $x2, $y2, $color)
   $count = 0
   //   move($_return1, $_return2)
   LOGWRITE("X: ", $_return1, " ","Y: ", $_return2)
   waitms($wait)
   
   WHILE($var = 0)
      $sY2 = $_return2 + $size
      $sY1 = $_return2
      $var2 = 0
     
      WHILE($var2 = 0)
         if_pixel_in($_return1 + $size, $sY1, $x2, $sY2, $color)
            //   move($_return1, $_return2)
            LOGWRITE("X: ", $_return1, " ","Y: ", $_return2)
            waitms($wait)
            INC($count, 1)
         Else
            $var2 = 1
         end_if
      END_CYC
     
      if_pixel_in($x1, $_return2 + $size, $x2, $y2, $color)
         //   move($_return1, $_return2)
         LOGWRITE("X: ", $_return1, " ","Y: ", $_return2)
         waitms($wait)
      Else
         $var = 1
      end_if
     
      INC($count, 1)
     
   END_CYC
end_if

LOGWRITE("Количество: ", $count)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #20 on: January 17, 2017, 02:08:49 PM »
Зачем ему этот костыль, который медленней в несколько раз. Тогда выбора небыло, а сейчас не понятен выбор.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #21 on: January 17, 2017, 02:21:32 PM »
Найти кнопки "продать"? Не очень понятно, чем не устраивает картинка.
Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($SCAN, 0,0,$_xmax,$_ymax, "продать.bmp")

$SCAN_size = ARRSIZE($SCAN)
FOR($i=0, $i < $SCAN_size, 2)
    $X = $SCAN[$i]
    $Y = $SCAN[$i+1]
    LOGWRITE ("X: ", $X, " Y: ", $Y)
    MOVE($X, $Y)
    WAITMS(500)   
END_CYC
UNDEFINE($ARR_SCAN)
HALT


open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #22 on: January 17, 2017, 02:25:51 PM »
Найти кнопки "продать"? Не очень понятно, чем не устраивает картинка.
Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($SCAN, 0,0,$_xmax,$_ymax, "продать.bmp")

$SCAN_size = ARRSIZE($SCAN)
FOR($i=0, $i < $SCAN_size, 2)
    $X = $SCAN[$i]
    $Y = $SCAN[$i+1]
    LOGWRITE ("X: ", $X, " Y: ", $Y)
    MOVE($X, $Y)
    WAITMS(500)   
END_CYC
UNDEFINE($ARR_SCAN)
HALT
Изначально так и было (по картинке). ПОКАЗАЛОСЬ что попиксельно удобней.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #23 on: January 17, 2017, 02:27:25 PM »
Оказалось - костыли :D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #24 on: January 17, 2017, 02:44:26 PM »
Если бы найти нужно было только одну, то ещё был бы смысл.


open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #25 on: January 17, 2017, 03:02:30 PM »
Мой дилетантский мозг подсказал мне что "нарисовать" виртуальную картинку в памяти скрипта проще удобней, чем нарезАть и хранить кучу маленьких кусочков рядом с этим скриптом.
« Last Edit: January 17, 2017, 03:15:03 PM by open_78 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #26 on: January 17, 2017, 03:37:28 PM »
Клондайк никто не узнал. Хорошо закрасил.


open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #27 on: January 17, 2017, 04:03:29 PM »
Клондайк никто не узнал. Хорошо закрасил.
Внимание на кнопках сосредотачивал. ;)

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #28 on: January 17, 2017, 04:21:34 PM »
Я красиво с переменными писать не умею. Но вот это уродство работает:
Code: (clickermann) [Select]
$_zona1 = 769
$_zona2 = 974
$_zona3 = 1179
$_up = 626
$_down = 878

$check = 0    //продаем склад
WHILE($check = 0)
   WAITMS(100)
   GETSCREEN
   COLORMODE(6)
   IF_PIXEL_IN($_zona1,$_up,$_zona1+1,$_up+1,4177919)
      IF((PXL($_return1+32,$_return2+1)=4177919)&(PXL($_return1-7,$_return2+5)=4161535)&(PXL($_return1+32,$_return2+2)=8388607))
      END_IF
   ELSE
      IF_PIXEL_IN($_zona2,$_up,$_zona2+1,$_up+1,4177919)
         IF((PXL($_return1+32,$_return2+1)=4177919)&(PXL($_return1-7,$_return2+5)=4161535)&(PXL($_return1+32,$_return2+2)=8388607))
         END_IF
      ELSE
         IF_PIXEL_IN($_zona3,$_up,$_zona3+1,$_up+1,4177919)
            IF((PXL($_return1+32,$_return2+1)=4177919)&(PXL($_return1-7,$_return2+5)=4161535)&(PXL($_return1+32,$_return2+2)=8388607))
            END_IF
         ELSE
            IF_PIXEL_IN($_zona1,$_down,$_zona1+1,$_down+1,4177919)
               IF((PXL($_return1+32,$_return2+1)=4177919)&(PXL($_return1-7,$_return2+5)=4161535)&(PXL($_return1+32,$_return2+2)=8388607))
               END_IF
            ELSE
               IF_PIXEL_IN($_zona2,$_down,$_zona2+1,$_down+1,4177919)
                  IF((PXL($_return1+32,$_return2+1)=4177919)&(PXL($_return1-7,$_return2+5)=4161535)&(PXL($_return1+32,$_return2+2)=8388607))
                  END_IF
               ELSE
                  IF_PIXEL_IN($_zona3,$_down,$_zona3+1,$_down+1,4177919)
                     IF((PXL($_return1+32,$_return2+1)=4177919)&(PXL($_return1-7,$_return2+5)=4161535)&(PXL($_return1+32,$_return2+2)=8388607))
                     END_IF
                  ELSE
                     $check = 1
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
   MOVE($_return1+45, $_return2-35)
   WAITMS(50)
   LCLICK($_return1+45, $_return2-35)
   WAITMS(50)
   KEYSTRING("999999",5)
   WAITMS(50)
   LCLICK($_return1+65, $_return2+15)
   WAITMS(200)
END_CYC
HALT
« Last Edit: January 17, 2017, 04:57:05 PM by open_78 »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: IF_PICTURE_IN заменить на IF_PIXEL_IN/PXL
« Reply #29 on: January 17, 2017, 04:29:27 PM »
А нахрена мне тогда IF_PIXEL_IN??? Если я точно знаю координаты всех шести пикселей...