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

Основной раздел => Общие вопросы => Topic started by: Полуночник on October 28, 2012, 01:43:40 PM

Title: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 28, 2012, 01:43:40 PM
Вот предлагаю такой раздельчик создать)) А то как помотрел по форумам, так вижу что свои вопросы все пихают во все более менее по смыслу и названию темы
Здесь же каждый пусть выкладывает свои проблеммы и пусть знатоки помогают их решить. Так меньше флуда будет по форумам)))
Начинающие, нубы, чайники, самовары и т.д.
Если есть вопросы ПЕРЕД ТЕМ КАК ЗДЕСЬ ПИСАТЬ посмотрите раздел http://clickermann.tk/forum/index.php?topic=33.0 (http://clickermann.tk/forum/index.php?topic=33.0)
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 28, 2012, 02:18:51 PM
Для начала предоставлю на разбор полётов свой рабочий скрипт. Моя просьба такая:
1) указать на ошибки
2) подсказать как можно улучшить , уменьшить количество строк
а так же
Давайте, дорогой друже, Prapor наметим путь достижения цели.
3. Замените каждый элемент вашей последовательности на операторы программы. Переведите ваш язык на язык кликера.
скрипт для игрушки на 226 строк
Code: [Select]
mag1:             //иду в магазин
LCLICK(863,81)
WAIT(12)
sl1:                         //от сель и дальше продаю
getscreen
if_pixel_in(482, 262, 483, 263, 16579836)        // от сель и дальше проверяю есть ли чё продать, каждую ячейку надо проверять каждый раз,
 потому что если продал из неё что то, то в ней может появится что то ещё(из закрамов родины)
LCLICK(695,286)                                           
WAITMS(RND(300,500))
LCLICK(728,375) 
WAIT(RND(5,8))
GOTO(sl1)                      //если что то есть, то продали
else
GOTO(sl2)                     //если не надо продавать идём к следующей ячейке
end_if
sl2:
getscreen
if_pixel_in(482, 310, 483, 311, 16579836)
LCLICK(695,336)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl2)
else
GOTO(sl3)
end_if
sl3:
getscreen
if_pixel_in(482, 360, 483, 361, 16579836)
LCLICK(695,386)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl3)
else
GOTO(sl4)
end_if
sl4:
getscreen
if_pixel_in(482, 410, 483, 411, 16579836)
LCLICK(695,433)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl4)
else
GOTO(sl5)
end_if
sl5:
getscreen
if_pixel_in(482, 460, 483, 461, 16579836)
LCLICK(695,482)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl5)
else
GOTO(sl6)
end_if
sl6:
getscreen
if_pixel_in(482, 510, 483, 511, 16579836)
LCLICK(695,532)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl6)
else
GOTO(sl7)
end_if
sl7:
getscreen
if_pixel_in(482, 560, 483, 561, 16579836)
LCLICK(695,582)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl7)
else
goto(ht1)             //последняя 7я ячейка, иду на проверку
end_if

ht1:
getscreen
if_pixel_in(482, 556, 483, 557, 0)
HALT                                            //останавливаю скрипт, потому что все 7 ячеек забиты тем что мне нужно и надо убрать это куда-то
                  вручную (хотя конечно на это тоже можно сделать скрипт)))
else
LCLICK(929,81)  // места не забиты, перехожу на почту игры
WAIT(12)
end_if

po:
GETSCREEN
if_pixel_in(883, 301, 892, 306, 11982062)       
goto(ch)                                       //  есть письма идём забирать
else
goto(mag2)                                   //писем нет идём на последнюю продажу в магазин
end_if

ch:                                               //ну тут процедура сбора и удаления письма
LCLICK(968,305)
WAITMS(4000)
LCLICK(911,558)
WAITMS(110)
LCLICK(911,558)
WAITMS(RND(600,1000))
LCLICK(729,377)
WAITMS(RND(6000,8000))
LCLICK(916,308)
WAITMS(RND(600,1000))
LCLICK(1063,535)
WAITMS(RND(1000,2000))
LCLICK(738,494)
WAIT(RND(6,12))
GETSCREEN
IF_PICTURE_IN(655,487,703,525,  "555.bmp")  //проверяю есть ли ещё свободные места в закромах родины
goto(po)            //места есть, чистим почту
else
goto(mag1)      //мест нет больше, идём сдавать всё в магаз
END_IF

