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

Основной раздел => Общие вопросы => Topic started by: mAramiXx on December 29, 2020, 08:14:05 PM

Title: Ошибка после повторного запуска кода
Post by: mAramiXx on December 29, 2020, 08:14:05 PM
Код считывает координаты точек, кликает по ним и выполняет некоторые действия.

Программа работает, но после каждого прохода(запуска с начала) выдает ошибку:
https://ibb.co/w4SYy01
https://ibb.co/yNj880b
(скриншоты)

Ломаю голову, не пойму в чем проблема.. Подскажите плз.. :-\

Вот код:
Code: (clickermann) [Select]
GETSCREEN   // POISK POSICIY    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SCANPXL($ARR_SCAN, 558,76, 639,760, 0)
$ARR_NUM = 0
$SHIFT_X = 72 // смещение (кол-во игнор пикселов после найденного)
$SHIFT_Y = 50
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
   $X = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   $Y = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   IF(($X > $X2) | ($Y > $Y2))
      $X2 = $X + $SHIFT_X
      $Y2 = $Y + $SHIFT_Y
      INC($SCAN_COUNT,1)
      TFWRITE("position.txt", ($X, $Y))
      WAITMS(50)
   END_IF
END_CYC
UNDEFINE($ARR_SCAN)
LOGWRITE ("=====================")
LOGWRITE ("Всего найдено: ", $SCAN_COUNT)

waitms(50)
$X = 0
$Y = 0
$check = 0  // KLICK PO POSICIY   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
WHILE($check < $SCAN_COUNT)
   INC($position,1)
   $stroka = TFREAD("position.txt", $position)
   waitms(50)
   strseparate($stroka, ".", $arr)
   $X = $arr[0]
   $Y = $arr[1]
   UNDEFINE($arr)
   
   LCLICK($X, $Y) // KLICK PO POSICIY
   
   wait(1)
   
   GETSCREEN
   IF_PICTURE_IN (273,106, 1057,726, "sobaka.bmp")
      LCLICK($_return1+13, $_return2+3)
      waitms(50)
      LCLICK($_return1+13, $_return2+3)
      waitms(50)
     
      KEYDOWN (#CTRL)
      WAITMS (50)
      KEYPRESS (#C)
      KEYUP (#CTRL)
     
      $nik = FROMCLIP()
      TFWRITE("nik.txt", $nik)
     
      waitms(50)
     
      GETSCREEN
      IF_PICTURE_IN (750,78,905,754, "Close.bmp")
         LCLICK($_return1+4, $_return2+2)
         waitms(50)
      END_IF
   ELSE
      GETSCREEN
      IF_PICTURE_IN (750,78,905,754, "Close.bmp")
         LCLICK($_return1+4, $_return2+2)
         waitms(50)
      END_IF
   END_IF
   INC($check,1)
END_CYC

waitms(50)
TFCLEAR("position.txt", 0)
waitms(50)

move(643,421)  // v centr
waitms(50)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)

Title: Re: Ошибка после повторного запуска кода
Post by: mAramiXx on December 29, 2020, 11:16:33 PM
Иногда дорабатывает до конца  и выдает ошибку. Иногда сразу после цикла while , даже не чистит файл и сразу ругается)

Думаю ошибка где-то тут. Возможно надо как-то считывать массив, но я в массивы не сильно умею :(

Code: (clickermann) [Select]
   INC($position,1)
   $stroka = TFREAD("position.txt", $position)
   waitms(50)
   strseparate($stroka, ".", $arr)
   $X = $arr[0]
   $Y = $arr[1]
   UNDEFINE($arr)
Title: Re: Ошибка после повторного запуска кода
Post by: mAramiXx on December 30, 2020, 12:08:23 AM
Научился в массивы, переделал последний кусок кода. Всё равно ошибка)))) та за шооо

Скрин: https://ibb.co/d71qJH2

Code: (clickermann) [Select]
   INC($position,1)
   TFREADARR("position.txt", $arr)
   waitms(50)
   STRSEPARATE($arr[$position], ".", $arr1)
   $X = $arr1[0]
   $Y = $arr1[1]
   UNDEFINE($arr)
   UNDEFINE($arr1)
