Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Parz on October 30, 2021, 04:57:32 PM
-
Помогите со скриптом.
Скорее всего нужно потоками писать, но я от этого далек.
Логика скрипта такая, есть два варианта цвета зеленый и красный.
Если скрипт видит зеленый через время он должен проверить не пропал ли цвет по этим координатам то есть ищем пустой квадрат, если черный квадрат сек задержка и скрипт сначала. Если скрипт видит красный тоже самое что зеленый ток задержка больше. Проблема в том что цвет может меняться , скрипт должен запомнить какой цвет был последний и сделать запись в блокнот, что было последним красное или зеленое.
Вот пример то что я написал, но скрипт попросту не выполняет функции, хотя запись в блокнот делает.
proverka:
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(1000,810, 1090,40, 922256)
WAITMS(100)
GOTO(proverkablackplus)
END_IF
ELSE
GETSCREEN
IF_PIXEL_IN(1000,810, 1090,40, 4798640)
WAITMS(100)
GOTO(proverkablackminus)
END_IF
ELSE
WAITMS(100)
GOTO(start)
END_CYC
proverkablackplus:
WAIT(5)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (1000,810, 1090,40, "black.bmp", -1, 100)
WAITMS(100)
$check = 1
END_IF
ELSE
WAITMS(100)
GOTO(proverka)
END_CYC
INC($orderplus,1)
log($note)
WAIT(1)
goto(start)
proverkablackminus:
WAIT(5)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (1000,810, 1090,40, "black.bmp", -1, 100)
WAITMS(100)
$check = 1
END_IF
ELSE
WAITMS(100)
GOTO(proverka)
END_CYC
INC($orderminus,1)
log($note)
WAIT(60)
goto(start)
-
Короче почитал форум понял что GOTO в циклах не работает.
Написал вот такое чудо но оно просто стопорит скрипт и ему вобще всеравно что там происходит. я так понимаю у меня переменная $check попросту не работает.
$check = 0
$time = $_time_d + 1
WHILE($time > $_time_d,$check = 0)
GETSCREEN (1000,810, 1090,40)
IF_PIXEL_IN(1000,810, 1090,40, 922256)
$check = 1
$time = 0
LOGWRITE("нашел зеленый цвет")
WAIT(1)
GETSCREEN (60,770, 141,881)
IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
LOGWRITE("нашел черный квадрат после зеленого")
INC($orderplus,1)
WAITMS(50)
log($note)
WAIT(1)
ELSE
GETSCREEN (1000,810, 1090,40)
IF_PIXEL_IN(1000,810, 1090,40, 4798640)
$check = 1
$time = 0
LOGWRITE("нашел красный цвет")
WAIT(1)
GETSCREEN (60,770, 141,881)
IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
LOGWRITE("нашел черный квадрат после красного")
INC($orderminus,1)
WAITMS(50)
log($note)
WAIT(120)
ELSE
LOGWRITE("не нашел ни один цвет")
WAIT(1)
END_IF
END_IF
END_IF
END_IF
END_CYC
Но в таком виде он работает
$time = $_time_d + 1
WHILE($time > $_time_d)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "confirm.bmp", -1, 100) //подтвердить
$time = 0
MOVE_SLOW($_return1, $_return2)
LCLICK($_return1, $_return2)
WAIT(1)
END_IF
ELSE
WAIT
END_CYC
Помогите пожалуйста, я не понимаю что можно сделать
-
Если кому нужно вот код рабочий
GR:
$check = 0
$checc = 0
$time = $_time_d + 1
WHILE($time > $_time_d)
GETSCREEN (1000,810, 1090,840)
IF_PIXEL_IN(1000,810, 1090,840, 4601507, 4864436, 5127362, 5915625, 4272784)// красный
$check = 1
$time = 0
WAITMS(100)
LOGWRITE("пиксель красный")
WAIT(1)
ELSE
GETSCREEN (1000,810, 1090,840)
IF_PIXEL_IN(1000,810, 1090,840, 6922256, 6130193, 5074451, 6988304, 7846415)// зеленый
$checc = 1
$time = 0
WAITMS(100)
LOGWRITE("пиксель зеленый")
WAIT(1)
END_IF
END_IF
END_CYC
IF($check = 1)
LOGWRITE("да пиксель красный")
GOTO(red)
END_IF
IF($checc = 1)
LOGWRITE("да пиксель зеленый")
GOTO(green)
END_IF
red:
$check = 0
$time = $_time_t + 1
WHILE($time > $_time_t)
getscreen (60,770, 141,881)
IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
$check = 1
LOGWRITE ("нашел картинку")
ELSE
LOGWRITE ("не нашел картинку")
WAIT(1)
END_IF
end_cyc
IF($check = 1)
INC($orderminus,1)
WAITMS(50)
log($note)
LOGWRITE ("закрыл ордер на красный")
WAIT(5)
halt
END_IF
IF($time ! 0)
GOTO(GR)
END_IF
green:
$check = 0
$time = $_time_t + 1
WHILE($time > $_time_t)
getscreen (60,770, 141,881)
IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
$check = 1
LOGWRITE ("нашел картинку")
ELSE
LOGWRITE ("не нашел картинку")
WAIT(1)
END_IF
end_cyc
IF($check = 1)
INC($orderplus,1)
WAITMS(50)
log($note)
LOGWRITE ("закрыл ордер на зеленый")
WAIT(1)
halt
END_IF
IF($time ! 0)
GOTO(GR)
END_IF
-
Короче почитал форум понял что GOTO в циклах не работает.
Неправильно понял, всё работает, но конечно не так как написано.
Вот это что такое?
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(1000,810, 1090,40, 922256)
WAITMS(100)
GOTO(proverkablackplus)
END_IF
ELSE
GETSCREEN
IF_PIXEL_IN(1000,810, 1090,40, 4798640)
WAITMS(100)
GOTO(proverkablackminus)
END_IF
ELSE
WAITMS(100)
GOTO(start)
END_CYC
Что это за чудеса? Откуда в цикле ELSE и почему их два? Было бы интересно понять ход мыслей как оно должно было работать.
Ну вот заходим в бесконечный цикл WHILE($check = 0)
Ищем цвет 922256 по НЕПРАВИЛЬНЫМ координатам
IF_PIXEL_IN(1000,810, 1090,40, 922256)
Потом ЕLSE (иначе) иначе от чего?
Там везде в коде чудеса. Вот откуда взято это? В какой справке так написано?
WHILE($time > $_time_d,$check = 0)
-
И описание из первого поста имеет мало общего с кодом из последнего.
-
DEFINE($orderminus, 0)
DEFINE($orderplus, 0)
SUB(wait_white)
$white = 0
WHILE($white = 0)
GETSCREEN(60,770, 141,881)
IF_PICTURE_IN (60,770, 140,880, "white.bmp")
$white = 1
ELSE
WAITMS(100)
END_IF
end_cyc
END_SUB
SUB(red_green, $color, $W)
$check = 1
LOGWRITE("пиксель ", $color)
wait_white()
IF($color = "красный")
INC($orderminus)
ELSE
INC($orderplus)
END_IF
log($note) // хз что это такое
LOGWRITE("закрыл ордер на ", $color)
WAIT($W)
END_SUB
$check = 0
WHILE($check = 0)
GETSCREEN(1000,810, 1090,840)
IF_PIXEL_IN(1000,810, 1090,840, 4601507, 4864436, 5127362, 5915625, 4272784)
red_green("красный", 5)
ELSE
IF_PIXEL_IN(1000,810, 1090,840, 6922256, 6130193, 5074451, 6988304, 7846415)
red_green("зеленый", 1)
ELSE
WAITMS(80)
END_IF
END_IF
END_CYC
HALT