mag2:                        //последняя распродажа золотого запаса родины
LCLICK(863,81)
WAIT(12)
sl11:
getscreen
if_pixel_in(482, 262, 483, 263, 16579836)
LCLICK(695,286)
WAITMS(RND(300,500)) 
LCLICK(728,375) 
WAIT(RND(5,8))
GOTO(sl11)
else
GOTO(sl12)
end_if
sl12:
getscreen
if_pixel_in(482, 310, 483, 311, 16579836)
LCLICK(695,336)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl12)
else
GOTO(sl13)
end_if
sl13:
getscreen
if_pixel_in(482, 360, 483, 361, 16579836)
LCLICK(695,386)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl13)
else
GOTO(sl14)
end_if
sl14:
getscreen
if_pixel_in(482, 410, 483, 411, 16579836)
LCLICK(695,433)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl14)
else   
GOTO(sl15)
end_if
sl15:
getscreen
if_pixel_in(482, 460, 483, 461, 16579836)
LCLICK(695,482)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl15)
else
GOTO(sl16)
end_if
sl16:
getscreen
if_pixel_in(482, 510, 483, 511, 16579836)
LCLICK(695,532)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl16)
else
GOTO(sl17)
end_if
sl17:
getscreen
if_pixel_in(482, 560, 483, 561, 16579836)
LCLICK(695,582)
WAITMS(RND(300,500))
LCLICK(728,375)
WAIT(RND(5,8))
GOTO(sl17)
else
goto(ht)
end_if

ht:                                                                                //ну а тут проверяю есть ли что продавать. 
                               если нечего, то иду на большую дорогу за новыми приключениями
GETSCREEN
IF_PICTURE_IN(419,546,468,598, "333.bmp")
LCLICK(94,51)
WAITMS(500)
LCLICK(57,287)
WAITMS(500)
LCLICK(123,685)
KEYPRESS(#0)
WAITMS(120)
KEYPRESS(#0)
LCLICK(84,709)
WAIT(6000)
LCLICK(97,612)
WAITMS(500)
LCLICK(172,108)
goto(mag1)              //где то что то надыбал и иду в магаз
else
goto(ht1)           //а это если есть что продать, но не могу, потому что щёки чем то набиты как у хомяка, надо узнать чем
end_if

Вооот... жду ответов)) ток сразу не надо скрипт свой сувать с кучей функций - один фиг не пойму)))  Надо по порядку...  пережевать...  в рот положить ;D
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Oraven on October 28, 2012, 03:13:34 PM
1. Зачем делаешь такие пробелы в коментах? Это неудобно. Но главное длинные коменты у тебя не полностью закоментированны!
    Если пишешь длинный комент пиши его в несколько строк. Там в редакторе есть полоса, вот по ней и отделяй строки. Закоментить несколько строк можно мусоркой.
2. Ты пишешь везде
Code: [Select]
else
GOTO(sl4)
end_if
sl4:
это лишнее, скрипт и так пойдет в низ если условие не сработало
3. Пользуйся авто форматом чтобы расставить отступы. Так понятнее где что и сразу увидишь если где то забыл поставить завершающую end_if

Code: [Select]
mag1: //иду в магазин
LCLICK(863,81)
WAIT(12)

// от сель и дальше проверяю есть ли чё продать, каждую ячейку надо проверять
//каждый раз,потому что если продал из неё что то, то в ней может появится что то
//ещё(из закрамов родины)
sl1: //от сель и дальше продаю
getscreen
if_pixel_in(482, 262, 483, 263, 16579836)
   LCLICK(695,286)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl1) //если что то есть, то продали
end_if

sl2:
getscreen
if_pixel_in(482, 310, 483, 311, 16579836)
   LCLICK(695,336)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl2)
end_if

sl3:
getscreen
if_pixel_in(482, 360, 483, 361, 16579836)
   LCLICK(695,386)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl3)
end_if

sl4:
getscreen
if_pixel_in(482, 410, 483, 411, 16579836)
   LCLICK(695,433)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl4)
end_if

sl5:
getscreen
if_pixel_in(482, 460, 483, 461, 16579836)
   LCLICK(695,482)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl5)
end_if

sl6:
getscreen
if_pixel_in(482, 510, 483, 511, 16579836)
   LCLICK(695,532)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl6)
end_if

sl7:
getscreen
if_pixel_in(482, 560, 483, 561, 16579836)
   LCLICK(695,582)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl7)
end_if

ht1:
getscreen
if_pixel_in(482, 556, 483, 557, 0)
   // останавливаю скрипт, потому что все 7 ячеек забиты тем что мне нужно и надо
   // убрать это куда-то вручную (хотя конечно на это тоже можно сделать скрипт)
   HALT
else
   LCLICK(929,81) // места не забиты, перехожу на почту игры
   WAIT(12)
