Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: MedweD on September 30, 2020, 03:05:08 PM

Title: Помогите решить ошибку.
Post by: MedweD on September 30, 2020, 03:05:08 PM
Вообщем то пишу поток. В поток решил засунуть подпрограмму и ссылаюсь на нее. Когда пытаюсь запустить скрипт. Выдает вот это:
"ошибка при вызове функции POP()
Прерывать выполнение сценария?"
"ошибка при интерпретации строки JMP(POP())
Прерывать выполнение сценария?"
Подскажите как с этим берется. Не могу понять откуда вообще берется POP и что это такое.
Code: [Select]
THREAD(Атака, 1)
   IF_PICTURE_IN(0,0, $_xmax, $_ymax,"mob.bmp",-1,100)
      LDOWN($_return1,$_return2)
      Хит()
   else
      Хит()
      KEYDOWN(#A)
      WAITMS(50)
      KEYUP(#A)
   END_IF
   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB
   
   Хит()
   
END_THREAD
Title: Re: Помогите решить ошибку.
Post by: 4.У.В.@.К on September 30, 2020, 10:05:05 PM
1. Описание подпрограммы должно быть в корне потока, в котором она будет вызываться. То есть, само описание не должно находиться ни в каких циклах, подпрограммах, или условиях. Короче,)) никаких оберток вокруг SUB ... END_SUB быть не должно. Единственной оберткой может быть поток.

2. Вызов подпрограммы делается ниже (по ходу сценария), чем её описание.

Как смог сформулировал.))

Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   Хит() // вызов подпрограммы - в любом месте ТОГО ЖЕ ПОТОКА, в котором эта подпрограмма описана, но после её описания
   
END_THREAD

Вот так можно сделать.
Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   IF_PICTURE_IN(0,0, $_xmax, $_ymax,"mob.bmp",-1,100)
      LDOWN($_return1,$_return2)
      Хит()
   ELSE
      Хит()
      KEYDOWN(#A)
      WAITMS(50)
      KEYUP(#A)
   END_IF

   Хит()
   
END_THREAD

HALT
Title: Re: Помогите решить ошибку.
Post by: MedweD on October 01, 2020, 07:51:49 PM
1. Описание подпрограммы должно быть в корне потока, в котором она будет вызываться. То есть, само описание не должно находиться ни в каких циклах, подпрограммах, или условиях. Короче,)) никаких оберток вокруг SUB ... END_SUB быть не должно. Единственной оберткой может быть поток.

2. Вызов подпрограммы делается ниже (по ходу сценария), чем её описание.

Как смог сформулировал.))

Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   Хит() // вызов подпрограммы - в любом месте ТОГО ЖЕ ПОТОКА, в котором эта подпрограмма описана, но после её описания
   
END_THREAD

Вот так можно сделать.
Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   IF_PICTURE_IN(0,0, $_xmax, $_ymax,"mob.bmp",-1,100)
      LDOWN($_return1,$_return2)
      Хит()
   ELSE
      Хит()
      KEYDOWN(#A)
      WAITMS(50)
      KEYUP(#A)
   END_IF

   Хит()
   
END_THREAD

HALT
Спасибо за отзывчивость)