Author Topic: Разбор ошибок и недочётов (Полезно для начинающих)  (Read 16283 times)

0 Members and 1 Guest are viewing this topic.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Вот предлагаю такой раздельчик создать)) А то как помотрел по форумам, так вижу что свои вопросы все пихают во все более менее по смыслу и названию темы
Здесь же каждый пусть выкладывает свои проблеммы и пусть знатоки помогают их решить. Так меньше флуда будет по форумам)))
Начинающие, нубы, чайники, самовары и т.д.
Если есть вопросы ПЕРЕД ТЕМ КАК ЗДЕСЬ ПИСАТЬ посмотрите раздел http://clickermann.tk/forum/index.php?topic=33.0
« Last Edit: October 28, 2012, 04:50:30 PM by prapor »

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Для начала предоставлю на разбор полётов свой рабочий скрипт. Моя просьба такая:
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
« Last Edit: October 28, 2012, 02:28:01 PM by prapor »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
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

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
в скрипте у меня комментарий нет вообще. их я тут написал, что бы понятней было всем(ну как минимум начинающим) что и зачем делаю. За лишнее спс, у себя уже поправил)) А вот как автоформат сделать не знаю, не всё сразу понятно же)))
Да и вопросик ещё появился один. Помню что видел где-то его и видел ответ, но не найти. Собственно суть в чём:
допустим скрипт работает норм, но иногда страница не успевает догрузится, а кликер уже прёт дальше. Понятно после этого происходит совсем не то что надо.
В конфиге проги видел настроки скорости воспроизведения. Не то. А вот как прикрутить что бы кликер дожидался загрузки. Не, команду для проверки можно влепить конечно. Но проблемма в том, что например прыгая по разным страницам(скажем пару десятков миллионов страниц в день) после каждого действия проверять на догрузку? это же насколько увеличится скрипт и время его оработки? Поправте меня если это делается парой строкой в скрипте и не много времени занимает на самом деле)))
« Last Edit: October 28, 2012, 07:34:16 PM by prapor »

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Ну сделай ожидание в несколько секунд, например WAITMS(4000)
Или в строку состояния браузера скриптом поглядывай.
Отсутствую.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
да ожидание то я поставил. примерно знаю сколько времени на что уходит. но у меня например с 18.00 до 23.00 инет еле ползает и страницы долго обновляются, в остальное время без проблемм. а я скрипт включил и на работу уехал. следить не могу.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Делаешь SUB с ожиданием и проверкой а GOSUB вставляешь везде в скрипт где нужна перезагрузка. И тогда задержка будет именно столько сколько нужно.

GOSUB (wait_load)

SUB(wait_load)
// здесь ожидание загрузки страницы
END_SUB

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
хм... это вместо простого WAIT? так может помоч. а вот под этим что следует понимать? - // здесь ожидание загрузки страницы)
жаль только перезагрузка идёт в данном примере сверху почти после каждого клика)))
« Last Edit: October 28, 2012, 10:52:20 PM by prapor »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
// здесь ожидание загрузки страницы - ну здесь будет код который напишешь ты и он будет все время вызываться GOSUB (wait_load)
SUB(wait_load) прописываешь в конце скрипта 1 раз

СлавьЯнИнъ

  • Активный участник
  • ***
  • Posts: 179
    • View Profile
Ох  :) , Prapor, любитель готовых решений  ;D
добрый смех равняет всех

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Дело не в том что я любитель готовых примеров. Как вам уже писали в другой теме, для корифеев, знатоков этого дела всё вроде просто и чё тут размусоливать. А вот я ничего не знаю. И не только я. И тему, если почитаете начало топика, начал с того, что пожалуйста: подскажите, обьясните, распишите. На конкретном примере.
Это будет не только полезно мне, но и вам всем. Потому что кто то зайдёт на этот форум такой же как я. Посмотрит на мои например ошибки и подробные обьяснения и поймёт что к чему. Лишних вопросов ни у кого не будет.

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

Ну и скажите что тут понятного???? мне ничего...

СлавьЯнИнъ

  • Активный участник
  • ***
  • Posts: 179
    • View Profile
В теме про суперклик приводились примеры с сабами.
http://clickermann.tk/forum/index.php?topic=8.msg297#msg297
Подпрограмма - это повторяющийся набор команд, который для удобства работы оформлен в отдельно. И может быть вызван в любой части сценария одной строкой.

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

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

Что нибудь яснее стало?
добрый смех равняет всех

ЦИТРИН

  • Супермодератор
  • Оплот сообщества
  • *
  • Posts: 484
  • Марафон опавших листьев, коктейль из дыма и мыслей
    • View Profile
Ну и скажите что тут понятного???? мне ничего...
Проблема даже не в том , что Вам лично  непонятна справка.
 Такие сложно-куцые описания, это  по сути посыл в никуда, типа справка ниочем.
Ибо вот ---> Продвинутый юзер в таком описании вовсе не нуждается,  а новичок быстро уходит в скуку ступора.
Этот факт отталкивают массу нормальных юзеров от хорошей  в целом программы.
Не хотелось  чтоб у автора был  потерян интерес  к развитию.
 
Бабочки полёт будит тихую поляну в солнечном свету...

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Пока точно стало ясно что писать скрипт на 200 строк к скрипту из 200 строк нет смысла. Тот топик я просматривал, но ввиду своего неумения(незнания) мало чего от туда извлёк. Надеюсь что в типовых алгоритмах что то подчерпну. И в этом топике  мне (и не только) помогут восполнить пробелы в знаниях. Пока что здесь, как и на мноооогих других форумах тупо отсылают к справочникам. Всё надо клещами вытягивать, чуть ли не через одно место.
Эхх мало, мало людей готовых потратить своё время просто на то что бы помочь кому то.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Моя просьба такая:
1) указать на ошибки
2) подсказать как можно улучшить , уменьшить количество строк
а так же
Давайте, дорогой друже, Prapor наметим путь достижения цели.
3. Замените каждый элемент вашей последовательности на операторы программы. Переведите ваш язык на язык кликера.
ток сразу не надо скрипт свой сувать с кучей функций - один фиг не пойму)))  Надо по порядку...  пережевать...  в рот положить ;D