Author Topic: Умный кликер.  (Read 40084 times)

0 Members and 1 Guest are viewing this topic.

JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #30 on: September 10, 2013, 05:53:27 PM »
вы не могли бы приветси конкретный пример как прописавются картинки в цикл, где писать именно,

и как
вот у меня есть 3 файла room1.bmp, room2.bmp, room3.bmp, как прописать их в код чтобы выполнился их последовательный поиск

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Умный кликер.
« Reply #31 on: September 10, 2013, 06:04:15 PM »
положение комнат меняется только при перезгрузке карты, при тыканьи и переходе по комнатам, не меняестя, на комнату куда дошел герой наносится кровавый символ, означаюшьй присутствие в ней героя,

комнаты надо послетить по очереди, все 5.
Тогда вообще не вопрос. Завтра напишу, или вечером. Можешь и сам посмотреть, здесь на форуме есть.


JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #32 on: September 10, 2013, 06:15:04 PM »
Думаю не стоит, все заработало на ура тоесть,

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

там есть надпись "Осталось" я думаю прежде чем передавать управление в Taking Нужно написать подпрограмму проверяющую что  Осталось = 0 там так и написано можно скрин сделать, и если картинка собрать = 0 найдна то тыкать а если нет то выбирать другую комнату, что скажете??????????????

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Умный кликер.
« Reply #33 on: September 10, 2013, 06:21:13 PM »
вы не могли бы приветси конкретный пример как прописавются картинки в цикл, где писать именно,

и как
вот у меня есть 3 файла room1.bmp, room2.bmp, room3.bmp, как прописать их в код чтобы выполнился их последовательный поиск
Наделай этих румов с цифрами в имени от 1 до 18. В строке где написано 8 комнат в условии поменяй 8 на 18. Всё.


JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #34 on: September 10, 2013, 06:25:55 PM »
Так и сделал, догадался до вашего поста)))))))))))

по поводу проверки готова комната или нет, чтобы не тыкал в ту  где был,
Code: (clickermann) [Select]
[code]Chose:
// перебор комнат
HINTPOPUP("Стадия 9", "Выполняется поиск комнат... ")
$room = 1
FOR($room, $room<19) // восемь комнат
  GETSCREEN
  IF_PICTURE_IN (0,0,$_xmax,$_ymax,STRCONCAT("room",$room,".bmp"))
     LOGWRITE ("Стадия 9", "Найдена комната ",$room)
     HINTPOPUP("Стадия 9", "Найдена комната ",$room)
     LCLICK($_return1+20, $_return2+20)
     wait(10)
     GOSUB(Learning)
  ELSE
     LOGWRITE ("Стадия 9", "Не найдена комната ",$room," поиск следующей.")
     HINTPOPUP ("Стадия 9", "Не найдена комната ",$room," поиск следующей.")
     WAITMS(300)
  END_IF
END_CYC
           // Проверка готова ли комната к сбору.
SUB(Learning)
               wait(10)
               HINTPOPUP("Стадия 9", "Проверяем готова ли комната к сбору.")
               Wait(10)
               $check1 = 0
               $time = $_time_t + 120 // 2 минуты
               WHILE(($check1 = 0) & ($time > $_time_t))
                  IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ready.bmp")                   
                     HINTPOPUP("Стадия 9", "Комната готова - передаем управление в Taking")
                     wait(10)
                     gosub(Taking)
                     $check1 = 1
                     wait(10)
                  Else
                     HINTPOPUP("Стадия 9", "Комната не готова или уведомления")
                     goto
                  END_IF
               END_CYC
            END_SUB
//СОбирательство
            SUB(Taking)
               wait(10)
               HINTPOPUP("Стадия 9", "Ищем клавишу взять.")
               Wait(10)
               $check1 = 0
               $time = $_time_t + 120 // 2 минуты
               WHILE(($check1 = 0) & ($time > $_time_t))
                  IF_PICTURE_IN (0,0, $_xmax,$_ymax, "take.bmp")
                     LCLICK($_return1+5, $_return2+5)
                     HINTPOPUP("Стадия 9", "Собираем дела  Подпрограмма проверки клавиши взять")
                     wait(10)
                     $check1 = 1
                     wait(10)
                     Else
                     HINTPOPUP("Стадия 9", "Взять - не найдено, видимо закрыто уведомлениями. Переход к Attention")
                     gosub(ATTENTION1)
                  END_IF
               END_CYC
            END_SUB
           
[/code]

JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #35 on: September 10, 2013, 06:28:21 PM »
работать перестало.................. :-\


Вот окончательный код - теперь делается так,  ничего никуда не тыкается, просто проц на 100% и уделомление что скрипт закончил работу....

Code: (clickermann) [Select]
Chose:
// перебор комнат
HINTPOPUP("Стадия 9", "Выполняется поиск комнат... ")
$room = 1
FOR($room, $room<19) // восемь комнат
  GETSCREEN
  IF_PICTURE_IN (0,0,$_xmax,$_ymax,STRCONCAT("room",$room,".bmp"))
     LOGWRITE ("Стадия 9", "Найдена комната ",$room)
     HINTPOPUP("Стадия 9", "Найдена комната ",$room)
     LCLICK($_return1+20, $_return2+20)
     wait(10)
     GOSUB(Taking)
  ELSE
     LOGWRITE ("Стадия 9", "Не найдена комната ",$room," поиск следующей.")
     HINTPOPUP ("Стадия 9", "Не найдена комната ",$room," поиск следующей.")
     WAITMS(300)
  END_IF
END_CYC
    //СОбирательство
            SUB(Taking)
               wait(10)
               HINTPOPUP("Стадия 9", "Ищем клавишу взять.")
               Wait(10)
               $check1 = 0
               $time = $_time_t + 120 // 2 минуты
               WHILE(($check1 = 0) & ($time > $_time_t))
       // Проверка готова ли комната к сбору.
               wait(10)
               HINTPOPUP("Стадия 9", "Проверяем готова ли комната к сбору.")
               Wait(10)
               IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ready.bmp")                   
                     HINTPOPUP("Стадия 9", "Комната готова - передаем управление")
                     wait(10)
                  Else
                     HINTPOPUP("Стадия 9", "Комната не готова или уведомления")
                     gosub(ATTENTION)
                  END_IF
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "take.bmp")
                     LCLICK($_return1+5, $_return2+5)
                     HINTPOPUP("Стадия 9", "Собираем дела  Подпрограмма проверки клавиши взять")
                     wait(10)
                     $check1 = 1
                     wait(10)
                     Else
                     HINTPOPUP("Стадия 9", "Взять - не найдено, видимо закрыто уведомлениями. Переход к Attention")
                     gosub(ATTENTION1)
                  END_IF
               END_CYC
            END_SUB
« Last Edit: September 10, 2013, 06:40:43 PM by JulianDC »

JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #36 on: September 11, 2013, 08:57:32 AM »
В общем я переделал, много переработал , теперь есть хоть какие то сносные результаты, но картинки ищет очень долго (именно комнаты) иногда не находит хотя все 19 положений есть в базе, и это странно , предлагаю потестить вам этот скрипт в игре,

(там прописан переход к проблемному участку кода) тоесть вам надо открыть игру (разрешение 1366х768) чтобы масштаб совпадал, но  это по картинке можно сверить, зайти на крту, и  включить скрипт, он сразу начнет искать комнаты, и пытаться по ним кликать, в SUB Taking ghtшлось добавить предусловие с поиском картинки Отсалось = Готово. Отнадо предусловие не работает и почему то всегда говорит что комната готова, и это странно.

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

Программу со всеми картинками и скриптами, я залил сюда - http://zalil.ru/upload/34721885, к меня стоит MSE так что проверьте на вирусы и трояны перед запуском, и переименоуйте в RAR соответсвенно.

Жду комментариев.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Умный кликер.
« Reply #37 on: September 11, 2013, 11:16:21 AM »
Зачем ты выложил логин и пароль?
Как ты предлагаешь запустить скрипт в разрешении 1366х768, если у меня оно дома 1920х1080, на ноуте 1680х1050, на работе 1280х1024...
Ты опять упорно делаешь по своему и занимаешься копипастом.
Зачем ты упорно везде сунешь кусок:

Code: (clickermann) [Select]
      $check1 = 0
      $time = $_time_t + 30 // 2 минуты
      WHILE(($check1 = 0) & ($time > $_time_t))
Если ты его почти нигде не используешь? Почти везде ты внутри вызываешь такой же цикл и переменную перезатираешь.

Я написал $room = 0, зачем ты поменял на $room = 1?

У тебя ничего не заработает, пока не приведёшь всё в порядок.
1. Где GETSCREEN? Он то есть, то его пол скрипта нет? что где ищем?...

