Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: mAramiXx on December 29, 2020, 08:14:05 PM
-
Код считывает координаты точек, кликает по ним и выполняет некоторые действия.
Программа работает, но после каждого прохода(запуска с начала) выдает ошибку:
https://ibb.co/w4SYy01
https://ibb.co/yNj880b
(скриншоты)
Ломаю голову, не пойму в чем проблема.. Подскажите плз.. :-\
Вот код:
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)
-
Иногда дорабатывает до конца и выдает ошибку. Иногда сразу после цикла while , даже не чистит файл и сразу ругается)
Думаю ошибка где-то тут. Возможно надо как-то считывать массив, но я в массивы не сильно умею :(
INC($position,1)
$stroka = TFREAD("position.txt", $position)
waitms(50)
strseparate($stroka, ".", $arr)
$X = $arr[0]
$Y = $arr[1]
UNDEFINE($arr)
-
Научился в массивы, переделал последний кусок кода. Всё равно ошибка)))) та за шооо
Скрин: https://ibb.co/d71qJH2
INC($position,1)
TFREADARR("position.txt", $arr)
waitms(50)
STRSEPARATE($arr[$position], ".", $arr1)
$X = $arr1[0]
$Y = $arr1[1]
UNDEFINE($arr)
UNDEFINE($arr1)
-
Основная ошибка, это попытка чтения не существующей строки 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)).
А главное, запись в файл координаты это лишнее. Можно действовать сразу в первом же цикле без записи и последующего чтения файла.
,
-
Еще ошибку нашел, $X2 и $Y2 тоже нужно обнулять перед первым циклом.
Вот примерно так должно все работать без записи в файл:
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; &
-
Основная ошибка, это попытка чтения не существующей строки 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 на поиск ошибки. Обнулять пробовал тоже, но не помогало. Видимо основная проблема была в том, как я записываю в файл)
-
:) а файл проверить не додумался?
Я как увидел чудо в виде
$stroka = TFREAD("position.txt", $position)
сразу подумал, а что же там реально запишется, что ты не замечаешь.
Запустил
$X = 100
$Y = 200
TFWRITE("position.txt", ($X, $Y))
HALT
и получил в файле
100.2
-
Это я увидел, но не понял почему такие координаты проскакивают)) даже код проверки вставил для них)
но теперь дошло, что там нули. Спасибо)