end_if

po:
GETSCREEN
if_pixel_in(883, 301, 892, 306, 11982062)
   goto(ch) // есть письма идём забирать
else
   goto(mag2) // писем нет идём на последнюю продажу в магазин
end_if

ch: //ну тут процедура сбора и удаления письма
LCLICK(968,305)
WAITMS(4000)
LCLICK(911,558)
WAITMS(110)
LCLICK(911,558)
WAITMS(RND(600,1000))
LCLICK(729,377)
WAITMS(RND(6000,8000))
LCLICK(916,308)
WAITMS(RND(600,1000))
LCLICK(1063,535)
WAITMS(RND(1000,2000))
LCLICK(738,494)
WAIT(RND(6,12))

GETSCREEN
IF_PICTURE_IN(655,487,703,525, "555.bmp") //проверяю есть ли ещё свободные места в закромах родины
   goto(po) //места есть, чистим почту
else
   goto(mag1) //мест нет больше, идём сдавать всё в магаз
END_IF

mag2: //последняя распродажа золотого запаса родины
LCLICK(863,81)
WAIT(12)

sl11:
getscreen
if_pixel_in(482, 262, 483, 263, 16579836)
   LCLICK(695,286)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl11)
end_if

sl12:
getscreen
if_pixel_in(482, 310, 483, 311, 16579836)
   LCLICK(695,336)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl12)
end_if

sl13:
getscreen
if_pixel_in(482, 360, 483, 361, 16579836)
   LCLICK(695,386)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl13)
end_if

sl14:
getscreen
if_pixel_in(482, 410, 483, 411, 16579836)
   LCLICK(695,433)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl14)
end_if

sl15:
getscreen
if_pixel_in(482, 460, 483, 461, 16579836)
   LCLICK(695,482)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl15)
end_if

sl16:
getscreen
if_pixel_in(482, 510, 483, 511, 16579836)
   LCLICK(695,532)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl16)
end_if

sl17:
getscreen
if_pixel_in(482, 560, 483, 561, 16579836)
   LCLICK(695,582)
   WAITMS(RND(300,500))
   LCLICK(728,375)
   WAIT(RND(5,8))
   GOTO(sl17)
end_if

//ну а тут проверяю есть ли что продавать. если нечего, то иду на большую дорогу
//за новыми приключениями
ht:
GETSCREEN
IF_PICTURE_IN(419,546,468,598, "333.bmp")
   LCLICK(94,51)
   WAITMS(500)
   LCLICK(57,287)
   WAITMS(500)
   LCLICK(123,685)
   KEYPRESS(#0)
   WAITMS(120)
   KEYPRESS(#0)
   LCLICK(84,709)
   WAIT(6000)
   LCLICK(97,612)
   WAITMS(500)
   LCLICK(172,108)
   goto(mag1) //где то что то надыбал и иду в магаз
else
   //а это если есть что продать, но не могу, потому что щёки чем то набиты как
   //у хомяка, надо узнать чем
   goto(ht1)
end_if
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 28, 2012, 04:18:50 PM
в скрипте у меня комментарий нет вообще. их я тут написал, что бы понятней было всем(ну как минимум начинающим) что и зачем делаю. За лишнее спс, у себя уже поправил)) А вот как автоформат сделать не знаю, не всё сразу понятно же)))
Да и вопросик ещё появился один. Помню что видел где-то его и видел ответ, но не найти. Собственно суть в чём:
допустим скрипт работает норм, но иногда страница не успевает догрузится, а кликер уже прёт дальше. Понятно после этого происходит совсем не то что надо.
В конфиге проги видел настроки скорости воспроизведения. Не то. А вот как прикрутить что бы кликер дожидался загрузки. Не, команду для проверки можно влепить конечно. Но проблемма в том, что например прыгая по разным страницам(скажем пару десятков миллионов страниц в день) после каждого действия проверять на догрузку? это же насколько увеличится скрипт и время его оработки? Поправте меня если это делается парой строкой в скрипте и не много времени занимает на самом деле)))
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Сергей on October 28, 2012, 09:40:31 PM
Ну сделай ожидание в несколько секунд, например WAITMS(4000)
Или в строку состояния браузера скриптом поглядывай.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 28, 2012, 09:43:49 PM
да ожидание то я поставил. примерно знаю сколько времени на что уходит. но у меня например с 18.00 до 23.00 инет еле ползает и страницы долго обновляются, в остальное время без проблемм. а я скрипт включил и на работу уехал. следить не могу.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Oraven on October 28, 2012, 10:05:37 PM
Делаешь SUB с ожиданием и проверкой а GOSUB вставляешь везде в скрипт где нужна перезагрузка. И тогда задержка будет именно столько сколько нужно.

