Author Topic: Периодические ошибки выполнения сценария  (Read 4900 times)

0 Members and 1 Guest are viewing this topic.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Может конечно что то я в скрипте напортачил. Он работает, но время от времени случаются ошибки выполнения.
Скрипт для чистки почты в игре Гнев Богов:
[spoiler]
Code: [Select]
// почта
// Автор: Полуночник
// Версия: 15.3 (30.07.2014)
A:
HINTPOPUP("Чищу почту")
LCLICK(95,85)       
$r1 = 467
$r2 = 344
$r3 = $r1+10
$r4 = $r2+10
GOSUB(Per)
$b1=0
WHILE($b1=0)
   $r1 = 467
   WAIT(1)
   GOSUB(Per)
   GETSCREEN
   if_pixel_in(870, 300, 900, 550, 1339325)
      LCLICK($_return1+10, $_return2+2)
      WAIT(1)
      GETSCREEN
      if_pixel_in(1045, 555, 1065, 575, 2286590)
      else
         LCLICK(1070, 540)
         $b2=0
         WHILE($b2=0)
            WAITMC(500)
            GETSCREEN
            IF_PIXEL_IN(815,340, 830, 360, 8901117)
               $b2 = 1
            END_IF
         END_CYC
         KEYPRESS(#ENTER)
         WAIT(1)
         GOSUB (Per)
         goto(D)
      end_if
      WHILE($r1<705)
         IF_PIXEL_IN($r1,$r2, $r3,$r4, 3158058)
            $j = $_return1
            $j2 = $_return2
            WAITMS(500)
            LCLICK(925,560)
            LDOWN(920,564)
            WAITMS(RND(700,900))
            MOVE($j,$j2)
            WAITMS(500)
            LUP($j,$j2)
            LCLICK(800,10)
            KEYPRESS(#ENTER)
            GOSUB (Per)
            $r1 = 706
         else
            INC($r1,53)
            INC($r3,53)
            WAITMS(100)
            IF($r1 = 732)
               INC($r2,53)
               INC($r4,53)
               $r1 = 467
               $r3 = $r1+10
               WAITMS(100)
               IF($r2>556)
                  $r1 = 706
                  $b1=1
               END_IF
            END_IF
         END_IF
      END_CYC
   else
      LCLICK(35,85)
      HINTPOPUP("нет писем")
      halt
   end_if
   D:
END_CYC

lClick(1399,58)
waitms(300)
lClick(131,550)
waitms(300)
$b = 0
WHILE($b = 0)
   WAIT(1)
   GETSCREEN
   if_pixel_in(170, 550, 171, 551, 16053492)
   else
      $b = 1
   END_IF
END_CYC
lClick(212,116)
goto(A)


SUB(Per)
   $b = 0
   WHILE($b = 0)
      WAIT(1)
      GETSCREEN
      if_pixel_in(820, 387, 821, 388, 9935251)
         $b = 1
      END_IF
   END_CYC
END_SUB


[/spoiler]

Ошибки бывают разные. Чаще всего встречается не выполнение участка кода
[spoiler]
else
            INC($r1,53)
            INC($r3,53)
            WHILE($r1 = 732)
               INC($r2,53)
               INC($r4,53)
               $r1 = 467
               $r3 = $r1+10
               IF($r2>556)
                  $r1 = 706
                  $b1=1
               END_IF
            END_CYC
         END_IF
[/spoiler]

но бывает что скрипт работает норм, а потом с 25 или 46, да неважно с какой строки просто перескакивает на 69 строку, на участок кода
[spoiler]      LCLICK(35,85)  ---- 69 строка
      HINTPOPUP("нет писем")
      halt
   end_if
[/spoiler]
Обьясните плииз в чём может быть заковырка?
« Last Edit: July 30, 2014, 10:47:03 PM by Полуночник »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Цикл WHILE($r1 = 732) выполнится только если условие будет верным, в противном случае код будет пропущен. А если он и выполнится внутри цикла сразу же встречается $r1 = 467. То есть больше одной итерации по любому не будет! Вопрос, зачем там вообще цикл?

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Цикл WHILE($r1 = 732) выполнится только если условие будет верным, в противном случае код будет пропущен. А если он и выполнится внутри цикла сразу же встречается $r1 = 467. То есть больше одной итерации по любому не будет! Вопрос, зачем там вообще цикл?
Хм..... да... наверное он теперь и не нужен... я его брал из старого скрипта. Сейчас правильнее будет вместо цикла сделать сравнение наверное. Сча покувыряемся))

