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

Основной раздел => Использование => Topic started by: Aspirant on March 14, 2017, 11:39:05 PM

Title: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 14, 2017, 11:39:05 PM
Доброго времени суток. Имеется бот, который запускается в бою, подбирает определённый уровень врага по картинке и вступает в бой, если уровень не совпадает, то бот перебирает противников, пока не найдётся нужный уровень. Но есть два момента это стабильность, даже если на экране враг нужного уровня он может его игнорировать и дальше перебирать до бесконечности врагов. Момент номер два, хотелось бы в код добавить счётчик, который бы считал количество удачных подборов врага нужного уровня, то есть скажем мне нужен противник 72 уровня и каждый раз, когда он попадается и высаживаются войска к атаке счётчик увеличивался на единицу для дальнейшего добавления функционала. Разбирался с кликером пару дней получилось вот такое, хотелось бы получить советы как оптимизировать код для стабильности и добавление счётчика.
Код бота следующий:
Code: [Select]
// New Script
// Author: Anonymous
// Version: 1.0 (12.03.2017)

#name "Bot"
START:
// Ищем 72 уровень

WAIT(5)

GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"72.bmp")
   WAIT(4)
         WAITMS(500)
LCLICK(1200,672)
         WAITMS(500)
LCLICK(1200,672)
         WAITMS(500)
LCLICK(1200,672)
WAITMS(500)
LCLICK(1200,672)
WAITMS(500)
LCLICK(1200,672)
WAITMS(500)
LCLICK(1200,672)
WAITMS(500)
LCLICK(824,638)
   WAIT(5)

WAIT(60)

GOTO(SUNDUK)

ELSE

   LCLICK(1177, 362)
   WAIT(4)

GOTO(START)

SUNDUK:
//Ищем фрагмент кнопки для открытия сундука
WAIT(2)

GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"otkr.bmp")
    LCLICK($_return1, $_return2)
   WAIT(4)
END_IF


//Возврат поиску противника
LCLICK(680,659)

WAIT(3)

LCLICK(1236,646)

WAIT(2)

LCLICK(832,549)

WAIT(5)


GOTO(START)
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Vint on March 15, 2017, 06:24:35 AM
Где END_IF от первого условия?
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Vint on March 15, 2017, 09:03:37 AM
Избавимся от GOTO и проставим недостающий END_IF/
+ счётчик
Code: (clickermann) [Select]
#name "Bot"

DEFINE($count, 0) // счётчик удачного нахождения


// Ищем 72 уровень
$check = 0
WHILE($check = 0)
    WAIT(5)
   
    GETSCREEN
    IF_PICTURE_IN(0,0,$_xmax,$_ymax,"72.bmp")
        INC($count) // увеличиваем счётчик
       
        //WAIT(4)    // сразу после поиска задержки не нужны
        //WAITMS(500)
        LCLICK(1200,672)
        WAITMS(500)
        LCLICK(1200,672)
        WAITMS(500)
        LCLICK(1200,672)
        WAITMS(500)
        LCLICK(1200,672)
        WAITMS(500)
        LCLICK(1200,672)
        WAITMS(500)
        LCLICK(1200,672)
        WAITMS(500)
        LCLICK(824,638)
        WAIT(5)
       
        WAIT(60)
       
        $check = 1
    ELSE
        LCLICK(1177, 362)
        WAIT(4)
    END_IF
END_CYC

SUNDUK:
//Ищем фрагмент кнопки для открытия сундука
WAIT(2)

GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"otkr.bmp")
    LCLICK($_return1, $_return2)
    WAIT(4)
END_IF


//Возврат поиску противника
LCLICK(680,659)

WAIT(3)

LCLICK(1236,646)

WAIT(2)

LCLICK(832,549)

WAIT(5)

Если счётчик нужен не в пределах одной работы скрипта, то значение нужно читать/сохранять в файл.
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 16, 2017, 10:30:56 PM
Благодарю  :) Код работает, только осталась одна проблемка, даже если он находит нужный (72) уровень, он всё равно выполняет дальнейший перебор соперников. Добвил запись в лог удачные срабатывания счётчика, и он дошёл до 5, и начался непрерывный перебор соперников. Что ещё заметил, если два или более раз подряд не находит нужный уровень при переборе, так на переборе и застревает.
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Oraven on March 17, 2017, 08:09:12 AM
Code: (clickermann) [Select]
#name "Bot"