GOSUB (wait_load)

SUB(wait_load)
// здесь ожидание загрузки страницы
END_SUB
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 28, 2012, 10:40:16 PM
хм... это вместо простого WAIT? так может помоч. а вот под этим что следует понимать? - // здесь ожидание загрузки страницы)
жаль только перезагрузка идёт в данном примере сверху почти после каждого клика)))
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Oraven on October 28, 2012, 11:25:18 PM
// здесь ожидание загрузки страницы - ну здесь будет код который напишешь ты и он будет все время вызываться GOSUB (wait_load)
SUB(wait_load) прописываешь в конце скрипта 1 раз
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: СлавьЯнИнъ on October 28, 2012, 11:54:04 PM
Ох  :) , Prapor, любитель готовых решений  ;D
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 29, 2012, 12:08:20 AM
Дело не в том что я любитель готовых примеров. Как вам уже писали в другой теме, для корифеев, знатоков этого дела всё вроде просто и чё тут размусоливать. А вот я ничего не знаю. И не только я. И тему, если почитаете начало топика, начал с того, что пожалуйста: подскажите, обьясните, распишите. На конкретном примере.
Это будет не только полезно мне, но и вам всем. Потому что кто то зайдёт на этот форум такой же как я. Посмотрит на мои например ошибки и подробные обьяснения и поймёт что к чему. Лишних вопросов ни у кого не будет.

справка программы:
GOSUB (sub_name) - вызывает подпрограмму (см. SUB)
Параметры
sub_name - имя ранее описанной подпрограммы
После выполнения интерпретация начинается со следующей после GOSUB строчки сценария           

Ну и скажите что тут понятного???? мне ничего...
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: СлавьЯнИнъ on October 29, 2012, 01:12:14 AM
В теме про суперклик приводились примеры с сабами.
http://clickermann.tk/forum/index.php?topic=8.msg297#msg297 (http://clickermann.tk/forum/index.php?topic=8.msg297#msg297)
Подпрограмма - это повторяющийся набор команд, который для удобства работы оформлен в отдельно. И может быть вызван в любой части сценария одной строкой.

В твоём случае, prapor, проверка на загрузку страницы может занимать, к примеру 200 строк кода. А проверять, как ты писал, надо постоянно, ну или часто. Для этого есть возможность наити способ однократной проверки: загрузилась страница или ещё ждать. Потом этот способ оформить в саб, и вставлять вызов саба в любое удобное время и место.

А вот уж как тебе твоя фантазия подскажет способ определения загрузки страницы ... это ты с ней сам кумекай  :D . Как писал выше Сергей это можно зделать визуальной проверкой.

Что нибудь яснее стало?
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: ЦИТРИН on October 29, 2012, 01:12:51 AM
Ну и скажите что тут понятного???? мне ничего...
Проблема даже не в том , что Вам лично  непонятна справка.
 Такие сложно-куцые описания, это  по сути посыл в никуда, типа справка ниочем.
Ибо вот ---> Продвинутый юзер в таком описании вовсе не нуждается,  а новичок быстро уходит в скуку ступора.
Этот факт отталкивают массу нормальных юзеров от хорошей  в целом программы.
Не хотелось  чтоб у автора был  потерян интерес  к развитию.
 
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 29, 2012, 01:40:56 AM
Пока точно стало ясно что писать скрипт на 200 строк к скрипту из 200 строк нет смысла. Тот топик я просматривал, но ввиду своего неумения(незнания) мало чего от туда извлёк. Надеюсь что в типовых алгоритмах что то подчерпну. И в этом топике  мне (и не только) помогут восполнить пробелы в знаниях. Пока что здесь, как и на мноооогих других форумах тупо отсылают к справочникам. Всё надо клещами вытягивать, чуть ли не через одно место.
Эхх мало, мало людей готовых потратить своё время просто на то что бы помочь кому то.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 29, 2012, 01:43:12 AM
Моя просьба такая:
1) указать на ошибки
2) подсказать как можно улучшить , уменьшить количество строк
а так же
Давайте, дорогой друже, Prapor наметим путь достижения цели.
3. Замените каждый элемент вашей последовательности на операторы программы. Переведите ваш язык на язык кликера.
ток сразу не надо скрипт свой сувать с кучей функций - один фиг не пойму)))  Надо по порядку...  пережевать...  в рот положить ;D
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: СлавьЯнИнъ on October 29, 2012, 05:05:36 AM
Заметьте! Три пункта:
1. Словами опишите, что конкретно хотите зделать с помощью скрипта.
2. Выпишите чёткую последовательность простых действий мышью и клавой, которая приведёт к нужному результату.
3. Замените каждый элемент вашей последовательности на операторы программы. Переведите ваш язык на язык кликера.

