Author Topic: Простенький скрипт.Техномагия.Вопрос.  (Read 3847 times)

0 Members and 1 Guest are viewing this topic.

Sania

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Добрый вечер,помогите пожалуйста понять почему не повторяется цыкл(один раз исполняются все  SUB-ы и кликер замирает)

Code: (clickermann) [Select]
SUB(ПОИСК)  //ПОИСК МОБА,НАПАДЕНИЕ
WAIT(1)
$check=0
WHILE($check=0)
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN(358,193,735,475,"oktupulus.bmp",-1,60)
$check=1
LCLICK($_return1+10,$_return2+25)
WAITMS(100)
ELSE
WAITMS(100)
END_IF
END_CYC
END_SUB

SUB(БОЙ)  //ПРИ ПОЯВЛЕНИИ ИНДИКАТОРА КЛИКАЕМ УДАР И ТАК ДО ПОБЕДЫ
WAIT(1)
$check=0
WHILE($check=0)
GETSCREEN
IF_PIXEL_IN(311,128,311,128,917481)
$check=1
WAIT(1)
LCLICK(323,435)
WAITMS(100)
END_IF
END_CYC

WAIT(1)
$check=0
WHILE($check=0)
GETSCREEN
IF_PIXEL_IN(311,128,311,128,917481)
$check=1
WAIT(1)
LCLICK(323,435)
WAITMS(100)
END_IF
END_CYC


WAIT(1)
$check=0
WHILE($check=0)
GETSCREEN
IF_PIXEL_IN(311,128,311,128,917481)
$check=1
WAIT(1)
LCLICK(323,435)
WAIT(5)
LCLICK(500,431,524,446)
END_IF
END_CYC
END_SUB


SUB(ВЫХОД)  //ПРИ ПОЯВЛЕНИИ ПОБЕДНОЙ ИКОНКИ "ОК" КЛИКАЕМ НА НЕЁ
WAIT(5)
$check=0
WHILE($check=0)
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN(445,410,579,470,"ok.bmp",-1,80)
$check=1
WAIT(1)
LCLICK($_return1,$_return2)
WAITMS(100)
ELSE
HALT
END_IF
END_CYC
END_SUB

start:
ПОИСК()
БОЙ()
ВЫХОД()
GOTO(start)

далее всё замирает и не хочет повторятся,помогите пожалуйста

Sania

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Простенький скрипт.Техномагия.Вопрос.
« Reply #1 on: February 02, 2017, 12:22:16 AM »
команда стоп не нужна, вы же ожидаете победную иконку, да и вообще подпрограмы вызываемые одноразово- это псевдоподпрограммы.

я не упомянул один нюанс((( там сообщение о победе с кнопкой "ок" появляется не всегда,поэтому у меня и возникли трудности со сценарием,не знал как написать так чтоб учитывалось два варианта окончания боя) и я так и знал что всё это можно "укутать" красивее!)) ваш скрипт как всегда безупречен,спасибо большое)
Но я так и не понял почему же у меня замирал скрипт,я его вертел еще со вчерашнего дня и никак не мог(у) понять

Sania

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Простенький скрипт.Техномагия.Вопрос.
« Reply #2 on: February 02, 2017, 12:24:31 AM »
вот я проверил только что,и когда иконка "ок"не появляется,скрипт не идёт дальше,как бы это обыграть?

Badimboy

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Re: Простенький скрипт.Техномагия.Вопрос.
« Reply #3 on: February 02, 2017, 03:22:04 AM »
Но я так и не понял почему же у меня замирал скрипт,я его вертел еще со вчерашнего дня и никак не мог(у) понять
В первоначальном варианте скрипт замирал скорее всего когда не находил картинку "ok.bmp" в Выход()
Code: (clickermann) [Select]
SUB(ВЫХОД)  //ПРИ ПОЯВЛЕНИИ ПОБЕДНОЙ ИКОНКИ "ОК" КЛИКАЕМ НА НЕЁ
   WAIT(5)
   $check=0
   WHILE($check=0)
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN(445,410,579,470,"ok.bmp",-1,80)
         $check=1
         WAIT(1)
         LCLICK($_return1,$_return2)
         WAITMS(100)
      ELSE
         HALT  // предположительное место замирания
      END_IF
   END_CYC