DEFINE($count, 0) // счётчик удачного нахождения

// Ищем 72 уровень
$check = 0
WHILE($check = 0) // цикл выполняется если переменная равна 0
   GETSCREEN
   IF_PICTURE_IN(0,0,$_xmax,$_ymax,"72.bmp")
      INC($count) // увеличиваем счётчик
      LOGWRITE ("Найдено ", $count, " раз")
     
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(824,638)
      WAIT(60)
     
      $check = 1 // если поменять значение цикл перестанет повторяться
   ELSE
      LCLICK(1177,362)
      WAIT(4)
   END_IF
END_CYC

//Ищем фрагмент кнопки для открытия сундука
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"otkr.bmp")
   LCLICK($_return1, $_return2)
   WAIT(4)
END_IF

//Возврат поиску противника
LCLICK(680,659)
WAIT(3)

LCLICK(1236,646)
WAIT(2)

LCLICK(832,549)
WAIT(5)

Можно прикрутить к циклу таймер, в этом случаи он будет прокручивать код не бесконечно
Code: (clickermann) [Select]
#name "Bot"

DEFINE($count, 0) // счётчик удачного нахождения

// Ищем 72 уровень
$time = $_time_t + 60 // таймер на 60 секунд
WHILE($time > $_time_t) // цикл выполняется 60 секунд
   GETSCREEN
   IF_PICTURE_IN(0,0,$_xmax,$_ymax,"72.bmp")
      INC($count) // увеличиваем счётчик
      LOGWRITE ("Найдено ", $count, " раз")
     
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(1200,672)
      WAITMS(500)
      LCLICK(824,638)
      WAIT(60)
     
      $time = 0
   ELSE
      LCLICK(1177,362)
      WAIT(4)
   END_IF
END_CYC

//Ищем фрагмент кнопки для открытия сундука
GETSCREEN
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"otkr.bmp")
   LCLICK($_return1, $_return2)
   WAIT(4)
END_IF

//Возврат поиску противника
LCLICK(680,659)
WAIT(3)

LCLICK(1236,646)
WAIT(2)

LCLICK(832,549)
WAIT(5)
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 18, 2017, 08:27:28 PM
Скрипт стал работать стабильные, но чудеса не прекращаются. Он находит нужный уровень, начинает кликать и высаживает войска. На следующий заход он может проигнорировать противника с нужным уровнем. А может пролистав 2-3 противников, на нужном высадить войска. И если он пролистал где-то около 5 соперников, он уже остановиться не может, продолжает их листать. Может есть некоторые проблемы с нахождением картинки с уровнем, хоть она и подрезана по максимуму, чтоб небыло лишнего фона? Или это благодаря блюстаксу такая веселуха ?! Может ему ещё сюда привязку к окну добавить в код, хотя он и так тут работает, но если пробую на другом эмуле (MEmu), вроде что-то происходить но кликов не происходит.
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Oraven on March 18, 2017, 08:36:32 PM
Нужно использовать цветокоррекцию и процент совпадения.
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Vint on March 18, 2017, 11:16:27 PM
Или это благодаря блюстаксу такая веселуха ?! Может ему ещё сюда привязку к окну добавить в код...
Ага, добавь. Веселуха увеличится раз в десять.
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 29, 2017, 10:18:16 AM
Добавил пару параметров в строку "IF_PICTURE_IN(0,0,$_xmax,$_ymax,"72.bmp, -1, 15") и сумашествие закончилось. Стал работать как надо :) Но есть ещё 1 вопрос. Бой может длиться от 30 сек до 60. Думаю теперь как добавить проверку с шагом в 5 сек, закончился бой или нет, чтобы производить дальнейшие действия для сбора плюх. А то скрипт начинает это делать до того как бой кончился из-за того, что он превысил время задержки. Или есть уже готовые решения на эту тему ?
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 29, 2017, 10:24:07 AM
Или это благодаря блюстаксу такая веселуха ?! Может ему ещё сюда привязку к окну добавить в код...
Ага, добавь. Веселуха увеличится раз в десять.

Я пробовал, правда для MUemu и там постоянно ошибки вылазили. Где-то тут на форуме находил тему по теме привязки, там так красиво расписано было для чего это придумано. Былобы хорошо запустить всю эту радость, свернуть и заниматься своими делами, чтобы в виртуалке не поднимать весь этот огород :)
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Oraven on March 29, 2017, 10:36:30 AM
Quote
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"72.bmp, -1, 15")

