Author Topic: Проблема с повтором  (Read 1566 times)

0 Members and 1 Guest are viewing this topic.

NightWanted

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Проблема с повтором
« on: May 06, 2016, 05:00:57 PM »
Всем привет! Подскажите в чем может быть дело... Код прекрасно работает, если воспроизвести скрипт один раз, стоит перевести на неограниченное кол-во повторов, уже на втором круге после удара первого соперника срабатывает подпрограмма, и скрипт, естественно, останавливается. Скажу сразу, что подпрограмма на этом этапе срабатывать не должна... Может быть есть объяснение этому? Заранее спасибо!

Code: (clickermann) [Select]
WAIT(1)
LCLICK(406,19)//КЛИК НА ОКНО
WAIT(2)
LCLICK(110,324)//РЕЙДЫ
WAIT(2)
LCLICK(719,488)//НАЙТИ ПРОТИВНИКА
WAIT(3)
$count = 0 //ПЕРЕМЕННАЯ
WHILE ($count = 0)//ПОИСК БОТА
   GETSCREEN
   IF (PXL(821,323) = 8224900)
      $count = 1
      LCLICK(834,526)//АТАКА
      LOGWRITE ("цвет обнаружен")
      WAIT(1)
      GETSCREEN
      IF (PXL(477,346) = 10858672)
         LCLICK(662,442)
      END_IF
   ELSE
      LCLICK(746,415)//НАЙТИ ДРУГОГО
      WAIT(10)
   END_IF
   WAIT(1)
END_CYC//КОНЕЦ ПОИСКА
WAIT(2)

SUB(endgame)
   GETSCREEN
   IF (PXL(559,478) = 7501947)//ПРОВЕРКА ПОБЕДЫ
      $end = 1
   END_IF
   GETSCREEN
   IF (PXL(452,99) = 16777215)
   $end = 1
   END_IF
   
END_SUB

LCLICK(733,295)//ВЫБИРАЕМ ПЕРВОГО ПРОТИВНИКА
WAITMS(500)

FOR($b=0,$b<3)//ЧТОБЫ ДЕЛАЛИ ТРИ ЗАХОДА НА ПРОТИВНИКА
   
   GETSCREEN
   IF (PXL(814,446) = 13948632)//УДАР 1-ОГО ПЕРСА
      LCLICK(814,446)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(808,517)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(686,449) = 13487824)//УДАР 2-ОГО ПЕРСА
      LCLICK(686,449)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(682,510)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(551,445) = 13685203)//УДАР 3-ОГО ПЕРСА
      LCLICK(551,445)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(551,511)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(430,445) = 14079961)//УДАР 4-ОГО ПЕРСА
      LCLICK(430,445)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(425,512)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(296,447) = 13817046)//УДАР 5-ОГО ПЕРСА
      LCLICK(296,447)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(297,503))//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAIT(13)//ОЖИДАНИЕ АТАКИ СОПЕРНИКА
END_CYC//КОНЕЦ ЦИКЛА

LCLICK(790,310)//ВЫБИРАЕМ ВТОРОГО ПРОТИВНИКА
WAITMS(500)

FOR($d=0,$d<3)//ЧТОБЫ ДЕЛАЛИ ТРИ ЗАХОДА НА ПРОТИВНИКА
   GETSCREEN
   IF (PXL(814,446) = 13948632)//УДАР 1-ОГО ПЕРСА
      LCLICK(814,446)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(808,517)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(686,449) = 13487824)//УДАР 2-ОГО ПЕРСА
      LCLICK(686,449)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(682,510)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(551,445) = 13685203)//УДАР 3-ОГО ПЕРСА
      LCLICK(551,445)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(551,511)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(430,445) = 14079961)//УДАР 4-ОГО ПЕРСА
      LCLICK(430,445)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(425,512)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(296,447) = 13817046)//УДАР 5-ОГО ПЕРСА
      LCLICK(296,447)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(297,503))//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAIT(13)//ОЖИДАНИЕ АТАКИ СОПЕРНИКА
END_CYC//КОНЕЦ ЦИКЛА
LCLICK(95,535)//ВКЛЮЧЕНИЕ РЕЖИМА АВТОБОЯ
WAIT(20)
endgame()
IF($end = 1)
   GOTO(skip)
END_IF
WAIT(20)
endgame()
IF($end = 1)
   GOTO(skip)
END_IF
WAIT(20)
endgame()
IF($end = 1)
   GOTO(skip)
END_IF
WAIT(20)
endgame()
IF($end = 1)
   GOTO(skip)
END_IF
WAIT(30)
//ПРОДОЛЖИТЕЛЬНОСТЬ БОЯ
skip:
WAIT(2)
GETSCREEN
IF (PXL(559,478) = 7501947)//ПРОВЕРКА ПОБЕДЫ
   LCLICK(559,478)//ПРИ ПОБЕДЕ
