Author Topic: Зацикливание части скрипта. include за include'ом. Проверьте скрипт.  (Read 2153 times)

0 Members and 1 Guest are viewing this topic.

Sava

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Всем привет.
На одной странице должны выполняться 2 скрипта, один за другим. В случае если условие нахождения картинок выполняется (в общем скрипт трудится, действия совершаются), то все нормально, выполняются один за другим. Как только начинается откат картинок для входа в скрипты, происходит зацикливание на первом (l_o.cms) или на втором (k_o.cms) ... когда как ))
Лог:
[spoiler]
10:23:55 острова нет, вторая попытка
10:23:59 остров не обновился, ждем
10:24:04 охоты нет, вторая попытка
10:24:08 охоты нет, ждем
10:24:13 охоты нет, вторая попытка
10:24:17 охоты нет, ждем
10:24:22 охоты нет, вторая попытка
10:24:26 охоты нет, ждем
10:24:31 охоты нет, вторая попытка
[/spoiler]

Для l_o.cms

Code: (clickermann) [Select]
#include "l_o.cms"
wait (1)
#include "k_o.cms"
wait(1)
#include "d_l.cms"


Code: (clickermann) [Select]
#name "l_o"
#logfile

move (rnd(100,400), rnd(150,700))
waitms(50)


getscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"l_o.bmp")
logwrite ("нашли остров")
showlog (1)
waitms(500)

lclick ($_return1+rnd(40,180), $_return2+rnd(20,40))
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

else
logwrite ("острова нет, вторая попытка")
showlog (1)
keypress (#PAGEDOWN)
wait(1)

getscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"l_o.bmp")
logwrite ("нашли остров")
showlog (1)
waitms(500)

lclick ($_return1+rnd(40,180), $_return2+rnd(20,40))
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

else
logwrite ("остров не обновился, ждем")
showlog (1)
wait(1)
goto(finish)

end_if

end_if


gettscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"l_o_begin.bmp")
waitms(500)

lclick ($_return1+rnd(30,90), $_return2+rnd(12,15))
logwrite ("зашли на остров, начинается бой")
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

end_if

for ($i, $i < 10)

getscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"att_group.bmp")
logwrite ("att")
showlog (1)

lclick ($_return1+10, $_return2+10)
logwrite ("click att - ", $i)
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

end_if

getscreen

if_picture_in (0,0,$_xmax,$_ymax,"N.bmp")
logwrite ("N")
showlog (1)
wait(15)

lclick ($_return1+10, $_return2+10)
logwrite ("click N - ", $i)
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait (1)

else

if_picture_in (0,0,$_xmax,$_ymax,"l_o_end.bmp")
logwrite ("l_o_end see")
showlog (1)

lclick ($_return1+10, $_return2+10)
logwrite ("click l_o_end")
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

end_if

end_if

end_cyc
$i = 0

finish:
wait(1)





Для k_o.cms

Code: (clickermann) [Select]
#name "k_o"
#logfile

move (rnd(100,400), rnd(150,700))
waitms(50)


getscreen

if_picture_in (0,0,$_xmax,$_ymax,"k_o.bmp")
logwrite ("нашли oxoty")
showlog (1)
waitms(500)

lclick ($_return1+rnd(40,180), $_return2+rnd(20,40))
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

else

logwrite ("охоты нет, вторая попытка")
showlog (1)
keypress (#PAGEDOWN)
waitms(50)

getscreen

if_picture_in (0,0,$_xmax,$_ymax,"k_o.bmp")
logwrite ("нашли oxoty")
showlog (1)
waitms(500)

lclick ($_return1+rnd(40,180), $_return2+rnd(20,40))
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

else

logwrite ("охоты нет, ждем")
showlog (1)
goto(finish)

end_if

end_if


getscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"k_o_begin.bmp")


lclick ($_return1+rnd(30,90), $_return2+rnd(12,15))
logwrite ("зашли на oxoty")
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

end_if

getscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"att_group.bmp")
logwrite ("att")
showlog (1)

lclick ($_return1+10, $_return2+10)
  logwrite ("click att - ", $i)
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

end_if

getscreen
waitms(50)

if_picture_in (0,0,$_xmax,$_ymax,"pred.bmp")
logwrite ("pred")
showlog (1)
wait(15)

lclick ($_return1+10, $_return2+10)
logwrite ("охота на хищников")
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait (1)

end_if


for ($i, $i < 20)

getscreen

if_picture_in (0,0,$_xmax,$_ymax,"att_group.bmp")
logwrite ("att")
showlog (1)

lclick ($_return1+10, $_return2+10)
logwrite ("click att - ", $i)
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait (1)

getscreen

if_picture_in (0,0,$_xmax,$_ymax,"pred_next.bmp")
logwrite ("Next")
showlog (1)
wait(15)

lclick ($_return1+10, $_return2+10)
logwrite ("click Next - ", $i)
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait (1)

else

getscreen

if_picture_in (0,0,$_xmax,$_ymax,"l_o_end.bmp")
logwrite ("вижу награду")
showlog (1)

lclick ($_return1+10, $_return2+10)
logwrite ("остров пройден")
showlog (1)
waitms(50)
move (rnd(100,400), rnd(150,700))
wait(1)