Уверен что все правильно написал? Потому что здесь косяки с кавычками.
Правильно так
Code: (clickermann) [Select]
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "72.bmp",  -1, 15)
Однако 15% совпадения это слишком. Чем меньше процент тем дольше поиск.
Кроме процента нужно обязательно применять цветокоррекцию. Так несоответствие с 15 поднимется до 60-80%

Снимок получают таким скриптом
Code: (clickermann) [Select]
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6)
SCREENSHOT
HALT

В своем скрипте также нужно после GETSCREEN писать команду COLORMODE
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Vint on March 29, 2017, 10:38:43 AM
... Былобы хорошо запустить всю эту радость, свернуть и заниматься своими делами, чтобы в виртуалке не поднимать весь этот огород :)

Ты неправильно сформулировал. Нужно так:
"Было бы хорошо запустить всю эту радость на виртуалке, свернуть и заниматься своими делами, чтобы не городить весь этот огород с привязкой.
 :D ;D
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Oraven on March 29, 2017, 10:42:23 AM
Думаю теперь как добавить проверку с шагом в 5 сек, закончился бой или нет, чтобы производить дальнейшие действия для сбора плюх.

Обычный поиск картинки в цикле
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
      $check = 1 
   ELSE
      WAITMS(500)
   END_IF
END_CYC

Скрипт ничего не делает кроме как тормозит выполнение пока картинка не будет найдена. Нет необходимости анализировать что то раз 5 сек. Тут все сводится к степени нагрузки на процессор. Если анализировать раз в 100-500 мс то никакой нагрузки практически не будет.

Опять же за место области 0,0, $_xmax,$_ymax весь экран, лучше указать конкретную область. Это ускорит поиск. Зачем искать картинки там где их быть не может.
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 29, 2017, 07:09:29 PM
Да с кавычками косяк :)) Увлёкся, когда писал. Реально, когда добавил эти параметры такой вакханалии, как была до этого уже не стало. По поводу виртуалки, и запуска там этого добра, блюстакс и так ресурсы кушает, а так ещё больше будет потреблять. Так, что пока не знаю потянет ли нормально эту ляпоту. Сейчас пойду допилингом заниматься по вашим рекомендациям. У меня первый язык программирования который учил был бейсик, по этому пихал GOTO везде, где можно и где не нужно :) В общем благодарю, пошёл допиливать, чтоб это и работало и выглядело красиво :)
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 29, 2017, 07:53:47 PM
Думаю теперь как добавить проверку с шагом в 5 сек, закончился бой или нет, чтобы производить дальнейшие действия для сбора плюх.

Обычный поиск картинки в цикле
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
      $check = 1 
   ELSE
      WAITMS(500)
   END_IF
END_CYC

Скрипт ничего не делает кроме как тормозит выполнение пока картинка не будет найдена. Нет необходимости анализировать что то раз 5 сек. Тут все сводится к степени нагрузки на процессор. Если анализировать раз в 100-500 мс то никакой нагрузки практически не будет.

Опять же за место области 0,0, $_xmax,$_ymax весь экран, лучше указать конкретную область. Это ускорит поиск. Зачем искать картинки там где их быть не может.


Вот ещё, что, как я понимаю IF_PICTURE_IN  ищет только одну картинку, а как можно сделать чтобы он искал либо 1-ю либо 2-ю картинку? Оператор OR тут неприменим ?
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Aspirant on March 29, 2017, 08:02:57 PM
Кажись допёрло:
Code: [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file1.bmp", -1, 100)
      $check = 1 
   ELSE
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file2.bmp", -1, 100)
      $check = 1 
   ELSE
      WAITMS(500)
    END_IF
   END_IF
END_CYC

Что-то такое должно быть ?
Title: Re: Простой бот для игрушки в блюстаксе
Post by: Oraven on March 29, 2017, 08:21:51 PM
Именно так.

А если картинок много то можно и цикл перебора прикрутить.
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   FOR($i=1,($i<6)&($check=0)) // от file1.bmp до file5.bmp
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("file", $i, ".bmp"), -1, 100)
         $check = 1
      END_IF
   END_CYC
   WAITMS(500)
END_CYC