Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Крис Тинка on January 07, 2014, 06:23:47 PM
-
Мудрила, мудрила и что-то перемудрила)))
Цель: Записать координаты нескольких объектов и координаты кнопки "закрыть". Объектов два вида, с одним видом нужно взаимодействовать 1 раз в 5 минут, с другим 1 раз в 10 минут.
DEFINE($close_rec)
setup1:
HINTPOPUP("Кликните на колодец или бочку", "Clickermann")
$kolodec = 0
WHILE($kolodec = 0)
WAITMS(10)
IF(ISKEYDOWN(1) = 1)
SOUND ("sound\Accepted.wav")
ARRPUSH ($rec,$_xmouse)
ARRPUSH ($rec,$_ymouse)
$kolodec = 1
END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
WAITMS(10)
END_CYC
HINTPOPUP("Закройте окно", "Clickermann")
$close = 0
WHILE($close = 0)
WAITMS(10)
IF(ISKEYDOWN(1) = 1)
SOUND ("sound\Accepted.wav")
IF($close_rec = 0)
$close_rec = 1
$x_close = $_xmouse
$y_close = $_ymouse
$close_rec = 1
END_IF
$close = 1
END_IF
while(ISKEYDOWN(1) = 1)
WAITMS(10)
END_CYC
END_CYC
HINTPOPUP("Чтобы добавить еще - нажмите 1. Чтобы перейти к автоматам - нажмите 2. Чтобы закончить настройку - нажмите 3", "Clickermann")
$setup = 0
WHILE($setup = 0)
WAITMS(10)
IF(ISKEYDOWN(49) = 1)
$setup = 1
END_IF
IF(ISKEYDOWN(50) = 1)
$setup = 2
END_IF
IF(ISKEYDOWN(51) = 1)
$setup = 3
END_IF
END_CYC
SOUND ("sound\Accepted.wav")
IF($setup = 1)
goto(setup1)
END_IF
IF($setup = 3)
goto(setup_end)
END_IF
setup2:
HINTPOPUP("Кликните на автомат", "Clickermann")
$avtomat = 0
WHILE($avtomat = 0)
WAITMS(10)
IF(ISKEYDOWN(1) = 1)
SOUND ("sound\Accepted.wav")
ARRPUSH ($rec_a,$_xmouse)
ARRPUSH ($rec_a,$_ymouse)
$avtomat = 1
END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
WAITMS(10)
END_CYC
HINTPOPUP("Закройте окно", "Clickermann")
$close = 0
WHILE($close = 0)
WAITMS(10)
IF(ISKEYDOWN(1) = 1)
SOUND ("sound\Accepted.wav")
$close = 1
END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
WAITMS(10)
END_CYC
HINTPOPUP("Чтобы добавить еще - нажмите 2. Чтобы закончить настройку - нажмите 3", "Clickermann")
$setup = 0
WHILE($setup = 0)
WAITMS(10)
IF(ISKEYDOWN(50) = 1)
$setup = 1
END_IF
IF(ISKEYDOWN(51) = 1)
$setup = 2
END_IF
END_CYC
SOUND ("sound\Accepted.wav")
IF($setup = 1)
goto(setup2)
END_IF
setup_end:
HINTPOPUP("Настройка закончена", "Clickermann")
// Проверка записанных координат
$n_rec = arrsize($rec)
$n_rec_a = arrsize($rec_a)
LOGWRITE("Размер первого массива: " , $n_rec)
WHILE($n_rec > 0)
LOGWRITE("№" , $n_rec, " = " ,$rec[$n_rec-1])
INC($n_rec,-1)
END_CYC
LOGWRITE("Размер второго массива: " , $n_rec_a)
WHILE($n_rec_a > 0)
LOGWRITE("№" , $n_rec_a, " = " , $rec_a[$n_rec_a-1])
INC($n_rec_a,-1)
END_CYC
start:
DEFINE($avt)
$st = $_time_t
$n_rec = arrsize($rec)
$n_rec_a = arrsize($rec_a)
$a=0
while ($n_rec > 0)
$y = $rec[$n_rec-1]
$x = $rec[$n_rec-2]
INC($n_rec,-2)
INC($a)
LOGWRITE("Колодец №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
IF($avt = 0)
LOGWRITE("---------------------------------")
$a=0
while ($n_rec_a > 0)
$y = $rec_a[$n_rec_a-1]
$x = $rec_a[$n_rec_a-2]
INC($n_rec_a,-2)
INC($a)
LOGWRITE("Автомат №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
$avt = 1
ELSE
$avt = 0
end_if
LOGWRITE("Координаты кнопки закрыть: X:", $x_close , " Y:", $y_close )
LOGWRITE("=================================")
$w = $_time_t-$st
IF($W <3 )
WAIT(3-$w)
END_IF
goto(start)
Делаю условные клики для первого вида - 3 объекта, для второго - 2 объекта. С первым видом все получается, а вот со вторым проблемы. Сначала выдает первые координаты и выходит из цикла (нужно чтобы выдал все), потом вторые координаты, потом вообще не заходит в цикл.
22:00:19 Колодец №1 координаты: X:241 Y:48
22:00:19 Колодец №2 координаты: X:1126 Y:134
22:00:19 Колодец №3 координаты: X:348 Y:46
22:00:19 ---------------------------------
22:00:19 Автомат №1 координаты: X:343 Y:183
22:00:19 Координаты кнопки закрыть: X:416 Y:45
22:00:19 =================================
22:00:22 Колодец №1 координаты: X:241 Y:48
22:00:22 Колодец №2 координаты: X:1126 Y:134
22:00:22 Колодец №3 координаты: X:348 Y:46
22:00:22 Координаты кнопки закрыть: X:416 Y:45
22:00:22 =================================
22:00:24 Колодец №1 координаты: X:241 Y:48
22:00:24 Колодец №2 координаты: X:1126 Y:134
22:00:24 Колодец №3 координаты: X:348 Y:46
22:00:24 ---------------------------------
22:00:24 Автомат №1 координаты: X:456 Y:44
22:00:24 Координаты кнопки закрыть: X:416 Y:45
22:00:24 =================================
22:00:27 Колодец №1 координаты: X:241 Y:48
22:00:27 Колодец №2 координаты: X:1126 Y:134
22:00:27 Колодец №3 координаты: X:348 Y:46
22:00:27 Координаты кнопки закрыть: X:416 Y:45
22:00:27 =================================
22:00:30 Колодец №1 координаты: X:241 Y:48
22:00:30 Колодец №2 координаты: X:1126 Y:134
22:00:30 Колодец №3 координаты: X:348 Y:46
22:00:30 ---------------------------------
22:00:30 Координаты кнопки закрыть: X:416 Y:45
22:00:30 =================================
22:00:33 Колодец №1 координаты: X:241 Y:48
22:00:33 Колодец №2 координаты: X:1126 Y:134
22:00:33 Колодец №3 координаты: X:348 Y:46
22:00:33 Координаты кнопки закрыть: X:416 Y:45
22:00:33 =================================
22:00:36 Колодец №1 координаты: X:241 Y:48
22:00:36 Колодец №2 координаты: X:1126 Y:134
22:00:36 Колодец №3 координаты: X:348 Y:46
22:00:36 ---------------------------------
22:00:36 Автомат №1 координаты: X:343 Y:183
22:00:36 Координаты кнопки закрыть: X:416 Y:45
22:00:36 =================================
-
И еще почему-то не всегда с первого раза срабатывает IF(ISKEYDOWN(1) = 1)
-
И еще почему-то не всегда с первого раза срабатывает IF(ISKEYDOWN(1) = 1)
Потому, что в цикле ожидания клика нет задержки. Начинает сильно тупить. Нужно добавить через ELSE.
При ожидании кнопок есть.
А какой смысл несет переменная $avt ? Я не могу понять, зачем такие сложности.
-
Благодаря "$avt" условие IF($avt=1) выполняется через 1 раз. 1, 3, 5 раз и т.д. Может как-то по другому можно.... Я так придумала.
Добавила задержку, но не через ELSE, а выше ифа.
Нашла ошибку в WHILE
Было$close = 0
WHILE($close = 0)
WAITMS(10)
IF(ISKEYDOWN(1) = 1)
SOUND ("sound\Accepted.wav")
$close = 1
END_IF
while(ISKEYDOWN(1) = 1)
WAITMS(10)
END_CYC
END_CYC
Надо так$close = 0
WHILE($close = 0)
WAITMS(10)
IF(ISKEYDOWN(1) = 1)
SOUND ("sound\Accepted.wav")
$close = 1
END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
WAITMS(10)
END_CYC
В итоге: Проблема с IF(ISKEYDOWN(1) = 1) пропала. Проблема с записью/чтением координат для автоматов осталась
-
Благодаря "$avt" условие IF($avt=1) выполняется через 1 раз. 1, 3, 5 раз и т.д. Может как-то по другому можно....
Зачем - понятно, не понятно зачем так сложно.
DEFINE($avt,0)
IF($avt=0)
// да. Действие.
$avt=1
ELSE
$avt=0
END_IF
-
Для поиска вставь в начале старта вывод в лог размеры массивов и их содержимое. Я с телефона, поэтому сам не могу посмотреть.
И проще было бы не жонглировать вспомогательными массивами, а вместо arrpop считывать по индексу. Так на много проще всё.
-
Добавила вывод в лог размера массивов и содержимое. Помогло понять, что проблема в этом куске
start:
DEFINE($avt)
$st = $_time_t
$a=0
while (arrsize($rec) > 0)
$y = arrpop($rec)
$x = arrpop($rec)
ARRPUSH($rec_backup,$y)
ARRPUSH($rec_backup,$x)
INC($a)
LOGWRITE("Колодец №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
while (arrsize($rec_backup) > 0)
$temp = arrpop($rec_backup)
ARRPUSH($rec,$temp)
END_CYC
UNDEFINE($temp)
IF($avt = 0)
LOGWRITE("---------------------------------")
$a=0
while (arrsize($rec_a) > 0)
$y = arrpop($rec_a)
$x = arrpop($rec_a)
ARRPUSH($rec_a_backup,$y)
ARRPUSH($rec_a_backup,$x)
INC($a)
LOGWRITE("Автомат №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
while (arrsize($rec_a_backup) > 0)
$temp = arrpop($rec_a_backup)
ARRPUSH($rec_a,$temp)
END_CYC
UNDEFINE($temp)
$avt = 1
ELSE
$avt = 0
end_if
LOGWRITE("Координаты кнопки закрыть: X:", $x_close , " Y:", $y_close )
LOGWRITE("=================================")
$w = $_time_t-$st
IF($W <3 )
WAIT(3-$w)
END_IF
goto(start)
Координаты автомата берутся не из массива, а вообще не понятно откуда11:52:07 Размер первого массива: 6
11:52:07 №6 = 141
11:52:07 №5 = 183
11:52:07 №4 = 51
11:52:07 №3 = 172
11:52:07 №2 = 49
11:52:07 №1 = 232
11:52:07 Размер второго массива: 4
11:52:07 №4 = 51
11:52:07 №3 = 172
11:52:07 №2 = 49
11:52:07 №1 = 232
11:52:07 Колодец №1 координаты: X:183 Y:141
11:52:07 Колодец №2 координаты: X:172 Y:51
11:52:07 Колодец №3 координаты: X:232 Y:49
11:52:07 ---------------------------------
11:52:07 Автомат №1 координаты: X:312 Y:318
11:52:07 Координаты кнопки закрыть: X:514 Y:46
11:52:07 =================================
11:52:10 Колодец №1 координаты: X:183 Y:141
11:52:10 Колодец №2 координаты: X:172 Y:51
11:52:10 Колодец №3 координаты: X:232 Y:49
11:52:10 ---------------------------------
11:52:10 Автомат №1 координаты: X:544 Y:182
11:52:10 Координаты кнопки закрыть: X:514 Y:46
11:52:10 =================================
11:52:13 Колодец №1 координаты: X:183 Y:141
11:52:13 Колодец №2 координаты: X:172 Y:51
11:52:13 Колодец №3 координаты: X:232 Y:49
11:52:13 ---------------------------------
11:52:13 Координаты кнопки закрыть: X:514 Y:46
11:52:13 =================================
11:52:16 Колодец №1 координаты: X:183 Y:141
11:52:16 Колодец №2 координаты: X:172 Y:51
11:52:16 Колодец №3 координаты: X:232 Y:49
11:52:17 Координаты кнопки закрыть: X:514 Y:46
11:52:17 =================================
11:52:20 Колодец №1 координаты: X:183 Y:141
11:52:20 Колодец №2 координаты: X:172 Y:51
11:52:20 Колодец №3 координаты: X:232 Y:49
11:52:20 ---------------------------------
11:52:20 Автомат №1 координаты: X:312 Y:318
11:52:20 Координаты кнопки закрыть: X:514 Y:46
11:52:20 =================================
Заменила на такой сценарийstart:
DEFINE($avt)
$st = $_time_t
$n_rec = arrsize($rec)
$n_rec_a = arrsize($rec_a)
$a=0
while ($n_rec > 0)
$y = $rec[$n_rec-1]
$x = $rec[$n_rec-2]
INC($n_rec,-2)
INC($a)
LOGWRITE("Колодец №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
IF($avt = 0)
LOGWRITE("---------------------------------")
$a=0
while ($n_rec_a > 0)
$y = $rec_a[$n_rec_a-1]
$x = $rec_a[$n_rec_a-2]
INC($n_rec_a,-2)
INC($a)
LOGWRITE("Автомат №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
$avt = 1
ELSE
$avt = 0
end_if
LOGWRITE("Координаты кнопки закрыть: X:", $x_close , " Y:", $y_close )
LOGWRITE("=================================")
$w = $_time_t-$st
IF($W <3 )
WAIT(3-$w)
END_IF
goto(start)
Проблема не ушла. Запустила на 4.9 версии, появился второй автомат, но координаты берутся не из массива....
12:38:19 Размер первого массива: 6
12:38:19 №6 = 77
12:38:19 №5 = 180
12:38:19 №4 = 237
12:38:19 №3 = 166
12:38:19 №2 = 38
12:38:19 №1 = 324
12:38:19 Размер второго массива: 4
12:38:19 №4 = 237
12:38:19 №3 = 166
12:38:19 №2 = 38
12:38:19 №1 = 324
12:38:19 Колодец №1 координаты: X:180 Y:77
12:38:19 Колодец №2 координаты: X:166 Y:237
12:38:19 Колодец №3 координаты: X:324 Y:38
12:38:19 ---------------------------------
12:38:19 Автомат №1 координаты: X:196 Y:307
12:38:19 Автомат №2 координаты: X:561 Y:183
12:38:19 Координаты кнопки закрыть: X:530 Y:45
12:38:19 =================================
12:38:23 Колодец №1 координаты: X:180 Y:77
12:38:23 Колодец №2 координаты: X:166 Y:237
12:38:23 Колодец №3 координаты: X:324 Y:38
12:38:23 Координаты кнопки закрыть: X:530 Y:45
12:38:23 =================================
12:38:26 Колодец №1 координаты: X:180 Y:77
12:38:26 Колодец №2 координаты: X:166 Y:237
12:38:26 Колодец №3 координаты: X:324 Y:38
12:38:26 ---------------------------------
12:38:26 Автомат №1 координаты: X:196 Y:307
12:38:26 Автомат №2 координаты: X:561 Y:183
12:38:26 Координаты кнопки закрыть: X:530 Y:45
12:38:26 =================================
12:39:13 Колодец №1 координаты: X:180 Y:77
12:39:13 Колодец №2 координаты: X:166 Y:237
12:39:13 Колодец №3 координаты: X:324 Y:38
12:39:13 Координаты кнопки закрыть: X:530 Y:45
12:39:13 =================================
12:39:16 Колодец №1 координаты: X:180 Y:77
12:39:16 Колодец №2 координаты: X:166 Y:237
12:39:16 Колодец №3 координаты: X:324 Y:38
12:39:16 ---------------------------------
12:39:16 Автомат №1 координаты: X:196 Y:307
12:39:16 Автомат №2 координаты: X:561 Y:183
12:39:16 Координаты кнопки закрыть: X:530 Y:45
12:39:16 =================================
-
Нашла ошибку в переменных. В 115 строке вместо $rec_a было $rec. На 4.9 версии все работает. На 4.8 почему-то глючит. Vint, спасибо помог сократить скрипт, что привело к ускорению нахождения ошибки!