ELSE
   LCLICK(628,476)//ПРИ ПОРАЖЕНИИ
END_IF
WAIT(2)
LCLICK(992,61)//ВЫХОД ИЗ РЕЙДОВ
WAIT(2)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Проблема с повтором
« Reply #1 on: May 06, 2016, 05:51:30 PM »
Из циклов выпрыгивать не рекомендуется, из за этого со временем могут возникнуть глюки.
Но проблема твоя в том что ты не обнуляешь $end = 1

Вот оптимизированный правильный вариант:
Code: (clickermann) [Select]
SUB(endgame)
   GETSCREEN
   IF((PXL(559,478) = 7501947)|(PXL(452,99) = 16777215))//ПРОВЕРКА ПОБЕДЫ
      $end = 1
   END_IF
END_SUB

SUB(boi)
   GETSCREEN
   IF (PXL(814,446) = 13948632)//УДАР 1-ОГО ПЕРСА
      LCLICK(814,446)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(808,517)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(686,449) = 13487824)//УДАР 2-ОГО ПЕРСА
      LCLICK(686,449)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(682,510)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(551,445) = 13685203)//УДАР 3-ОГО ПЕРСА
      LCLICK(551,445)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(551,511)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(430,445) = 14079961)//УДАР 4-ОГО ПЕРСА
      LCLICK(430,445)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(425,512)//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAITMS(500)
   
   GETSCREEN
   IF (PXL(296,447) = 13817046)//УДАР 5-ОГО ПЕРСА
      LCLICK(296,447)//ПРИ АДРЕНАЛИНЕ
      LOGWRITE ("цвет обнаружен")
      WAIT(4)
   ELSE
      LCLICK(297,503))//БЕЗ АДРЕНАЛИНА
   END_IF
   WAITMS(500)
   
   endgame()
   IF($end = 1)
      GOTO(skip)
   END_IF
   WAIT(13)//ОЖИДАНИЕ АТАКИ СОПЕРНИКА
   skip:
END_SUB
IF($end = 1)
   GOTO(skip2)
END_IF

WAIT(1)
LCLICK(406,19)//КЛИК НА ОКНО
WAIT(2)
LCLICK(110,324)//РЕЙДЫ
WAIT(2)
LCLICK(719,488)//НАЙТИ ПРОТИВНИКА
WAIT(3)

$count = 0 //ПЕРЕМЕННАЯ
WHILE ($count = 0)//ПОИСК БОТА
   GETSCREEN
   IF (PXL(821,323) = 8224900)
      $count = 1
      LCLICK(834,526)//АТАКА
      LOGWRITE ("цвет обнаружен")
      WAIT(1)
      GETSCREEN
      IF (PXL(477,346) = 10858672)
         LCLICK(662,442)
      END_IF
   ELSE
      LCLICK(746,415)//НАЙТИ ДРУГОГО
      WAIT(10)
   END_IF
   WAIT(1)
END_CYC//КОНЕЦ ПОИСКА
WAIT(2)

LCLICK(733,295)//ВЫБИРАЕМ ПЕРВОГО ПРОТИВНИКА
WAITMS(500)

boi()
boi()
boi()

LCLICK(790,310)//ВЫБИРАЕМ ВТОРОГО ПРОТИВНИКА
WAITMS(500)

boi()
boi()
boi()

LCLICK(95,535)//ВКЛЮЧЕНИЕ РЕЖИМА АВТОБОЯ
WAIT(20)

endgame()
IF($end = 1)
   GOTO(skip2)
END_IF
WAIT(20)

endgame()
IF($end = 1)
   GOTO(skip2)
END_IF
WAIT(20)

endgame()
IF($end = 1)
   GOTO(skip2)
END_IF
WAIT(20)

endgame()
IF($end = 1)
   GOTO(skip2)
END_IF
WAIT(30)

//ПРОДОЛЖИТЕЛЬНОСТЬ БОЯ
skip2:
WAIT(2)

GETSCREEN
IF (PXL(559,478) = 7501947)//ПРОВЕРКА ПОБЕДЫ
   LCLICK(559,478)//ПРИ ПОБЕДЕ
ELSE
   LCLICK(628,476)//ПРИ ПОРАЖЕНИИ
END_IF
WAIT(2)

LCLICK(992,61)//ВЫХОД ИЗ РЕЙДОВ
WAIT(2)
$end = 0

NightWanted

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Проблема с повтором
« Reply #2 on: May 10, 2016, 10:18:05 PM »
Из циклов выпрыгивать не рекомендуется, из за этого со временем могут возникнуть глюки.
Но проблема твоя в том что ты не обнуляешь $end = 1

Огромное спасибо, все работает. Извините, что раньше не поблагодарил...