Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Azaar on October 14, 2018, 01:43:00 PM
-
Подскажите пожалуйста как сделать так чтобы
если на пикели (519, 642) есть цвет 100 нужно сделать действие А
а если на этом пикселе цвет 200 то сделать действие Б
и второе (отдельно)
если в пикселе (111, 111) в течении 30 сек не появился цвет 100
то сделать клик в пикселе (222, 222)
-
GETSCREEN
IF(PXL(519,642) = 100)
// действие А
ELSE
IF(PXL(519,642) = 200)
// действие B
END_IF
END_IF
$time = $_ms + 30000 // 30 сек
GETSCREEN
WHILE((PXL(111,111)!100)&($time > $_ms))
WAITMS(50)
GETSCREEN
END_CYC
IF($time < $_ms)
LCLICK(222,222)
WAITMS(50)
END_IF
-
спасибо большое
-
День добрый! Не стал создавать отдельную тему. С программированием особо не знаком и пытаюсь первые действия на основе этих скриптов сделать. Подсобите пожалуйста.
Суть такова, нужно в течении 10 секунд проверять цвет (с учетом 6 коррекции), если цвет совпал, то без ожидания 10 секунд делать клик по указанным координатам. Если же за 10 секунд цвет не был найдет, делать клик в другое место.
Я почитал азы, но так и не понял еще в какой последовательности выполняются действия. Подскажите как быть, желательно с пояснением. И прошу прощение если задаю глупые вопросы.
Скрипт который пробовал.
WAIT(5)
LCLICK(899,560) // 2331970
WAIT(1)
$time = $_ms + 10000 // 10 сек ищет цвет
GETSCREEN
WHILE((PXL(642,97)=16777215)&($time > $_ms))
WAITMS(50)
GETSCREEN
COLORMODE(6,642,97,642,97)
END_CYC
WAITMS(1000)
LCLICK(647,163) // делает клик если находит цвет
WAITMS(50)
IF($time < $_ms)
LCLICK(1330,57) // делает клик если не находит
WAITMS(50)
END_IF
halt
-
День добрый! Не стал создавать отдельную тему. С программированием особо не знаком и пытаюсь первые действия на основе этих скриптов сделать. Подсобите пожалуйста.
Суть такова, нужно в течении 10 секунд проверять цвет (с учетом 6 коррекции), если цвет совпал, то без ожидания 10 секунд делать клик по указанным координатам. Если же за 10 секунд цвет не был найдет, делать клик в другое место.
WAIT(5)
LCLICK(899,560)
WAITMS(100)
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
LCLICK(647,163) // делает клик если находит цвет
WAITMS(500)
$time = 0
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
LCLICK(1330,57) // делает клик если не находит
WAITMS(50)
END_IF
halt
-
Огромное спасибо за оперативность, все работает. Разобрал пример, теперь есть понимание.
-
Не могу разобраться в данной части скрипта, что я использую не правильно. Глючит жутко и совсем не логично работает. Может какие то команды не соответствуют чему то.
То работает нормально, то судя по логам (сделал маяки) цыклирует по глукам 1, 2, 3, 1, 2, 3, а иногда улетает в 1,2,4 что тоже не логично, хотя ситуация одинаковая.
perviy:
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
LOGWRITE ("глюк1")
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
WAITMS(500)
LCLICK(647,163)
LOGWRITE ("глюк2")
GETSCREEN(886,501,886,501)
COLORMODE(6,886,501,886,501)
IF(PXL(886,501)=6118493)
WAITMS(1000)
LCLICK(574,617)
LOGWRITE ("глюк3")
WAITMS(2000)
GOTO(perviy)
ELSE
WAITMS(500)
LCLICK(958,500)
LOGWRITE ("глюк4")
WAITMS(3000)
$time = 0
END_IF
$time = 0
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
LCLICK(574,617)
LOGWRITE ("глюк5")
GOTO(perviy)
-
Не могу разобраться в данной части скрипта, что я использую не правильно. Глючит жутко и совсем не логично работает. Может какие то команды не соответствуют чему то.
То работает нормально, то судя по логам (сделал маяки) цыклирует по глукам 1, 2, 3, 1, 2, 3, а иногда улетает в 1,2,4 что тоже не логично, хотя ситуация одинаковая.
Из циклов выпрыгивать через гото нельзя! Не говоря уже что гото тут вообще не нужно.
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
LOGWRITE ("глюк1")
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
WAITMS(500)
LCLICK(647,163)
LOGWRITE ("глюк2")
GETSCREEN(886,501,886,501)
COLORMODE(6,886,501,886,501)
IF(PXL(886,501)=6118493)
WAITMS(1000)
LCLICK(574,617)
LOGWRITE ("глюк3")
WAITMS(2000)
$time = 0 // присваивая переменной 0 мы выйдем из цикла WHILE($time > $_ms)
ELSE
WAITMS(500)
LCLICK(958,500)
LOGWRITE ("глюк4")
WAITMS(3000)
$time = 0
END_IF
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0) // это условие выполнится только если $time не равна 0
LCLICK(574,617)
WAITMS(50)
LOGWRITE ("глюк5")
END_IF
-
Первый день в этом варюсь. Прошу прощения и спасибо!
-
Вот это вот условие IF(PXL(886,501)=6118493) никогда не выполнится. Так как перед ним стоит COLORMODE(6), а в шестом колормоде такой цвет отсутствует.
Варианта два, либо убирать колормод, либо ставить верный цвет. Твой цвет 6118493 - в колормоде №6 он равен 8355711
-
Вот это вот условие IF(PXL(886,501)=6118493) никогда не выполнится. Так как перед ним стоит COLORMODE(6), а в шестом колормоде такой цвет отсутствует.
Варианта два, либо убирать колормод, либо ставить верный цвет. Твой цвет 6118493 - в колормоде №6 он равен 8355711
А как так получилось? Я вроде все через лупу и алт+Q делал? Как мне тогда цвет в 6 колор перевести?
И можно ли в некоторых случаях использовать GOTO не в циклах, а по итогам IF вне цикла ?
P.S. проверил везде, как то странно вышло, в части скрипта указан цвет как вы и написали, а где то тот что я в части указал.
-
А как так получилось? Я вроде все через лупу и алт+Q делал? Как мне тогда цвет в 6 колор перевести?
(https://i.imgur.com/ipb05OC.png)
И можно ли в некоторых случаях использовать GOTO не в циклах, а по итогам IF вне цикла ?
Вроде можно.. Из справки "Переход на метку допускается в рамках блоков одного уровня вложенности "
Насколько мне извесно, то из блока IF END_IF прыгают, но не в цикл или подпрограмму, и вроде это не приводит к глобальным ошибкам, но я не уверен.
Желательно избегай использование GOTO . Подробнее тут http://crapware.aidf.org/forum/index.php?topic=49.0
P.S. проверил везде, как то странно вышло, в части скрипта указан цвет как вы и написали, а где то тот что я в части указал.
Из всего скрипта что я видел выше, там только два вызова ф-ции pxl(), больше связанного с графикой ничего нет... Так что мне нечего сказать по этому поводу :(.
-
подскажите как зациклить проверку по цвету?
у меня работает только один раз.
если красный то набирает единицу один раз, далее если опять красный то проверка по цвету не происходит и скрипт идет дальше, а нужно чтобы если опять красный , то опять нажать единицу
GETSCREEN
IF(PXL(781,294) = 5074924) // если красный то добавить цыфру 1
LCLICK(804,252)
WAITMS(50)
KEYPRESS(#1)
ELSE
IF(PXL(632,291) = 4895818) // если зеленый идти дальше
LCLICK(790,573)
END_IF
END_IF
-
Из всего скрипта что я видел выше, там только два вызова ф-ции pxl(), больше связанного с графикой ничего нет... Так что мне нечего сказать по этому поводу :(.
Вот весь скрипт. Одно понял, что я нифига не понимаю в грамматике скриптописания и чувствую что все можно сделать гораздо проще и читабельнее. Ума не приложу чем менять Гото, а подпрограммы SUB не такие глюченые как Гото? И при переходе в подпрограмму все переменные из скрипта сохраняются и как я понял обнуляются только по завершению подпрограммы?
start:
WAITMS(1000)
LCLICK(952,327) // старт
WAITMS(500)
$time = $_ms + 5000 // проверка готовности к атаке
WHILE($time > $_ms)
GETSCREEN(1206,132,1206,132)
COLORMODE(6,1206,132,1206,132)
IF(PXL(1206,132)=16777215)
WAITMS(200)
LCLICK(1038,286) // экспедиция
WAITMS(100)
$time = 0
ELSE
WAITMS(100)
LCLICK(952,327)
WAITMS(200)
END_IF
END_CYC
// к бою
atk:
WAITMS(500)
LOGWRITE ("В атаку!!!")
WAITMS(100)
LCLICK(899,560)
WAITMS(100)
// проверяем загрузились ли
perviy:
$var1 = 0
$time = $_ms + 10000 // 10 сек ищет цвет
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
LOGWRITE ("глюк1")
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
WAITMS(2000)
LCLICK(647,163)
LOGWRITE ("глюк2")
WAITMS(500)
GETSCREEN(886,501,886,501)
COLORMODE(6,886,501,886,501)
IF(PXL(886,501)=8355711)
WAITMS(200)
LCLICK(574,617)
LOGWRITE ("глюк3")
WAITMS(2000)
$var1 = 1
$time = 0
ELSE
WAITMS(200)
LCLICK(958,500)
LOGWRITE ("глюк4")
WAITMS(3000)
$var1 = 0
$time = 0
END_IF
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
LCLICK(574,617)
WAITMS(50)
LOGWRITE ("глюк5")
GOTO(perviy)
END_IF
IF($var1 = 1)
GOTO(perviy)
END_IF
vtoroy:
$var2 = 0
$time = $_ms + 10000 // делает второй ход
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
WAITMS(500)
LCLICK(647,277) // кастует
WAITMS(500)
GETSCREEN(883,502,883,502)
COLORMODE(6,883,502,883,502)
IF(PXL(883,502)=8355711)
WAITMS(200)
LCLICK(574,617)
WAITMS(2000)
$var2 = 1
$time = 0
ELSE
WAITMS(200)
LCLICK(958,500)
WAITMS(3000)
$var2 = 0
$time = 0
END_IF
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
GOTO(end)
END_IF
IF($var2 = 1)
GOTO(vtoroy)
END_IF
tretiy:
$var3 = 0
$time = $_ms + 10000 // делает третий ход
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
$var3 = 1
$time = 0
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
GOTO(end)
END_IF
IF($var3 = 1)
GOTO(boll)
END_IF
boll: // 3 ход!
$var4 = 0
$time = $_ms + 2000 // проверка заряда феникса
WHILE($time > $_ms)
GETSCREEN(643,524,643,524)
COLORMODE(6,643,524,643,524)
IF(PXL(643,524)=8388607)
WAITMS(100)
LOGWRITE ("Заряжен")
WAITMS(500)
LCLICK(645,540) // кастует феникс
WAITMS(500)
GETSCREEN(883,502,883,502)
COLORMODE(6,883,502,883,502)
IF(PXL(883,502)=8355711)
WAITMS(200)
LCLICK(574,617)
LOGWRITE ("хз 1")
WAITMS(2000)
$var4 = 1
$time = 0
ELSE
WAITMS(200)
LCLICK(958,500)
LOGWRITE ("хз 2")
WAITMS(200)
$var4 = 2
$time = 0
END_IF
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
LOGWRITE ("Не видит заряд1")
WAITMS(200)
LCLICK(654,418) // кастует шар
WAITMS(500)
GETSCREEN(883,502,883,502)
COLORMODE(6,883,502,883,502)
IF(PXL(883,502)=8355711)
WAITMS(200)
LCLICK(574,617)
LOGWRITE ("хз 3")
WAITMS(2000)
GOTO(boll)
ELSE
WAITMS(200)
LCLICK(958,500)
LOGWRITE ("хз 4")
WAITMS(3000)
GOTO(phenix)
END_IF
END_IF
IF($var4 = 1)
LOGWRITE ("вар4 1")
GOTO(boll)
END_IF
IF($var4 = 2)
LOGWRITE ("вар4 2")
GOTO(end)
END_IF
phenix: // ход феникса
LOGWRITE ("феникс")
$time = $_ms + 10000 // проверяет ход феникса
WHILE($time > $_ms)
GETSCREEN(642,97,642,97)
COLORMODE(6,642,97,642,97)
IF(PXL(642,97)=16777215)
LOGWRITE ("ход феня")
$time = 0
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
GOTO(end)
END_IF
$var5 = 0
$time = $_ms + 2000 // проверка заряда феникса
WHILE($time > $_ms)
GETSCREEN(643,524,643,524)
COLORMODE(6,643,524,643,524)
IF(PXL(643,524)=8388607)
WAITMS(100)
LOGWRITE ("Заряжен")
WAITMS(500)
LCLICK(645,540) // кастует феникс
WAITMS(500)
GETSCREEN(883,502,883,502)
COLORMODE(6,883,502,883,502)
IF(PXL(883,502)=8355711)
WAITMS(200)
LCLICK(574,617)
LOGWRITE ("ххз5")
WAITMS(2000)
$var5 = 1
$time = 0
ELSE
WAITMS(200)
LCLICK(958,500)
LOGWRITE ("ххз6")
WAITMS(1000)
$var5 = 2
$time = 0
END_IF
ELSE
WAITMS(50)
END_IF
END_CYC
IF($time ! 0)
WAITMS(100)
LOGWRITE ("Не видит заряд2")
WAITMS(100)
LCLICK(1330,57) // выходим
WAITMS(1000)
LCLICK(956,457)
WAITMS(1000)
LCLICK(1041,397)
WAITMS(1000)
GOTO(start)
END_IF
IF($var5 = 1)
LOGWRITE ("вар5-1")
GOTO(phenix)
END_IF
IF($var5 = 2)
LOGWRITE ("вар5-2")
GOTO(end)
END_IF
end:
$var6 = 0
$time = $_ms + 5000 // выходим
LOGWRITE ("енд")
WHILE($time > $_ms)
GETSCREEN(1038,546,1038,546)
COLORMODE(6,1038,546,1038,546)
IF(PXL(1038,546)=4177791)
WAITMS(100)
LOGWRITE ("Зашел в энд")
WAITMS(200)
LCLICK(1038,546)
WAITMS(1000)
GETSCREEN(974,398,974,398) // нет ли петомца
COLORMODE(6,974,398,974,398)
IF(PXL(974,398)=4177791)
WAITMS(500)
LOGWRITE ("ПЕТ")
LCLICK(974,398)
WAITMS(1000)
$var6 = 1
$time = 0
ELSE
WAITMS(100)
LOGWRITE ("не пет")
$var6 = 1
$time = 0
END_IF
WAITMS(100)
LCLICK(1038,546)
WAITMS(500)
GETSCREEN(1013,436,1013,436)
COLORMODE(6,1013,436,1013,436)
IF(PXL(1013,436)=16777215) // или 1009,279
WAITMS(1000)
LCLICK(1062,544)
WAITMS(1000)
LCLICK(888,443) // прав 888,443, лев 1024,453
WAITMS(2000)
LOGWRITE ("лвл")
$var6 = 1
$time = 0
ELSE
LOGWRITE ("не лвл")
$var6 = 1
$time = 0
END_IF
ELSE
WAITMS(100)
LCLICK(1053,503)
WAITMS(100)
END_IF
END_CYC
IF($time ! 0)
LCLICK(1330,57) // не нашел ход выходит
WAITMS(1000)
LCLICK(956,457)
WAITMS(1000)
LOGWRITE ("не вышел")
LCLICK(1041,397)
WAITMS(1000)
GOTO(start)
END_IF
IF($var6 = 1)
LOGWRITE ("вар6")
GOTO(atk)
END_IF
halt
-
подскажите как зациклить проверку по цвету?
у меня работает только один раз.
если красный то набирает единицу один раз, далее если опять красный то проверка по цвету не происходит и скрипт идет дальше, а нужно чтобы если опять красный , то опять нажать единицу
Циклы для того и придуманы чтобы зацикливать выполнение.
$check = 0
WHILE($check = 0)
GETSCREEN
IF(PXL(781,294) = 5074924) // если красный то добавить цыфру 1
LCLICK(804,252)
WAITMS(50)
KEYPRESS(#1)
WAITMS(50)
ELSE
IF(PXL(632,291) = 4895818) // если зеленый идти дальше
LCLICK(790,573)
WAITMS(50)
$check = 1 // разрешаем выход из цикла
END_IF
END_IF
END_CYC
-
Вот весь скрипт. Одно понял, что я нифига не понимаю в грамматике скриптописания и чувствую что все можно сделать гораздо проще и читабельнее. Ума не приложу чем менять Гото, а подпрограммы SUB не такие глюченые как Гото? И при переходе в подпрограмму все переменные из скрипта сохраняются и как я понял обнуляются только по завершению подпрограммы?
GOTO это грубый инструмент, костыль. В кликере нужно обеспечить больше команд чтобы избавиться от гото.
Твой код вполне верен, и если он работает то менять пока ничего не нужно.
Все переменные в кликере глобальные, доступны из любого участка кода. А обнулению подвергаются только переменные участвующие в параметре подпрограммы (кстати непонятно зачем обнуляются)
Переменные $par1 и $par2 по окончанию подпрограммы будут обнулены.
SUB(имя, $par1, $par2) // подпрограмма с параметрами
// тело выполняется только после вызова
END_SUB
имя(1,2) // вызов подпрограммы (обязательно ниже подпрограммы)
-
Они не обнулены, они уничтожены.
-
Подскажите пожалуйста как осуществить
Если в течении 30 секунд в пикселе не появился цвет
WHILE((PXL(1251,87)!5350225)&($time > $_ms))
то выполнить действие
LCLICK(121,48) //обновить страницу
и снова проверять наличие цвета в этих координатах
а если цвет появился за это время то выполнить действие
LCLICK(154,120) //идти дальше
-
Подскажите пожалуйста как осуществить
Можно вот так:
$time = $_time_t + 30 //засекаем 30сек
GETSCREEN
WHILE(PXL(1251,87)!5350225)
waitms(100)
GETSCREEN
IF($time < $_time_t) //если время закончилось
LCLICK(121,48) //обновить страницу
$time = $_time_t + 30 //обновляем таймер
END_IF
END_CYC
//как только появился пиксель, идем дальше
LCLICK(154,120) //идти дальше
-
не помогло, постоянно обновляет страницу, дальше не идет
-
Значит пиксель твой не равен цвету 5350225.
Попробуй проверять в логе что там у тебя:
$time = $_time_t + 30 //засекаем 30сек
GETSCREEN
WHILE(PXL(1251,87)!5350225)
waitms(100)
GETSCREEN
IF($time < $_time_t) //если время закончилось
print("30 сек прошло, обновляем страницу")
print("цвет искомого пикселя равен ", PXL(1251,87))
LCLICK(121,48) //обновить страницу
$time = $_time_t + 30 //обновляем таймер
END_IF
END_CYC
//как только появился пиксель, идем дальше
LCLICK(154,120) //идти дальше
-
принт выводит не искомый цвет на пикселе, а белый, тоесть который был до того который нужно искать