Покувырялся.... Изменил тот участок кода. WHILE на IF. Праблы остались теже.... или не срабатывает участок кода тот же или так же перескакивает в конец скрипта((((
« Last Edit: July 30, 2014, 10:48:50 PM by Полуночник »

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Решил сделать запись лога... получилось следующее:
заданы переменные:
$r1 = 467
$r2 = 344
$r3 = $r1+10
$r4 = $r2+10

цикл:
WHILE($r2<556)

действия:
else
         print("занято, прибавляю")
         print("в начале r1:", $r1)
         INC($r1,53)
         $r3 = $r1+10
         print("сейчас r1:", $r1)
         IF($r1 = 732)
            INC($r2,53)
            $r4 = $r2+10
            print("сейчас r2", $r2)
            $r1 = 467
         END_IF

и вот что в логе нахожу:
1:22:27 занято, прибавляю
1:22:27 в начале r1:626
1:22:27 сейчас r1:679
1:22:27 занято, прибавляю
1:22:27 в начале r1:679
1:22:27 сейчас r1:732
1:22:27 место свободно тут r1:648 ----- НУ ОТКУДА 648 появилось??????????? если по условиям должен искать в координатах от 626 до 3-636, потом 679*689 а в координатах 648 вообще не должен искать????????
я в шоке
« Last Edit: July 31, 2014, 01:10:46 AM by Полуночник »

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Короче я так и не понял что это за глюк был((( порядка 20 раз переделывал скрипт.... сейчас всё вернул как было при глюке.... вот только глюка больше нет..... откуда взялся? как куда пропал? теперь уже не понять....

Рано радовался... глюк не пропал(((( Оставил выполнение скрипта на ночь. Утром проснулся и наблюдал что скрипт стоит в ступоре из -за глюка того же.
Вот скрипт в каком виде сейчас:
[spoiler]
Code: [Select]

// почта
// Автор: Полуночник
// Версия: 15.5 (30.07.2014)
A:
HINTPOPUP("Чищу почту")
LCLICK(95,85)
WAIT(4)
$r1 = 467
$r2 = 352
$r3 = $r1+10
$r4 = $r2+10
GOSUB(Per)
WHILE($r2<564)
   WAITMS(200)
   GOSUB(Per)
   GETSCREEN
   if_pixel_in(870, 300, 900, 550, 1339325)
      LCLICK($_return1+10, $_return2+2)
      WAITMS(300)
      GETSCREEN
      if_pixel_in(1045, 555, 1065, 575, 2286590)
      else
         LCLICK(1070, 540)
         $b2=0
         WHILE($b2=0)
            WAITMC(300)
            GETSCREEN
            IF_PIXEL_IN(815,340, 830, 360, 8901117)
               $b2 = 1
            END_IF
         END_CYC
         KEYPRESS(#ENTER)
         WAITMS(200)
         GOSUB (Per)
         goto(D)
      end_if
      WAITMS(200)
      E:
      IF_PIXEL_IN($r1,$r2, $r3,$r4, 3158058)
         $j = $_return1
         $j2 = $_return2
         WAITMS(300)
         LCLICK(925,560)
         LDOWN(920,564)
         WAITMS(700)
         MOVE($j,$j2)
         WAITMS(500)
         LUP($j,$j2)
         LCLICK(800,10)
         WAITMS(200)
         KEYPRESS(#ENTER)
         GOSUB (Per)
      else
         INC($r1,53)
         $r3 = $r1+10
         WAITMS(100)
         IF($r1 = 732)
            INC($r2,53)
            $r4 = $r2+10
            $r1 = 467
            WAITMS(100)
         END_IF
         IF($r2 = 564)
            goto(D)
         END_IF
         goto(E)
      END_IF
   else
      LCLICK(35,85)
      HINTPOPUP("нет писем")
      halt
   end_if
   D:
END_CYC

lClick(1399,58)
waitms(300)
lClick(131,550)
waitms(300)
$b = 0
WHILE($b = 0)
   WAIT(1)
   GETSCREEN
   if_pixel_in(170, 550, 171, 551, 16053492)
   else
      $b = 1
   END_IF
END_CYC
lClick(212,116)
goto(A)


SUB(Per)
   $b = 0
   WHILE($b = 0)
      WAIT(1)
      GETSCREEN
      if_pixel_in(820, 387, 821, 388, 9935251)
         $b = 1
      END_IF
   END_CYC
END_SUB

[/spoiler]
По прежнему участок кода
else
         INC($r1,53)
         $r3 = $r1+10
         WAITMS(100)
         IF($r1 = 732)
            INC($r2,53)
            $r4 = $r2+10
            $r1 = 467
            WAITMS(100)
         END_IF
         IF($r2 = 564)
            goto(D)
         END_IF
         goto(E)
      END_IF
   else

даёт сбои и выдаёт непонятные результаты время от времени. Может минут 5 нормально проработать, а может каждые 30 сек лагать((((
« Last Edit: July 31, 2014, 06:57:14 AM by Полуночник »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ты забыл про $r3.
Где-то 61 строкой должно быть
Code: (clickermann) [Select]
$r3 = $r1+10
Как я понимаю ты двигаешься по рядам сканируя ячейки. Вот при переходе на новую строку ты забываешь про правую границу и начиная со строки 2 он ищет не по ячейкам, а по всей строке. Ну и вероятно пытается обработать больше 1 раза одно место.

И ещё проверь все буквы в строке 26 "WAITMC(300)"
« Last Edit: July 31, 2014, 08:40:00 AM by Vint »


Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Ты забыл про $r3.
Где-то 61 строкой должно быть

Vint спасибо. Ты прав. Из-за отсутствия $r3 в 61 строке все праблы. 1.5 часа после исправления - полёт нормальный))))
И ещё проверь все буквы в строке 26 "WAITMC(300)"
Не, тут всё норм.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Не, тут всё норм.
Не нормально. Прочитай по буквам.


aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Не, тут всё норм.
Не нормально. Прочитай по буквам.

намальна намальна я твая панимать =)

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Да я понял о чём)) Просто сам уже давно исправил))