end_if

end_if
end_if

end_cyc
$i = 0

finish:


Если можно оптимизировать, улучшить как то написанное, напишите, буду признателен.



Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ещё в первом скрипте стр. 51 gettscreen

Имя переменной цикла здесь не влияет, циклы не вложенные. Только с обнулением беда.

А вот две метки finish: сбивают работу с рельсов.
GOTO вообще здесь ни к чему. Для этого достаточно весь код который ты пропускаешь (основные действия) вставить прямо на место после обнаружения.
Т.к. у тебя таких мест получилось два, нужно избавится от них потому что они почти одинаковые.
Вот пример первого скрипта
Code: (clickermann) [Select]
#name "l_o"
#logfile

move (rnd(100,400), rnd(150,700))
waitms(50)


getscreen
waitms(50)

$isle = 0
FOR($isle=0, $isle < 2)
   if_picture_in (0,0,$_xmax,$_ymax,"l_o.bmp")
      $isle = 2
      logwrite ("нашли остров")
      showlog (1)
      waitms(500)
      lclick ($_return1+rnd(40,180), $_return2+rnd(20,40))
      waitms(50)
      move (rnd(100,400), rnd(150,700))
      wait(1)
      getscreen
      waitms(50)
     
      if_picture_in (0,0,$_xmax,$_ymax,"l_o_begin.bmp")
         waitms(500)
         lclick ($_return1+rnd(30,90), $_return2+rnd(12,15))
         logwrite ("зашли на остров, начинается бой")
         showlog (1)
         waitms(50)
         move (rnd(100,400), rnd(150,700))
         wait(1)
      end_if
     
      for ($i=0, $i < 10)
         getscreen
         waitms(50)
         
         if_picture_in (0,0,$_xmax,$_ymax,"att_group.bmp")
            logwrite ("att")
            showlog (1)
            lclick ($_return1+10, $_return2+10)
            logwrite ("click att - ", $i)
            showlog (1)
            waitms(50)
            move (rnd(100,400), rnd(150,700))
            wait(1)
         end_if
         
         getscreen
         
         if_picture_in (0,0,$_xmax,$_ymax,"N.bmp")
            logwrite ("N")
            showlog (1)
            wait(15)
           
            lclick ($_return1+10, $_return2+10)
            logwrite ("click N - ", $i)
            showlog (1)
            waitms(50)
            move (rnd(100,400), rnd(150,700))
            wait (1)
         else
            if_picture_in (0,0,$_xmax,$_ymax,"l_o_end.bmp")
               logwrite ("l_o_end see")
               showlog (1)
               
               lclick ($_return1+10, $_return2+10)
               logwrite ("click l_o_end")
               showlog (1)
               waitms(50)
               move (rnd(100,400), rnd(150,700))
               wait(1)
            end_if
         end_if
      end_cyc
   ELSE
      IF($isle = 0)
         logwrite ("острова нет, вторая попытка")
         keypress (#PAGEDOWN)
      ELSE
         logwrite ("остров не обновился, ждем")
      END_IF
      showlog (1)
      wait(1)
   END_IF
END_CYC
wait(1)
« Last Edit: November 19, 2015, 10:28:35 AM by Vint »


Sava

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Спасибо большое, вечером проверю.
Версия clickermann 4.11.002.

Условие i=0 в for (i=0, i < 10) сразу дает обнуление по завершении цикла?

Не совсем понял про :
Code: (clickermann) [Select]
$isle = 0
FOR($isle=0, $isle < 2)
if_picture_in (0,0,$_xmax,$_ymax,"l_o.bmp")
      $isle = 2
...
 ELSE
      IF($isle = 0)
         logwrite ("острова нет, вторая попытка")
         keypress (#PAGEDOWN)
      ELSE
         logwrite ("остров не обновился, ждем")
      END_IF
      showlog (1)
      wait(1)
   END_IF
END_CYC

$isle < 2  означает что 2 попытки поиска острова? Тогда $isle=2 значит что остров найден? Почему $isle равно именно 2, а не 1? Единица же вроде верность подтверждает...

Sava

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
И еще, можно какой-нибудь командой разделить include'ы чтобы они не сливались?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Не совсем понял про :
Code: (clickermann) [Select]
$isle = 0
FOR($isle=0, $isle < 2)
if_picture_in (0,0,$_xmax,$_ymax,"l_o.bmp")
      $isle = 2
...
 ELSE
      IF($isle = 0)
         logwrite ("острова нет, вторая попытка")
         keypress (#PAGEDOWN)
      ELSE
         logwrite ("остров не обновился, ждем")
      END_IF
      showlog (1)
      wait(1)
   END_IF
END_CYC

$isle < 2  означает что 2 попытки поиска острова? Тогда $isle=2 значит что остров найден? Почему $isle равно именно 2, а не 1? Единица же вроде верность подтверждает...

Цикл  FOR($isle=0, $isle < 2)
имеет два прохода при $isle=0 и $isle=1
задавая $isle=2 мы прерываем цикл. На самом деле можно задать любое число при котором условие ($isle < 2) перестанет выполняться, т.е. $isle больше 1.