Когда бы вы описали их по порядку было бы проще вас понять и помочь. А переход сразу к третьему пункту заставляет применять навыки мета-дизассемблирования, что требует больших затрат, ибо читать мысли люди разучились.  :D
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 29, 2012, 05:29:53 AM
ясно. из пустого в порожнее. можно удалять тему
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Сергей on October 29, 2012, 12:46:27 PM
Ну вот например ожидание для хрома:
Code: [Select]
SUB(WAIT_UNTIL_LOAD)     
   $break = 0           
   WHILE($break = 0) 
      WAITMS(100)
      GETSCREEN
      COLORMODE(7)
      IF(PXL(69, 41) = 8355711)//Кнопка перезагрузки в хроме.
         $break = 1
      END_IF
   END_CYC
END_SUB

LCLICK(0,900)//Браузер в фокус
KEYPRESS(#F5)//Перезагружаем страницу

GOSUB(WAIT_UNTIL_LOAD)//Вызываем подпрограмму ожидания загрузки

print("loaded")//Сработает когда страница будет загружена
halt // for single run
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 29, 2012, 06:21:16 PM
Спасибо Сергей. Теперь намного яснее стала задача) Будем пытаться применить на практике. Кстати, не могли бы поподробней обьяснить про переменные? Вы уже давали пример, но я в нём ничего не понял. В моём скрипте(или макросе, как правильнее?) я каждый раз ввожу цвет который нужен. Пытался обьявить переменную, но тогда цвет не находит(((
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: ЦИТРИН on October 29, 2012, 06:28:53 PM
LCLICK(0,900)//Браузер в фокус
Сергей!)
Поясните, что имеется ввиду под  комментарием " //Браузер в фокус"?
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 29, 2012, 06:44:23 PM
как автоформат сделать не знаю
Редактирую в 4.5 версии, там нет автоформата) запустил 4.7 -увидел.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Сергей on October 29, 2012, 06:47:06 PM
ЦИТРИН, переключение на окно браузера.
Кстати, хром разумеется на полный экран.

prapor, возможно в синтаксисе ошибка.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on October 30, 2012, 02:54:16 AM
После обьяснений как и чего работает в кликере переделал свой скрипт:
Code: [Select]
//Гнев Богов
// Чистка почты и продажа лута в магазине



$x = 728       
$y = 375       
$x2 = 695     
$y2 = 284     
$c1 = 4079426
$c2 = 592154
$c3 = 1399552
$x3 = 490       
$x4 = 580       
$y3 = 262       
$y4 = 268     

mag1:
LCLICK(863,81)
GOSUB(WAIT_MA)
sl1:
getscreen
if_pixel_in($x3, $y3, $x4, $y4, $c1, $c2, $c3)
   LCLICK($x2,$y2)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl1)
end_if
sl2:
getscreen
if_pixel_in($x3, $y3+50, $x4, $y4+50, $c1, $c2, $c3)
   LCLICK($x2,$y2+50)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl2)
end_if
sl3:
getscreen
if_pixel_in($x3, $y3+100, $x4, $y4+100, $c1, $c2, $c3)
   LCLICK($x2,$y2+100)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl3)
end_if
sl4:
getscreen
if_pixel_in($x3, $y3+150, $x4, $y4+150, $c1, $c2, $c3)
   LCLICK($x2,$y2+150)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl4)
end_if
sl5:
getscreen
if_pixel_in($x3, $y3+200, $x4, $y4+200, $c1, $c2, $c3)
   LCLICK($x2,$y2+200)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl5)
end_if
sl6:
getscreen
if_pixel_in($x3, $y3+250, $x4, $y4+250, $c1, $c2, $c3)
   LCLICK($x2,$y2+250)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl6)
end_if
sl7:
getscreen
if_pixel_in($x3, $y3+300, $x4, $y4+300, $c1, $c2, $c3)
   LCLICK($x2,$y2+300)
   WAITMS(RND(300,500))
   LCLICK($x,$y)
   GOSUB(WAIT_MA)
   GOTO(sl7)
end_if
TRAYSAY ("на почту")   // сделал просто что бы видеть что что то происходит. работаю в оконном режиме. сам в это время занимаюсь другими делами.

