Author Topic: помогите мне вылечиться от goto  (Read 35847 times)

0 Members and 1 Guest are viewing this topic.

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
помогите мне вылечиться от goto
« on: September 08, 2014, 09:47:34 PM »
я только недавно обнаружил, что болен, но я еще не силен в скриптописании, и сам себе помочь не могу, вот пример:

Code: (clickermann) [Select]
$n=0
checkmail:
GETSCREEN
if(pxl(201,362)=3355443)
   LCLICK(60,399)  // klik
   move(300,500)
   ldown(300,500)
   WAITMS(RND(100,500))
   move(710,500)
   WAITMS(RND(100,500))
   lup(710,500)
   WAITMS(RND(100,500))
   keydown(#ctrl)
   WAITMS(RND(10,50))
   keypress(#c)
   keyup(#ctrl)
else
   WAIT(1)
   $n=$n+1
   if ($n = 15)
      screenshot
      goto(begin)
   end_if
   goto(checkmail)
end_if

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

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

« Last Edit: September 08, 2014, 10:41:37 PM by Луций »

Oraven

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

Code: (clickermann) [Select]
$time = $_time_t + 15 // таймер на 15 секунд
WHILE($time > $_time_t)
   GETSCREEN
   if(pxl(201,362)=3355443)
      LCLICK(60,399)  // klik
      move(300,500)
      ldown(300,500)
      WAITMS(RND(100,500))
      move(710,500)
      WAITMS(RND(100,500))
      lup(710,500)
      WAITMS(RND(100,500))
      keydown(#ctrl)
      WAITMS(RND(10,50))
      keypress(#c)
      keyup(#ctrl)
      WAITMS(100)
      $time = $_time_t + 15
   else
      WAITMS(100)
   end_if
END_CYC
GETSCREEN
SCREENSHOTEX(0,0, $_xmax,$_ymax, "Ошибка_", 1) // скриншот в JPG
HALT

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



Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Reply #2 on: September 08, 2014, 10:41:21 PM »
вот эту ссылку бы рядом с "учебными статьями"

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Reply #3 on: September 09, 2014, 05:22:24 AM »
попробовал вставить твой скрипт и долго плевался =)

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

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

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

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

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Reply #4 on: September 09, 2014, 05:35:56 AM »
вот что вышло в итоге:

Code: (clickermann) [Select]
// создаем мыло
$time = $_time_t + 15 // таймер
WHILE($time > $_time_t)
   GETSCREEN
   if(pxl(370,362)=3355443)
      ldown(470,500)
      WAITMS(500)
      lup(861,500)
      WAITMS(50)
      keydown(#ctrl)
      WAITMS(50)
      keypress(#c)
      keyup(#ctrl)
      WAITMS(50)
      $time = $_time_t
   else
    wait(1)
    if($time < $_time_t)
    hintpopup("с мылом облом")
    screenshot
    goto(begin)
   end_if
END_CYC

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #5 on: September 09, 2014, 09:55:21 AM »
вот что вышло в итоге:

Code: (clickermann) [Select]
// создаем мыло
$time = $_time_t + 15 // таймер
WHILE($time > $_time_t)
   GETSCREEN
   if(pxl(370,362)=3355443)
      ldown(470,500)
      WAITMS(500)
      lup(861,500)
      WAITMS(50)
      keydown(#ctrl)
      WAITMS(50)
      keypress(#c)
      keyup(#ctrl)
      WAITMS(50)
      $time = $_time_t
   else
    wait(1)
    if($time < $_time_t)
    hintpopup("с мылом облом")
    screenshot
    goto(begin)
   end_if
END_CYC

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

Потерял один END_IF.
И лучше из цикла по GOTO не выпрыгивать.
Code: (clickermann) [Select]
// создаем мыло
$time = $_time_t + 15 // таймер
WHILE($time > $_time_t)
   GETSCREEN
   if(pxl(370,362)=3355443)
      ldown(470,500)
      WAITMS(500)
      lup(861,500)
      WAITMS(50)
      keydown(#ctrl)
      WAITMS(50)
      keypress(#c)
      keyup(#ctrl)
      WAITMS(50)
      $time = 0
   else
      WAITMS(100)
   end_if
END_CYC

IF($time ! 0)
   hintpopup("с мылом облом")
   screenshot
   goto(begin)
END_IF


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #6 on: September 10, 2014, 03:06:25 PM »
Я вроде с подпрограммами работать начал, но от гото уйти просто не получается )) Это не возможно наверно )) Иногда надо прервать выполнение подпрограммы и выскочить из нее...
« Last Edit: September 10, 2014, 04:42:04 PM by Hito »
Я не ду... Потому и не бу...

aden

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


Hito

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

aden

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

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

Code: (clickermann) [Select]
$flag =0
while($flag=0)
lclick(-1,-1) // долбим куда нить

if(pxl(x,y) = $color)
// е мае до кликались чтото совсем хреново стало, больше кликать не будем
$flag=1
end_if
if(pxl(x,y) = $color2)
// оооо чтото накликали, нормуль пошли дальше
$flag=2
end_cyc

switch($flag)

case(1)
//блин вот это не очень хорошо надо бы это поправить
case(2)
//ништяяяк продолжаем в том же духе, только немного перекурим
« Last Edit: September 10, 2014, 03:49:09 PM by aden »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #10 on: September 10, 2014, 03:58:51 PM »
Я глубоко признателен тебе за пример, но из него я смог понять только то, что написано зеленым... )))
Я не ду... Потому и не бу...

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: помогите мне вылечиться от goto
« Reply #11 on: September 10, 2014, 04:03:24 PM »
тут челу нужно геймерским языком обьяснить:

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

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

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #12 on: September 10, 2014, 04:25:41 PM »
Вот мой пример МОИХ "флагов". Вот это я еще понимаю. Вот если на моем примере вы вставите свои флаги, то возможно я смогу понять эту систему...

Code: (clickermann) [Select]
SUB(dar)
   LOGWRITE ("dar")
   IF($time1 < $_time_t)
      KEYPRESS(189)
      WAITMS(600)
      $time1 = $_time_t + 9
   END_IF
END_SUB


SUB(slepoy boy)
   slepoy boy:
   LOGWRITE ("slepoy boy")
   dar()  // Юзаем тикающюю хилку
   GETSCREEN
   IF_PIXEL_IN(80,64, 80,64, 1930288) // Проверяем минимум ХП перса и если они найдены, то значет перса нужно выводить из слепого боя, в котором он юзает скилы наощупь, так сказать...
      GOTO(1)
   Else // Если ХП перса не проявились, то юзаем минимальные (безоткатные) скилы вслепую.
      BEEP(800,200)
      KEYPRESS(52)
      WAITMS(700)
      KEYPRESS(52)
      WAITMS(700)
      KEYPRESS(52)
      WAITMS(1250)
      GOTO(slepoy boy)
   END_IF
END_SUB

SUB(boy)
   boy:
   LOGWRITE ("boy")
   dar() // Юзаем тикающюю хилку
   GETSCREEN
   IF_PIXEL_IN(571,63, 571,63, 4539822) // Проверяем моба если он на персе, то юзаем скилы ударов.
      GETSCREEN
      IF_PIXEL_IN(588,847, 588,847, 329753) // Рывок
         KEYPRESS(51)
         WAITMS(850)
      Else
         GETSCREEN
         IF_PIXEL_IN(629,847, 629,847, 738459,6791167)  // Тройной 1
            KEYPRESS(52)
            WAITMS(650)
         Else
            GETSCREEN
            IF_PIXEL_IN(629,847, 629,847, 666529) // Тройной 2
               KEYPRESS(52)
               WAITMS(650)
            Else
               GETSCREEN
               IF_PIXEL_IN(629,847, 629,847, 465195) // Тройной 3
                  KEYPRESS(52)
                  WAITMS(1200)
               END_IF
            END_IF
         END_IF
      END_IF
   Else // Если моба нет, то проверяем минимум ХП у перса. Это нужно для того, что если моб уделает перса настолько, что экран затянет красной пеленой, то кликер ослепнет и не будет видеть не только ХП моба, но и ХП перса и скилы.
      GETSCREEN
      IF_PIXEL_IN(80,64, 80,64, 1930288) // Минимум хп
         GOTO(Time Out) // Если ХП перса найдены, а ХП моба мы до этого не нашли, то значит бой окончен и отправляем перса в Time Out
      Else // Если же и ХП перса не найдено, то это значит, что перс в трудном положении, о чем мы сигнализируем и переводим перса в слепой бой, так сказать...
         BEEP(800,200)
         slepoy boy()
      END_IF
   Else
      GOTO(Time Out)
   END_IF
   GOTO(boy)
END_SUB

1:

GETSCREEN
IF_PIXEL_IN(571,63, 571,63, 4539822) // Проверяем - не висит ли на персе моб.
   boy()  // Если висит, то отправляем в boy
Else
   WAITMS(100)
END_IF

Time Out:
LOGWRITE ("Time Out")

GETSCREEN
IF_PIXEL_IN(749,645, 749,645, 16449535) // Дроп
   KEYPRESS(70)
   WAITMS(2000)
Else
   GETSCREEN
   COLORMODE(6)
   IF_PICTURE_IN (2,44, 320,96, "хп-мп.bmp", -1, 100)  // Проверяем полное восстановление ХП и МП
      KEYPRESS(69) // Если восстановилось, то берем моба в таргет.
      GETSCREEN
      IF_PIXEL_IN(571,63, 571,63, 4539822) // Если моб в таргете, то отправляем перса в boy
         boy()
      Else
         GOTO(1) // Если моб в таргете не появился, то в Time Out
      END_IF
   Else // Если ХП, или МП не восстановлены (как и сразу после боя), то не теряем время и проверяем наличие бафов.
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN (1,83, 353,163, "второе дыхание.bmp", -1, 100) // Если бафы в норме, то ничего не делаем и ждем дальше восстановления ХП и МП, Предварительно проверив, не сагрился ли на нас какой-нибудь моб (скрипт перейдет на позицию 1)
      Else // Если бафы слетели, то бафаемся.
         KEYDOWN (16)
         WAITMS (50)
         KEYPRESS (189)
         WAITMS (50)
         KEYUP (16)
         WAITMS(1300)
      END_IF
   END_IF
END_IF
WAITMS(100)
« Last Edit: September 10, 2014, 04:44:28 PM by Hito »
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #13 on: September 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
« Last Edit: September 10, 2014, 05:13:14 PM by Vint »


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #14 on: September 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)" - вообще не понял... И к тому же я не понял, какое отношение эти команды относятся к вопросу, который мы обсуждаем СЕЙЧАС...
Вы простите меня, ребят. С одной стороны очень хочется все это понять, но с другой и вас тут раздражать не охота своей деревянностью...
Я не ду... Потому и не бу...