END_SUB

Используй LOGWRITE для отладки, всегда будешь знать в каком месте заткнулся

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Простенький скрипт.Техномагия.Вопрос.
« Reply #4 on: February 02, 2017, 09:20:54 AM »
Code: (clickermann) [Select]
   $check=0
   WHILE($check=0)
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN(445,410,579,470,"ok.bmp",-1,80)
         $check=1
         WAIT(1)
         LCLICK($_return1,$_return2)
         WAITMS(100)
      ELSE
         HALT  // предположительное место замирания
      END_IF
   END_CYC

Эта конструкция излишня и бессмысленна в таком варианте. Первый раз (и единственный) ищем, если нашли кликаем и выходим из цикла. Не нашли останов HALT. Спрашивается: зачем цикл?
Если кнопка может появится, а может нет, то из шаблонов берём "ожидание картинки с таймером". Время подбираем.

Code: (clickermann) [Select]
$time = $_ms + 5000  // 5 секунд
WHILE($time > $_ms)
    GETSCREEN
    COLORMODE(6)
    IF_PICTURE_IN(445,410,579,470,"ok.bmp",-1,80)
        $time = 0
        LCLICK($_return1, $_return2)
        WAITMS(100)
    ELSE
        WAITMS(50)
    END_IF
END_CYC

Если нужно по разному обрабатывать ситуации когда появилась и когда нет, то можно ещё в конце добавить
Code: (clickermann) [Select]
IF($time ! 0)
    // время истекло, картинка ok.bmp не найдена
END_IF


Sania

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Простенький скрипт.Техномагия.Вопрос.
« Reply #5 on: February 03, 2017, 10:45:05 PM »
Если нужно по разному обрабатывать ситуации когда появилась и когда нет, то можно ещё в конце добавить

спасибо,сейчас буду пробовать)
а такой вариант имеет право на существование(если у меня после боя не всегда высвечивается кнопка "ок") я прописываю два пути завершения цикла ELSE   1.если появляется "ок"-кликаем,2. если бой завершается без каких-либо отметок, нахожу пиксель по которому определяю что бой завершён и цикл завершается. Но судя по тому что после успешного завершения боя цикл не начинается заново(не повторяется,видимо я что-то не так прописал?)

Code: (clickermann) [Select]
SUB(Трифид)
   $check=0
   WHILE($check=0)
      GETSCREEN (97,191, 800,450)
      IF_PIXEL_IN(97,191, 800,450,217634,1140526,1316895,3388006)
         beep(500,1000)
         LCLICK($_return1, $_return2+20)
         $check=1
         WAITMS(100)
      ELSE
         WAITMS(100)
      END_IF
   END_CYC
END_SUB



SUB(Бой)
   $check=0
   WHILE($check=0)
      GETSCREEN  (295,116, 344,195)
      IF_PIXEL_IN(295,116, 344,195,4893597,5242780,36142)
         LCLICK(321,436)
         WAIT(1)
      ELSE
         GETSCREEN (52,124,52,124)
         IF_PIXEL_IN(52,124,52,124,11718141)
            $check=1
            WAITMS(100)
         ELSE
            GETSCREEN(466,438,556,540)
            COLORMODE(6,466,438,556,540)
            IF_PICTURE_IN(466,438,556,540,"ok.bmp",-1,80)
               LCLICK($_return1, $_return2)
               $check=1
               WAITMS(100)
            END_IF
         END_CYC
      END_SUB
     
      start:
      Трифид()
      Бой()
      GOTO(start)

« Last Edit: February 03, 2017, 11:07:13 PM by Sania »