ht1:
getscreen
if_pixel_in($x3, $y3+300, $x4, $y4+300, 11438, 9437313, 9456128)
   TRAYSAY("всё забито")
   SOUND("pause.wav")
   HALT
end_if
LCLICK(929,81)   
WAIT(RND(12,14))

po:
GETSCREEN
if_pixel_in(883, 301, 892, 306, 11982062)     
   goto(ch)
else
   TRAYSAY("писем нет")
   goto(F)
end_if

ch:
LCLICK(968,305)   
WAITMS(4500)
LCLICK(911,558)   
WAITMS(110)
LCLICK(911,558)
WAITMS(RND(600,1000))
LCLICK(729,377)       
GOSUB (WAIT_PO)
LCLICK(916,308)       
WAITMS(RND(600,1000))
LCLICK(1063,535)       
WAITMS(RND(1000,2000))
LCLICK(738,494)       
GOSUB (WAIT_PO)
GETSCREEN
//Проверка в трёх местах ячеек рюкзака в почте.
IF_PICTURE_IN(445,320,710,532, "1.bmp")               
   goto(po)
end_if
GETSCREEN
IF_PICTURE_IN(445,320,710,532, "2.bmp")             
   goto(po)
end_if
GETSCREEN
IF_PICTURE_IN(445,320,710,532, "3.bmp")             
   goto(po)
else
   TRAYSAY("мест нет, продаю")
   goto(mag1)
END_IF

F:
LCLICK(863,81)   
GOSUB(WAIT_MA)
GETSCREEN
IF_PICTURE_IN(419,546,468,598, "4.bmp")
   goto(mag1)
end_if
HALT

//задержки на обновление страницы
SUB(WAIT_MA)
   $break = 0
   WHILE($break = 0)
      WAIT(4)
      GETSCREEN
      IF(PXL(722, 287) = 1919430)   
         $break = 1
      END_IF
   END_CYC
END_SUB

SUB(WAIT_PO)
   $break = 0
   WHILE($break = 0)
      WAIT(4)
      GETSCREEN
      IF(PXL(841, 375) = 4078899)
         $break = 1
      END_IF
   END_CYC
END_SUB
Что можете посоветовать изменить? И если есть что переделать, то как?
В частности у меня вопрос по проверке в трёх местах ячеек рюкзака в почте. Пока реализовал так но!
 Там всего 20 ячеек. Сделал один снимок и по нему сделал сравнение. Оказалось что во всех ячейках рисунок разный, хоть и не заметно глазу. Пытался сделать с колормод, но всё равно сравнение подходит только к той ячейке кот скриншотил. Может я чего не то делал.... Вот как реализовать поиск пустых ячеек, без сравнения с картинкой? Сделал скрины на всякий... ячейки могут разные заняты быть.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Сергей on October 30, 2012, 11:12:53 AM
Ну тут только если css'ом попробовать какие-то метки ставить.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 01, 2012, 12:01:01 PM
Сделал таки сравнение картинки с колормодом и теперь сравнение только один раз происходит
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: СлавьЯнИнъ on November 01, 2012, 04:27:53 PM
Мне пока не ясно для чего ты сравниваешь рисунок, Прапор.
Если бы мне надо было проверять все эти двадцать ячеек по очереди, я бы сделал цикл с изменением координат проверки после каждого прохода. Ты хочешь, чтобы тебе сценарий кликерный написали, да ещё 100% работающий. Вот только я в эту игру не играю. А без реальных условий работать со скриншотами это малоэффективно.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 01, 2012, 06:43:43 PM
Та ниии..))) я не прошу мне написать сценарий)) я прошу ОБЬЯСНИТЬ какие ошибки совершаю и КАК лучше их исправить)))
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Ляпис on November 01, 2012, 09:46:08 PM
Если при наведении на ячейку меняется курсор мыши (например со стрелочки на кисть руки или крестик), можно по нему сделать определение:

Code: [Select]
move($x,$y)
if(pxlxor($x,$y,$x+5,$y+5) = $hash-cross)
lclick($x,$y) //продаём
end_if


Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 04, 2012, 12:48:13 PM
Что то мозги не соображают... Что я не правильно сделал? Почему цикл завершается и переходит к клику если находит и цвета и картинку?
Code: [Select]
$break = 0
WHILE($break = 0)
   getscreen
   if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
      $x2 = $_return1
      $y2 = $_return2
   else
      $break = 1
   end_if
   getscreen
   COLORMODE(6)
   IF_PICTURE_IN($x2-440,$y2+18,$x2-175,$y2+230, "1.bmp")
   else
      $break = 1
   END_IF