Title: Re: Ошибка после повторного запуска кода
Post by: dramster on December 30, 2020, 12:19:54 AM
 Основная ошибка, это попытка чтения не существующей строки TFREAD("position.txt", $position). После цикла нужно обнулять наращиваемую переменную $position.
 Но помимо этого, еще ошибки:
 $SCAN_COUNT тоже нужно обнулять.
 TFWRITE("position.txt", ($X, $Y)) - так писать нельзя. TFWRITE (file, str, [str_n] ), file - имя файла, str - строка, str_n - необязательный параметр; номер строки в файле. Если нужно записать координаты через запятую или другой разделитель, то правильно так - TFWRITE("position.txt", STRCONCAT ($X, ",", $Y)).
 А главное, запись в файл координаты это лишнее. Можно действовать сразу в первом же цикле без записи и последующего чтения файла.
 
,

Title: Re: Ошибка после повторного запуска кода
Post by: dramster on December 30, 2020, 12:34:59 AM
Еще ошибку нашел, $X2 и $Y2 тоже нужно обнулять перед первым циклом.

Вот примерно так должно все работать без записи в файл:

Code: (clickermann) [Select]
GETSCREEN   // POISK POSICIY    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SCANPXL($ARR_SCAN, 558,76, 639,760, 0)
$ARR_NUM = 0
$SHIFT_X = 72 // смещение (кол-во игнор пикселов после найденного)
$SHIFT_Y = 50
$X2 = 0
$Y2 = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
   $X = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   $Y = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   IF(($X > $X2) | ($Y > $Y2))
      $X2 = $X + $SHIFT_X
      $Y2 = $Y + $SHIFT_Y
     
      LCLICK($X, $Y) // KLICK PO POSICIY
     
      wait(1)     
      GETSCREEN
      IF_PICTURE_IN (273,106, 1057,726, "sobaka.bmp")
         LCLICK($_return1+13, $_return2+3)
         waitms(50)
         LCLICK($_return1+13, $_return2+3)
         waitms(50)
         
         KEYDOWN (#CTRL)
         WAITMS (50)
         KEYPRESS (#C)
         KEYUP (#CTRL)
         
         $nik = FROMCLIP()
         TFWRITE("nik.txt", $nik)
         
         waitms(50)
         
         GETSCREEN
         IF_PICTURE_IN (750,78,905,754, "Close.bmp")
            LCLICK($_return1+4, $_return2+2)
            waitms(50)
         END_IF
      ELSE
         GETSCREEN
         IF_PICTURE_IN (750,78,905,754, "Close.bmp")
            LCLICK($_return1+4, $_return2+2)
            waitms(50)
         END_IF
      END_IF
                 
   END_IF
END_CYC

UNDEFINE($ARR_SCAN)
TFCLEAR("position.txt", 0)
waitms(50)

move(643,421)  // v centr
waitms(50)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)
WHEELDOWN
waitms(150)


И еще, в условии  IF(($X > $X2) | ($Y > $Y2)) скорее всего должно быть логическое И - and; &
Title: Re: Ошибка после повторного запуска кода
Post by: mAramiXx on December 30, 2020, 12:45:04 AM
Основная ошибка, это попытка чтения не существующей строки TFREAD("position.txt", $position). После цикла нужно обнулять наращиваемую переменную $position.
 Но помимо этого, еще ошибки:
 $SCAN_COUNT тоже нужно обнулять.
 TFWRITE("position.txt", ($X, $Y)) - так писать нельзя. TFWRITE (file, str, [str_n] ), file - имя файла, str - строка, str_n - необязательный параметр; номер строки в файле. Если нужно записать координаты через запятую или другой разделитель, то правильно так - TFWRITE("position.txt", STRCONCAT ($X, ",", $Y)).
 А главное, запись в файл координаты это лишнее. Можно действовать сразу в первом же цикле без записи и последующего чтения файла.
 
,

Спасибо!!! Обнулил переменные и заметил строку записи - и всё работает))

Жесть, убил часов 5 на поиск ошибки. Обнулять пробовал тоже, но не помогало. Видимо основная проблема была в том, как я записываю в файл)
Title: Re: Ошибка после повторного запуска кода
Post by: Vint on December 30, 2020, 09:11:17 AM
 :) а файл проверить не додумался?
Я как увидел чудо в виде
Code: (clickermann) [Select]
$stroka = TFREAD("position.txt", $position)
сразу подумал, а что же там реально запишется, что ты не замечаешь.
Запустил
Code: (clickermann) [Select]
$X = 100
$Y = 200
TFWRITE("position.txt", ($X, $Y))
HALT
и получил в файле
Quote
100.2
Title: Re: Ошибка после повторного запуска кода
Post by: mAramiXx on December 30, 2020, 02:49:57 PM
Это я увидел, но не понял почему такие координаты проскакивают)) даже код проверки вставил для них)

но теперь дошло, что там нули. Спасибо)