Давай я тебе на маленьком кусочке покажу, что неправильно точно и во многих местах.
2.       
Code: (clickermann) [Select]
wait(5)// поиск кнопки OK
      $check1 = 0
      $time = $_time_t + 30 // 2 минуты
      WHILE(($check1 = 0) & ($time > $_time_t))
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ok.bmp")
            LCLICK($_return1+30, $_return2+10)
            HINTPOPUP("Стадия 7", "Ok найдено")
            wait(10)
            $check1 = 1
         else
            HINTPOPUP("Стадия 7", "Ok не найдено")
            wait(10)
            $check1 = 1
            goto(close)
         END_IF
      END_CYC
     
      close:
      $check1 = 0
.....
Зачем здесь 2, 3, 4, 9, 13 строки? Что они делают и на что влияют?
У темя прилюбом раскладе нашли/не нашли сразу происходит выход.
Зачем 14 строка? у тебя действие скрипта и так продолжается дальше. По крайней мере в этом варианте.

3. строки 324-335
Code: (clickermann) [Select]
         GETSCREEN
         $check1 = 0
         $time = $_time_t + 120 // 2 минуты
         WHILE(($check1 = 0) & ($time > $_time_t))
            IF_PICTURE_IN (0,0, $_xmax,$_ymax, "go.bmp") // далее появится клавиша "продолжить."
               HINTPOPUP("Стадия 9", "Найдена кнопка - идти дальше.")
               wait(5)
               LCLICK($_return1, $_return2) // клик по этой клавише.
               wait(5)
               $check1 = 1
            END_IF
         END_CYC

Расписываю что выполняет этот кусок:
Делаем GETSCREEN с которым работает IF_PICTURE_IN.
Задаёшь $time значение текущего времени +120 секунд
Дальше идёт цикл WHILE выполняемый пока картинка не найдена или пока время не вышло.
Внутри цикла ты проверяешь ОДИН ЕДИНСТВЕННЫЙ снимок экрана, который ты сделал раньше и который у тебя НЕ МЕНЯЕТСЯ.

Как работает это чудо:
Если до самого начала нужная картинка успела вылезти и уже была. То происходит клик, ожидание 5 сек. и продолжение скрипта.
Если картинки сразу небыло, весь цикл крутится втупую 2 минуты (твои "долго ищет", ещё бы он долго не искал) не важно вылезла картинка или нет. Потом скрипт ничего не делая идёт дальше. За эти 2 мин картинка может вылезти но не найдётся - скрипт сбился.
Т.к. в ряде случаев "окно" появится не успевают, такая ситуация будет время от времени.


Это только для примера. Так у тебя почти ВЕЗДЕ. Разберись сначала как делаются условия, как пишутся циклы, как происходит анализ экрана и т.п. прочитай наконец справку внимательно.
Здесь исправлять нечего, для стороннего человека проще наверно написать заново.


JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #38 on: September 11, 2013, 02:42:57 PM »
Я человек, прямой если мне сказали - делай так- и картинка найдется, я так и делаю, я привык доверять опыту других людей потому как сам плохо разбираюсь,  это модно назвать - доверия (надеюсь вы меня поняли) а можно копи паст, как помотреть.

я думал
1 цикл нужен чтобы не просто проверить наличие картинки но проверять в течении 2 минут.
2 если в цикле найдена картинка, клик сделан, то надо написать чек =1 чтобы выйти из цикла,
3 го то CLOSE нужно бля того чтобы  перейти к поиску кнопки выход, то что я написал в коде ЛОГИЧНО но это посути тавтология. и тут вы конечно правы. просто я еще не настолько.... сознательный что ли... не знаю как это назвать.

НИЧЕГО ЗАНОВО ПИСАТЬ НЕ НАДО!!! ВСЕ ОТЛИЧНО РАБОТАЕТ МЕСТА ГДЕ ЦИКЛ НЕ НУЖЕН Я УБЕРУ!!
МНЕ ОДИН  УЧАСТОК ОСТАЛСЯ!! ЧТО ТАМ !!! РАЗБЕРЕМСЯ!!!!!

JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #39 on: September 11, 2013, 02:45:54 PM »
ROOM = 1 я написал потому что картинки нумеровал начиная с ROOm1 тоесть room просто картинки нет. ВСЕ ПРАВИЛЬНО

JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #40 on: September 11, 2013, 02:56:39 PM »
Цикл вайл я так понял надо выключать после выполнения условий которые в нем записаны, ведь он то выполняется, пока чек =0 и пока время 120 не прошло, значит если иф выполнился неплохо было бы переписать чек=1 ааа?? или я чето не догоняю, и того половина того что вы написали отпадает,

