Автор Тема: помогите мне вылечиться от goto  (Прочитано 16352 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
помогите мне вылечиться от goto
« : Сентябрь 08, 2014, 09:47:34 pm »
я только недавно обнаружил, что болен, но я еще не силен в скриптописании, и сам себе помочь не могу, вот пример:

Код: Clickermann
  1. $n=0
  2. checkmail:
  3. GETSCREEN
  4. if(pxl(201,362)=3355443)
  5.   LCLICK(60,399)  // klik
  6.   move(300,500)
  7.   ldown(300,500)
  8.   WAITMS(RND(100,500))
  9.   move(710,500)
  10.   WAITMS(RND(100,500))
  11.   lup(710,500)
  12.   WAITMS(RND(100,500))
  13.   keydown(#ctrl)
  14.   WAITMS(RND(10,50))
  15.   keypress(#c)
  16.   keyup(#ctrl)
  17. else
  18.   WAIT(1)
  19.   $n=$n+1
  20.   if ($n = 15)
  21.      screenshot
  22.      goto(begin)
  23.   end_if
  24.   goto(checkmail)
  25. end_if

этот скрипт проверяет почтовый ящик, и если проверяется слишком долго (что то пошло не так) - идет в бегин

и еще вопрос - где покурить нормальный мануал по языку? справка кликермана у меня не пашет, на форуме нормального руководства я не нашел

« Последнее редактирование: Сентябрь 08, 2014, 10:41:37 pm от Луций »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3275
  • Котэ
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #1 : Сентябрь 08, 2014, 10:17:36 pm »
А где begin: ?? Все пишется проще, с использованием цикла и таймера. Цикл работает 15 секунд и прерывается, но если пиксел найден то время снова добавится, если же нет то цикл через 15 сек прервется, сделается снимок и стоп.

Код: Clickermann
  1. $time = $_time_t + 15 // таймер на 15 секунд
  2. WHILE($time > $_time_t)
  3.   GETSCREEN
  4.   if(pxl(201,362)=3355443)
  5.      LCLICK(60,399)  // klik
  6.      move(300,500)
  7.      ldown(300,500)
  8.      WAITMS(RND(100,500))
  9.      move(710,500)
  10.      WAITMS(RND(100,500))
  11.      lup(710,500)
  12.      WAITMS(RND(100,500))
  13.      keydown(#ctrl)
  14.      WAITMS(RND(10,50))
  15.      keypress(#c)
  16.      keyup(#ctrl)
  17.      WAITMS(100)
  18.      $time = $_time_t + 15
  19.   else
  20.      WAITMS(100)
  21.   end_if
  22. END_CYC
  23. GETSCREEN
  24. SCREENSHOTEX(0,0, $_xmax,$_ymax, "Ошибка_", 1) // скриншот в JPG
  25. HALT

Н счет справки СПРАВКА НЕ ОТКРЫВАЕТСЯ (решение проблемы)
Я даже онлайн справку прикрутил и в последней версии в папке присутствует файл "Если не открывается справка.txt"
и вот после этого
справка кликермана у меня не пашет, на форуме нормального руководства я не нашел
ну ну...



Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Ответ #2 : Сентябрь 08, 2014, 10:41:21 pm »
вот эту ссылку бы рядом с "учебными статьями"

Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Ответ #3 : Сентябрь 09, 2014, 05:22:24 am »
попробовал вставить твой скрипт и долго плевался =)

я наверное изначально должен был обьяснить, что скрипт длинный и это только первая часть из десятка уже пожалуй, она должна заходить на сайт с временным мылом, создавать его и копировать в буфер

1 если все ок - идем дальше
2 если сайт не загрузился или еще какая фигня - начинаем сначала и сохраняем скрин "фигни"

ваш цикл
1 вечно копирует мыло (1я часть всегда продлевает себя на 15 сек и длится бесконечно)
2 всегда сохраняет скрин с ошибкой

сейчас возьму напильник и доведу до ума

Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Ответ #4 : Сентябрь 09, 2014, 05:35:56 am »
вот что вышло в итоге:

Код: Clickermann
  1. // создаем мыло
  2. $time = $_time_t + 15 // таймер
  3. WHILE($time > $_time_t)
  4.   GETSCREEN
  5.   if(pxl(370,362)=3355443)
  6.      ldown(470,500)
  7.      WAITMS(500)
  8.      lup(861,500)
  9.      WAITMS(50)
  10.      keydown(#ctrl)
  11.      WAITMS(50)
  12.      keypress(#c)
  13.      keyup(#ctrl)
  14.      WAITMS(50)
  15.      $time = $_time_t
  16.   else
  17.   wait(1)
  18.   if($time < $_time_t)
  19.   hintpopup("с мылом облом")
  20.     screenshot
  21.   goto(begin)
  22.   end_if
  23. END_CYC

вместо хальта у меня бегин - другого способа перейти в начало без остановки скрипта я не знаю, научил скрипт общаться со мной и сохранять сообщение на скрине

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3225
  • Лечу куда хочу. cman 4.13.014x32, xp32
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #5 : Сентябрь 09, 2014, 09:55:21 am »
вот что вышло в итоге:

Код: Clickermann
  1. // создаем мыло
  2. $time = $_time_t + 15 // таймер
  3. WHILE($time > $_time_t)
  4.   GETSCREEN
  5.   if(pxl(370,362)=3355443)
  6.      ldown(470,500)
  7.      WAITMS(500)
  8.      lup(861,500)
  9.      WAITMS(50)
  10.      keydown(#ctrl)
  11.      WAITMS(50)
  12.      keypress(#c)
  13.      keyup(#ctrl)
  14.      WAITMS(50)
  15.      $time = $_time_t
  16.   else
  17.   wait(1)
  18.   if($time < $_time_t)
  19.   hintpopup("с мылом облом")
  20.     screenshot
  21.   goto(begin)
  22.   end_if
  23. END_CYC

вместо хальта у меня бегин - другого способа перейти в начало без остановки скрипта я не знаю, научил скрипт общаться со мной и сохранять сообщение на скрине

Потерял один END_IF.
И лучше из цикла по GOTO не выпрыгивать.
Код: Clickermann
  1. // создаем мыло
  2. $time = $_time_t + 15 // таймер
  3. WHILE($time > $_time_t)
  4.   GETSCREEN
  5.   if(pxl(370,362)=3355443)
  6.      ldown(470,500)
  7.      WAITMS(500)
  8.      lup(861,500)
  9.      WAITMS(50)
  10.      keydown(#ctrl)
  11.      WAITMS(50)
  12.      keypress(#c)
  13.      keyup(#ctrl)
  14.      WAITMS(50)
  15.      $time = 0
  16.   else
  17.      WAITMS(100)
  18.   end_if
  19. END_CYC
  20.  
  21. IF($time ! 0)
  22.   hintpopup("с мылом облом")
  23.   screenshot
  24.   goto(begin)
  25. END_IF


Hito

  • Герой форума
  • *****
  • Сообщений: 680
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #6 : Сентябрь 10, 2014, 03:06:25 pm »
Я вроде с подпрограммами работать начал, но от гото уйти просто не получается )) Это не возможно наверно )) Иногда надо прервать выполнение подпрограммы и выскочить из нее...
« Последнее редактирование: Сентябрь 10, 2014, 04:42:04 pm от Hito »
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Сообщений: 363
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #7 : Сентябрь 10, 2014, 03:25:29 pm »
Я вроде с подпрограммами работать начал, но от суба уйти просто не получается )) Это не возможно наверно )) Иногда надо прервать выполнение подпрограммы и выскочить из нее...
а ты думал програмировать это как изложение писать? тут вдохновение нужно как это все красиво закрутить чтобы потом не стыдно было =)
в общем нужно продумать алгоритм работы скрипта, и если нужно сложное взаимодействие выстроить зависимости и использовать флаги состояния.

vk.com/clickermannclubskype: aden16rus
Скрипты для троецарствие | darkorbit | драконы вечности | timezero
[spoiler=начинающие программисты]

Hito

  • Герой форума
  • *****
  • Сообщений: 680
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #8 : Сентябрь 10, 2014, 03:28:48 pm »
Ну вдохновения у меня столько, что я сутками у компа сижу "в памперсах"  ;D Но мне понимания вашего языка не хватает )) Вот ты сказал - "флаги состояния", например, и всё - у меня дым пошел от головы...  ;D
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Сообщений: 363
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #9 : Сентябрь 10, 2014, 03:45:15 pm »
Вот тебе пример
у тебя персонаж может перемещаться по локациям и у тебя где то это отображается, и он может забежать в какую нибудь очень неблагоприятную локацию где тебя могут полюбить мобы или другие игроки и ты хочешь чтобы если вдруг это произойдет то перс свалил бы от туда, ты вставляешь проверку текущего положения и если оно не такое какое нужно то перс допустим телепортится или выходит из игры или еще чтото, а в остальных случаях просто игнорит и занимается своими делами, также можно в зависимости от текущего состояния заставлять делать разные вещи, тут одно там другое, гдето еще третье, а в четвертом ничего не делать и ждать.

это как выход из цикла

Код: Clickermann
  1. $flag =0
  2. while($flag=0)
  3. lclick(-1,-1) // долбим куда нить
  4.  
  5. if(pxl(x,y) = $color)
  6. // е мае до кликались чтото совсем хреново стало, больше кликать не будем
  7. $flag=1
  8. end_if
  9. if(pxl(x,y) = $color2)
  10. // оооо чтото накликали, нормуль пошли дальше
  11. $flag=2
  12. end_cyc
  13.  
  14. switch($flag)
  15.  
  16. case(1)
  17. //блин вот это не очень хорошо надо бы это поправить
  18. case(2)
  19. //ништяяяк продолжаем в том же духе, только немного перекурим
  20.  
« Последнее редактирование: Сентябрь 10, 2014, 03:49:09 pm от aden »
vk.com/clickermannclubskype: aden16rus
Скрипты для троецарствие | darkorbit | драконы вечности | timezero
[spoiler=начинающие программисты]

Hito

  • Герой форума
  • *****
  • Сообщений: 680
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #10 : Сентябрь 10, 2014, 03:58:51 pm »
Я глубоко признателен тебе за пример, но из него я смог понять только то, что написано зеленым... )))
Я не ду... Потому и не бу...

Луций

  • Активный участник
  • ***
  • Сообщений: 235
    • Просмотр профиля
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Ответ #11 : Сентябрь 10, 2014, 04:03:24 pm »
тут челу нужно геймерским языком обьяснить:

допустим у тебя качается бот, и ему нужно лечится на каче, лечится он должен только когда хп падает ниже определенной цифры, и на это постоянно идет проверка

когда проверка прошла, включается флаг, и он говорит боту - не ищи новых мобов, а сиди и лечись иначе пиздец придет тебе, ну а выглядит это примерно так, как написал аден выше, и само выражение "флаг" в логическом программировании (я ведь правильно термины подбираю) - это вещь не совсем та, о которой думает обычный человек

Hito

  • Герой форума
  • *****
  • Сообщений: 680
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #12 : Сентябрь 10, 2014, 04:25:41 pm »
Вот мой пример МОИХ "флагов". Вот это я еще понимаю. Вот если на моем примере вы вставите свои флаги, то возможно я смогу понять эту систему...

Код: Clickermann
  1. SUB(dar)
  2.   LOGWRITE ("dar")
  3.   IF($time1 < $_time_t)
  4.      KEYPRESS(189)
  5.      WAITMS(600)
  6.      $time1 = $_time_t + 9
  7.   END_IF
  8. END_SUB
  9.  
  10.  
  11. SUB(slepoy boy)
  12.   slepoy boy:
  13.   LOGWRITE ("slepoy boy")
  14.   dar()  // Юзаем тикающюю хилку
  15.   GETSCREEN
  16.   IF_PIXEL_IN(80,64, 80,64, 1930288) // Проверяем минимум ХП перса и если они найдены, то значет перса нужно выводить из слепого боя, в котором он юзает скилы наощупь, так сказать...
  17.      GOTO(1)
  18.   Else // Если ХП перса не проявились, то юзаем минимальные (безоткатные) скилы вслепую.
  19.      BEEP(800,200)
  20.      KEYPRESS(52)
  21.      WAITMS(700)
  22.      KEYPRESS(52)
  23.      WAITMS(700)
  24.      KEYPRESS(52)
  25.      WAITMS(1250)
  26.      GOTO(slepoy boy)
  27.   END_IF
  28. END_SUB
  29.  
  30. SUB(boy)
  31.   boy:
  32.   LOGWRITE ("boy")
  33.   dar() // Юзаем тикающюю хилку
  34.   GETSCREEN
  35.   IF_PIXEL_IN(571,63, 571,63, 4539822) // Проверяем моба если он на персе, то юзаем скилы ударов.
  36.      GETSCREEN
  37.      IF_PIXEL_IN(588,847, 588,847, 329753) // Рывок
  38.         KEYPRESS(51)
  39.         WAITMS(850)
  40.      Else
  41.         GETSCREEN
  42.         IF_PIXEL_IN(629,847, 629,847, 738459,6791167)  // Тройной 1
  43.            KEYPRESS(52)
  44.            WAITMS(650)
  45.         Else
  46.            GETSCREEN
  47.            IF_PIXEL_IN(629,847, 629,847, 666529) // Тройной 2
  48.               KEYPRESS(52)
  49.               WAITMS(650)
  50.            Else
  51.               GETSCREEN
  52.               IF_PIXEL_IN(629,847, 629,847, 465195) // Тройной 3
  53.                  KEYPRESS(52)
  54.                  WAITMS(1200)
  55.               END_IF
  56.            END_IF
  57.         END_IF
  58.      END_IF
  59.   Else // Если моба нет, то проверяем минимум ХП у перса. Это нужно для того, что если моб уделает перса настолько, что экран затянет красной пеленой, то кликер ослепнет и не будет видеть не только ХП моба, но и ХП перса и скилы.
  60.      GETSCREEN
  61.      IF_PIXEL_IN(80,64, 80,64, 1930288) // Минимум хп
  62.         GOTO(Time Out) // Если ХП перса найдены, а ХП моба мы до этого не нашли, то значит бой окончен и отправляем перса в Time Out
  63.      Else // Если же и ХП перса не найдено, то это значит, что перс в трудном положении, о чем мы сигнализируем и переводим перса в слепой бой, так сказать...
  64.         BEEP(800,200)
  65.         slepoy boy()
  66.      END_IF
  67.   Else
  68.      GOTO(Time Out)
  69.   END_IF
  70.   GOTO(boy)
  71. END_SUB
  72.  
  73. 1:
  74.  
  75. GETSCREEN
  76. IF_PIXEL_IN(571,63, 571,63, 4539822) // Проверяем - не висит ли на персе моб.
  77.   boy()  // Если висит, то отправляем в boy
  78. Else
  79.   WAITMS(100)
  80. END_IF
  81.  
  82. Time Out:
  83. LOGWRITE ("Time Out")
  84.  
  85. GETSCREEN
  86. IF_PIXEL_IN(749,645, 749,645, 16449535) // Дроп
  87.   KEYPRESS(70)
  88.   WAITMS(2000)
  89. Else
  90.   GETSCREEN
  91.   COLORMODE(6)
  92.   IF_PICTURE_IN (2,44, 320,96, "хп-мп.bmp", -1, 100)  // Проверяем полное восстановление ХП и МП
  93.      KEYPRESS(69) // Если восстановилось, то берем моба в таргет.
  94.      GETSCREEN
  95.      IF_PIXEL_IN(571,63, 571,63, 4539822) // Если моб в таргете, то отправляем перса в boy
  96.         boy()
  97.      Else
  98.         GOTO(1) // Если моб в таргете не появился, то в Time Out
  99.      END_IF
  100.   Else // Если ХП, или МП не восстановлены (как и сразу после боя), то не теряем время и проверяем наличие бафов.
  101.      GETSCREEN
  102.      COLORMODE(6)
  103.      IF_PICTURE_IN (1,83, 353,163, "второе дыхание.bmp", -1, 100) // Если бафы в норме, то ничего не делаем и ждем дальше восстановления ХП и МП, Предварительно проверив, не сагрился ли на нас какой-нибудь моб (скрипт перейдет на позицию 1)
  104.      Else // Если бафы слетели, то бафаемся.
  105.         KEYDOWN (16)
  106.         WAITMS (50)
  107.         KEYPRESS (189)
  108.         WAITMS (50)
  109.         KEYUP (16)
  110.         WAITMS(1300)
  111.      END_IF
  112.   END_IF
  113. END_IF
  114. WAITMS(100)
« Последнее редактирование: Сентябрь 10, 2014, 04:44:28 pm от Hito »
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3225
  • Лечу куда хочу. cman 4.13.014x32, xp32
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #13 : Сентябрь 10, 2014, 05:10:21 pm »
Вот мой пример МОИХ "флагов". Вот это я еще понимаю. Вот если на моем примере вы вставите свои флаги, то возможно я смогу понять эту систему...

А я тебе уже показывал на твоём примере http://crapware.aidf.org/forum/index.php?topic=1406.msg6995#msg6995

стр 71, 82, 94-96, 147, 153, 166-169
« Последнее редактирование: Сентябрь 10, 2014, 05:13:14 pm от Vint »


Hito

  • Герой форума
  • *****
  • Сообщений: 680
    • Просмотр профиля
Re: помогите мне вылечиться от goto
« Ответ #14 : Сентябрь 10, 2014, 05:20:52 pm »
Вот мой пример МОИХ "флагов". Вот это я еще понимаю. Вот если на моем примере вы вставите свои флаги, то возможно я смогу понять эту систему...

А я тебе уже показывал на твоём примере http://crapware.aidf.org/forum/index.php?topic=1406.msg6995#msg6995

стр 71, 82, 94-96, 147, 153, 166-169
Ты прости, но я там вот этих команд - "boy = 1", "slepoy_boy = 1", "WHILE(boy = 1)", "WHILE(slepoy_boy = 1)" - вообще не понял... И к тому же я не понял, какое отношение эти команды относятся к вопросу, который мы обсуждаем СЕЙЧАС...
Вы простите меня, ребят. С одной стороны очень хочется все это понять, но с другой и вас тут раздражать не охота своей деревянностью...
Я не ду... Потому и не бу...