END_CYC
LCLICK(863,81)
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Oraven on November 04, 2012, 01:39:08 PM
Значит не находит. Чтобы точно убедиться как работает условие вставь внутрь него запись в лог.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 04, 2012, 06:25:52 PM
находит всё. при поиске ошибок всегда в условия вставляю запись в лог найденых координат. Но по каким то причинам не происходит цикл, и переходит к клику.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 05, 2012, 12:37:06 AM
Новая проблемма(( вот часть скрипта, который работает на чистку почты в игре, но мне надо кое что добавить:
Code: [Select]
GETSCREEN
if_pixel_in(800, 230, 1100, 320, 11982062)  //поиск есть ли письма на почте, если есть задаю координаты
   $x2 = $_return1
   $y2 = $_return2
else
   goto(F) // ухожу из почты если писем нет
end_if
GOSUB (PR)
LCLICK(79,17)
WAITMS(500)
LCLICK(69,118)
WAITMS(500)
KEYSTRING("Сервер")
WAITMS(100)
LCLICK(475,846)
WAITMS(500)                  //до этого момента запускаю поиск текста в мазиле (ctrl+f работать не хочет, поэтому кликаю)
getscreen
if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
  $e = $_return1
  $e1 = $_return2   //ну тут задаю нужные координаты и т. д.
  else
  goto(F)
end_if
LCLICK($e,$e1+2)
$break = 0
WHILE($break = 0)
  WAIT(1)
_PIXEL_IN(920,580, 980, 590, 65570)
  $break = 1
  END_IF
END_CYC
LCLICK($x2+20,$y2+256)
WAITMS(115)
LCLICK($x2+20,$y2+256)
GOSUB (WAIT_KN)
WAITMS(10)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
LCLICK($e+10,$e1+2)
WAITMS(RND(600,1000))
LCLICK($x2+170,$y2+237)
WAITMS(300)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)

И нужно бы мне внести проверку на результаты поиска пикселя.
GETSCREEN
IF($y2= 300)
GOTO(L)
Если он найден в одном месте - хорошо, если в другом($y2= 300), то пропускаем несколько строк и переходим ближе к концу скрипта.
Code: [Select]
GETSCREEN
if_pixel_in(800, 230, 1100, 320, 11982062)  //поиск есть ли письма на почте, если есть задаю координаты
   $x2 = $_return1
   $y2 = $_return2
else
   goto(F) // ухожу из почты если писем нет
end_if
GETSCREEN
   IF($y2= 300)    //вот я вставил проверку
   GOTO(L)         //если совпадает, то пропускаем часть команд
END_IF
GOSUB (PR)
LCLICK(79,17)
WAITMS(500)
LCLICK(69,118)
WAITMS(500)
KEYSTRING("Сервер")
WAITMS(100)
LCLICK(475,846)
WAITMS(500)                 
getscreen
if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
  $e = $_return1
  $e1 = $_return2   
  else
  goto(F)
end_if
LCLICK($e,$e1+2)
$break = 0
WHILE($break = 0)
  WAIT(1)
_PIXEL_IN(920,580, 980, 590, 65570)
  $break = 1
  END_IF
END_CYC
LCLICK($x2+20,$y2+256)
WAITMS(115)
LCLICK($x2+20,$y2+256)
GOSUB (WAIT_KN)
WAITMS(10)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
L:                               //переходим сюда если найденные координаты $y2=300
LCLICK($e+10,$e1+2)
WAITMS(RND(600,1000))
LCLICK($x2+170,$y2+237)
WAITMS(300)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
  После того как я добавил эту проверку начинается какафония.... работа скрипта ускоряется раз в 10 и зацикливается на нескольких кликах вызова поиска текста в бразе ("Сервер") находит письмо, но потом не кликает по нужным координатам и тупо снова начинает искать текст.
Code: [Select]
LCLICK(79,17) то.е. зацикливается на этих кликах, отсель
WAITMS(500)
LCLICK(69,118)
WAITMS(500)
KEYSTRING("Сервер")
WAITMS(100)
LCLICK(475,846)
WAITMS(500)                 
getscreen
if_pixel_in(800,230,1300,600, 7919672, 16777215, 16750899)
  $e = $_return1
  $e1 = $_return2   
  else
  goto(F)
end_if
LCLICK($e,$e1+2)
$break = 0
WHILE($break = 0)
  WAIT(1)
_PIXEL_IN(920,580, 980, 590, 65570)
  $break = 1
  END_IF
END_CYC
LCLICK($x2+20,$y2+256)                            и вот до сель
Почему? Я что то не правильно делаю?
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Oraven on November 05, 2012, 01:02:21 AM
Проверь скрипт на ошибки (_PIXEL_IN) и на забытые end_if
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 05, 2012, 06:30:16 AM
Вопрос...
Сравнение if($y2= 300) разве должно менять переменную? в скрипте что привел выше именно так и происходит. Поэтому и происходят глюки в работе.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Oraven on November 05, 2012, 01:39:29 PM
нет условие переменные не меняет, ошибка в другом

Code: [Select]
$y2 = 100
if($y2 = 300)
//
end_if
print($y2)
halt
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Полуночник on November 05, 2012, 03:24:59 PM
Тогда не пойму ничего.... проверял скрипт десять раз, ошибок не вижу. но как только ставлю это сравнение - идут косяки в работе скрипта(((
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: yaSanya on March 17, 2013, 05:13:39 PM
if (($y2>299)&($y2<301))
  // тело
end_if

так пробовал? работает?
или так:

$y_if=$y2
if ($y_if=300)
  // тело
end_if


если баг, его надо выявить, в каких случаях он срабатывает.

вот ещё сомнения:

  if (...)
    if (...)
      goto(s1)
    end_if
  else
    if (...)
      goto(s2)
   else
      goto(s3)
   end_if
  end_if

 кликерман, как я понял, сначало компилирует, ставит метки по эльзе, эндифу,
 потом начинает интерпретировать построчно... и где нить запутается в переходах по гоуту в ифах...
 (это по ощущениям, когда не можешь понять что происходит)
 поэтому стараюсь всё в флаги перевести, а проверка на флаг, стоит ли исполнять тот или иной блок в последовательном
 течении алгоритма- это дополнительно вложенный иф.. как бы не запутаться самому или кликеру...
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Vooj on May 15, 2013, 01:38:08 PM
Всем привет. не могу разобраться... имеем скрипт

Quote
getscreen

if_picture_in(0,0, $_xmax, $_ymax, "123.bmp", -1,90)
  move($_return1, $_return2)
  wait(1)
end_if
halt

В полноэкранном режиме работает как надо, в оконном тоже, но если привязаться к окну через альт+w - не отрабатывает. Что с этим делать?
Зы тестирую на сайте в хроме.
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Alex_nub on July 03, 2013, 04:41:13 PM
Решил не создавать отдельную тему: проблема тоже с GETSCREEN, и с видимостью картинки для кликера в оконном/полноэкранном режимах.
Сейчас тестирую Кликерман в игре Batlestar Galactica (браузер Опера). И выяснилось, что кликер видит и захватывает картинку ТОЛЬКО в оконном режиме БЕЗ привязки к окну. Во всех остальных вариантах (оконный с привязкой, полноэкранный с/без привязки) - только черный экран (хотя идентификатор окна и размер остаётся тот же, что и в оконном режиме "развёрнутом").
В связи с этим возникло два вопроса:
1) может ли такое быть, что перед основной картинкой в игре, есть ещё второе окно/слой - черное с частичной прозрачностью, типа фильтра? Это предположение тем более вероятно, что вся графика в игре (в космосе) очень тёмная, кто играл наверняка обращал на это внимание. (Причём, если резко вылететь из тени планеты на свет, то мгновенно меняется общая яркость всей картинки, видимо без пересчёта графики, так как освещённость всех обектом меняется за долю секунды, и графика никогда не тормозит в этот момент).
2) и как в данном случае посмотреть все элементы окна, или дополнительные окна/слои, если они там есть.
Где-то на форуме я вроде читал про такую программу для анализа окон, но сейчас не нахожу... (Если это действительно отдельное чёрное окно, то было бы неплохо увеличить его прозрачность, а то в игре местами слишком темно).

(Захват картинки тестировал вот таким скриптом, заодно смотрел как работает COLORMODE)
Code: (clickermann) [Select]
//размер экрана 1680х1050
getscreen
WAITMS(100)
screenshot("aster_z")            //8 бит
WAITMS(50)

getscreen
WAITMS(100)
COLORMODE(4, 80, 100, 1600, 950) //4 бита
screenshot("aster_4")
WAITMS(50)


getscreen
WAITMS(100)
COLORMODE(6, 80, 100, 1600, 950) //2 бита
screenshot("aster_6") 
WAITMS(100)

halt // for single run
Title: Re: Разбор ошибок и недочётов (Полезно для начинающих)
Post by: Roman on October 06, 2013, 05:04:42 AM
Всем здравствуйте! Не работает запись. Выдает такую ошибку -
Ошибка записи: не удалось установить перехватчик. Если у вас Vista или Win7, попробуйте отключить UAC.
Какой есть выход?