что насчет гетч, согласен полностью, непрофессионал, косяки это - норма, где надо засунул гетсккрин в в цикл, чтобы все трульно было, где  его не было - добавил.

JulianDC

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Умный кликер.
« Reply #41 on: September 11, 2013, 03:10:44 PM »
Вот интересно как скрипт картинки искал если реально я забыл GETSCREEN в куче циклов прописать............. загадка, ведь находил же и кликал, жестяк какойто

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Умный кликер.
« Reply #42 on: September 11, 2013, 03:19:49 PM »
Я человек, прямой если мне сказали - делай так- и картинка найдется, я так и делаю, я привык доверять опыту других людей потому как сам плохо разбираюсь,  это модно назвать - доверия (надеюсь вы меня поняли) а можно копи паст, как помотреть.

я думал
1 цикл нужен чтобы не просто проверить наличие картинки но проверять в течении 2 минут.
2 если в цикле найдена картинка, клик сделан, то надо написать чек =1 чтобы выйти из цикла,
3 го то CLOSE нужно бля того чтобы  перейти к поиску кнопки выход, то что я написал в коде ЛОГИЧНО но это посути тавтология. и тут вы конечно правы. просто я еще не настолько.... сознательный что ли... не знаю как это назвать.

НИЧЕГО ЗАНОВО ПИСАТЬ НЕ НАДО!!! ВСЕ ОТЛИЧНО РАБОТАЕТ МЕСТА ГДЕ ЦИКЛ НЕ НУЖЕН Я УБЕРУ!!
МНЕ ОДИН  УЧАСТОК ОСТАЛСЯ!! ЧТО ТАМ !!! РАЗБЕРЕМСЯ!!!!!

Ты задавал конкретный вопрос по поиску, тебе давали конкретный ответ. Ты из ответа выкинул строки, после чего действие работы нарушилось. Сравни твой кусок с поиском и скрипт данный тебе в ответе.

Это нужно не везде. Тем более не нужны такие большие ожидания при поисках того, что по логике игры может появиться, а может и нет.

Если ты сделал цикл, в любых вызовах SUB из этого цикла лучше не трогать значения переменных из условия выше (если это не задумано специально). Переходы изнутри цикла по GOTO правильней совсем исключить.

$room  должно быть 0
$room = 0
Прочитай в справке как работает цикл FOR. Что когда меняется.
« Last Edit: September 11, 2013, 03:21:27 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Умный кликер.
« Reply #43 on: September 11, 2013, 03:26:46 PM »
Цикл вайл я так понял надо выключать после выполнения условий которые в нем записаны, ведь он то выполняется, пока чек =0 и пока время 120 не прошло, значит если иф выполнился неплохо было бы переписать чек=1 ааа?? или я чето не догоняю, и того половина того что вы написали отпадает,
...

В первом примере который дал ничего не отпадает. Думаешь я выдумываю?
Ты создал цикл WHILE с условием $check1 = 0
Внутри цикла у тебя одно действие - поиск картинки.
В обоих случаях (и картинка найдена и нет) ты пишешь $check1 = 1 для выхода из цикла. Спрашивается "Нафига цикл вообще?" Если он всегда будет выполнятся 1 раз.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Умный кликер.
« Reply #44 on: September 11, 2013, 03:35:16 PM »
Вот интересно как скрипт картинки искал если реально я забыл GETSCREEN в куче циклов прописать............. загадка, ведь находил же и кликал, жестяк какойто
GETSCREEN срабатывает перед любым вызовом поиска сам, если скрипт запустить прямо из открытого редактора. Такой себе "режим отладки" с капканом. При обычном запуске скрипта не из редактора начнутся косяки.

Это одно. А второе это то, что GETSCREEN в скрипте есть и не один, просто ты его не обновляешь. Это как скриншот в память. Все функции поиска  ищут на этом скриншоте. В тех местах где был нужен GETSCREEN, а ты его не сделал он работает со старой не изменённой картинкой.

Пример Ты ищешь комнату. сделал GETSCREEN. Нашёл кликнул по ней. Вылезло окно. Для поиска этого окна тебе нужно сделать новый GETSCREEN. Если ищешь в цикле, делать GETSCREEN каждый раз внутри цикла.
Бывают случаи, когда изменений небыло или они были в другой области, тогда новый GETSCREEN можно не делать.