Author Topic: Бот для онлайн игры Battle Nations (Steam)  (Read 10567 times)

0 Members and 1 Guest are viewing this topic.

v_sun

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Долгое время пользовался очень замечательной и простой программой  clickermann_1.3 , где требовалось только повторение моих действий мышкой. Но появился в игре новый режим, где эта версия clickermann_1.3 уже не справляется и нужна теперь более свежая и более сложнее версия Clickermann v4.10. 
Задача бота банальна, найти моба и уничтожить, делая это бесконечно :).  Но эта банальность выходит мне боком :( .

Очень много команд нужно прописывать:
1) Нужно зайти на базу и вернуться на карту (для обновления мобов);

а) один клик левой клавишей;
б) один клик левой клавишей.
2) Редко но выскакивают рандомно две рекламы, где нужно кликать кнопку "отлично";

один клик левой клавишей по надписи "отлично";
3) Прокручивать колесиком на себя, до увеличения высоты над базой;

4) Очень сложная пока для меня задача Поиск моба на карте,  а карта полностью на экран не влезает. Так как для этого нужно зажимать левую клавишу мышки и двигать в разные части базы.

Нахождения моба (кликая один раз левой клавишей мышки на моба) и выбор кнопки атаки (кликая один раз левой клавишей мышки на надпись "в атаку!"). Зажав левую клавишу, я тянул в правый верхний угол (но как карта большая мобы могут быть в любом направлении).
Вот полный размер карты(всегда начинаешь играть с центра карты):

5) Выбор войск и расстановка на поле боя.

а) выбор юнита клик;
б) зажать л.клав. мыши и тянуть в лево (так еще 3-4 раза);
в)выбор юнита и кликнуть 3 раза по нему;
г) нажать левой клавишей на кнопку бой.
6) Сама битва.

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

после битвы выскакивают выскакивает окно, где нужно нажать л.кл. мыши по кнопке "окей", а за ним еще окно, где тоже жмем л.кл. мыши по кнопке "окей".

Пока так у меня получилось :-[ , если бы еще объединить, как по командам ::)
Code: (clickermann) [Select]
//1) Нужно зайти на базу и вернуться на карту (для обновления мобов);

WAIT(7)
LCLICK(1010,746)      //заходим в город
WAIT(7)
LCLICK(1065,716)      //идем на карту
WAIT(7)

//3) Прокручивать колесиком на себя, до увеличения высоты над базой;

WHEELDOWN(2)          //крутим колесик мышки вниз (на себя)
WAIT(2)
WHEELDOWN(2)
WAIT(2)
WHEELDOWN(2)
WAIT(2)
WHEELDOWN(2)
WAIT(2)
WHEELDOWN(2)
WAIT(2)
WHEELDOWN(2)
WAIT(2)
WHEELDOWN(2)
WAIT(2)
WHEELDOWN(2)
WAIT(4)

//2) Редко но выскакивают рандомно две рекламы, где нужно кликать кнопку "отлично";
//4)  Поиск моба на карте.

WHILE($var < 1) // Цикл
 
   GETSCREEN
 
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "отлично.bmp", -1, 100) // Ищем кнопку "отлично"
      LCLICK($_return1, $_return2) // Если есть, то кликаем по ней
      WAIT(3)
   END_IF
 
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "моб.bmp", -1, 100) // поиск моба
      LCLICK($_return1, $_return2)  //Если есть, то кликаем по мобу
      WAIT(3)
   END_IF
 
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "В атаку.bmp", -1, 100) //Если есть, то кликаем по кнопке "В атаку"
      LCLICK($_return1, $_return2)
      WAIT(3)
   END_IF   
      WAIT(6)
 
END_CYC


// 5) Выбор войск и расстановка на поле боя.

WAIT(1)
LCLICK(476,762)    //выбор вертолета
WAIT(1)
LDOWN(1062,763)    //ищем охотника из списка
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)
LCLICK(476,762)
WAIT(1)
LDOWN(1062,763)
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)
LCLICK(476,762)
WAIT(1)
LDOWN(1062,763)
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)
LCLICK(476,762)
WAIT(1)
LDOWN(1062,763)
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)

LCLICK(568,742)          //выбор охотников
WAIT(1)
LCLICK(568,742)         
WAIT(1)
LCLICK(568,742)         
WAIT(1)

LCLICK(208,454)          //клик на кнопку "Бой"
WAIT(4)

//6) Сама битва.

LCLICK(379,508)           //  выбор охотника и атака по первому мамонту
WAIT(4)
LCLICK(687,337)
WAIT(4)
LCLICK(457,556)
WAIT(4)
LCLICK(636,397)
WAIT(4)
LCLICK(567,615)
WAIT(4)
LCLICK(636,397)
WAIT(4)
LCLICK(379,508)           //  выбор охотника и атака по второму мамонту
WAIT(4)
LCLICK(712,442)
WAIT(4)
LCLICK(457,556)
WAIT(4)
LCLICK(712,442)
WAIT(4)
LCLICK(567,615)
WAIT(4)
LCLICK(712,442)
WAIT(4)
LCLICK(379,508)           //  выбор охотника и атака по 3-му мамонту
WAIT(4)
LCLICK(810,497)
WAIT(4)
LCLICK(457,556)
WAIT(4)
LCLICK(810,497)
WAIT(4)
LCLICK(567,615)
WAIT(4)
LCLICK(810,497)
WAIT(4)

// 7) После битвы выйти на экран карты.

LCLICK(861,691)     //кликаем по кнопке "Окей"
WAIT(4)
LCLICK(855,736)     //кликаем по 2й кнопке "Окей"
WAIT(4)

Поиск моба на карте,  а карта полностью на экран не влезает. Так как для этого нужно зажимать левую клавишу мышки и двигать в разные части базы.
Получилось только просто перемещаться по карте в одном направлении.
Code: (clickermann) [Select]
WAIT(2)
LDOWN(626,486)
WAIT(2)
MOVE(915,286)
WAIT(2)
LUP(915,286)
WAIT(2)

Подскажите пожалуйста, как сделать так что бы поиск происходил в разных частях карты?
« Last Edit: June 26, 2014, 12:33:56 PM by v_sun »

KotTeam

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #1 on: May 08, 2014, 11:21:29 PM »
Если есть добрые люди то напишут бесплатно или помогут))

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #2 on: May 09, 2014, 01:02:23 AM »
Цикл поиска моба будет крутиться до нахождения "В атаку". Вроде написал тебе движение карты но незнай как будет работать.

Может и не нужно 8 раз крутить колесико а просто указать больший модификатор?!
Code: (clickermann) [Select]
WHEELDOWN(10)
Еще следует помнить о курсоре, системный курсор не мешает кликеру а вот программный, в играх, мешает, поэтому после нахождения фрагмента и клика по нему, курсор  хорошо убрать куда то командой MOVE

Чтобы картинки искались быстрее нужно указать точнее область поиска.
0,0, $_xmax,$_ymax - в данном случае это весь экран ($_xmax,$_ymax - это системные переменные возвращают размер твоего экрана)
То есть здесь две координаты верхнего левого угла и нижнего правого.

Размер картинки тоже имеет значение. Вовсе не обязательно скриншотить кнопку целиком, достаточно небольшого фрагмента. Чем больше пикселов в фрагменте тем дольше опознавание.

Функция IF_PICTURE_IN возвращает координату верхнего левого угла картинки, но если требуется кликнуть в другое место относительно найденного то пишем смещение
Code: (clickermann) [Select]
LCLICK($_return1+10, $_return2+5)
Code: (clickermann) [Select]
//1) Нужно зайти на базу и вернуться на карту (для обновления мобов);

LCLICK(1010,746)      //заходим в город
WAIT(7)
LCLICK(1065,716)      //идем на карту
WAIT(7)

//3) Прокручивать колесиком на себя, до увеличения высоты над базой;


FOR($a,$a<8)          //крутим колесико мышки вниз (на себя) цикл на 8 повторов
   WHEELDOWN(2)
   WAITMS(100)
END_CYC

WAIT(4)

//2) Редко но выскакивают рандомно две рекламы, где нужно кликать кнопку "отлично";
//4)  Поиск моба на карте.

$check_mob = 0
WHILE($check_mob = 0) // Цикл
   
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "отлично.bmp", -1, 100) // Ищем кнопку "отлично"
      LCLICK($_return1, $_return2) // Если есть, то кликаем по ней
      WAIT(3)
   END_IF
   
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "моб.bmp", -1, 100) // поиск моба
      LCLICK($_return1, $_return2)  //Если есть, то кликаем по мобу
      WAIT(3)
      GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "В атаку.bmp", -1, 100) //Если есть, то кликаем по кнопке "В атаку"
         $check_mob = 1 // прерываем цикл
         LCLICK($_return1, $_return2)
         WAIT(3)
      END_IF
   ELSE
      // а если нет то двигаем камеру
      LDOWN(626,486) // зажимаем мышь в центре экрана (укажи свои координаты!!!)
      WAITMS(50)
      MOVER(RNDFROM(-100,0,100),RNDFROM(-100,0,100)) // двигаем камеру в случайном направлении на +- 100 пикс
      WAITMS(50)
      LUP(-1,-1) // просто отпускаем (без координат)
      WAIT(1)
   END_IF
   
   WAITMS(50)
END_CYC


// 5) Выбор войск и расстановка на поле боя.

WAIT(1)
LCLICK(476,762)    //выбор вертолета
WAIT(1)
LDOWN(1062,763)    //ищем охотника из списка
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)
LCLICK(476,762)
WAIT(1)
LDOWN(1062,763)
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)
LCLICK(476,762)
WAIT(1)
LDOWN(1062,763)
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)
LCLICK(476,762)
WAIT(1)
LDOWN(1062,763)
WAIT(1)
MOVE(171,759)
WAIT(1)
LUP(171,759)
WAIT(1)

LCLICK(568,742)          //выбор охотников
WAIT(1)
LCLICK(568,742)
WAIT(1)
LCLICK(568,742)
WAIT(1)

LCLICK(208,454)          //клик на кнопку "Бой"
WAIT(4)

//6) Сама битва.

LCLICK(379,508)           //  выбор охотника и атака по первому мамонту
WAIT(4)
LCLICK(687,337)
WAIT(4)
LCLICK(457,556)
WAIT(4)
LCLICK(636,397)
WAIT(4)
LCLICK(567,615)
WAIT(4)
LCLICK(636,397)
WAIT(4)
LCLICK(379,508)           //  выбор охотника и атака по второму мамонту
WAIT(4)
LCLICK(712,442)
WAIT(4)
LCLICK(457,556)
WAIT(4)
LCLICK(712,442)
WAIT(4)
LCLICK(567,615)
WAIT(4)
LCLICK(712,442)
WAIT(4)
LCLICK(379,508)           //  выбор охотника и атака по 3-му мамонту
WAIT(4)
LCLICK(810,497)
WAIT(4)
LCLICK(457,556)
WAIT(4)
LCLICK(810,497)
WAIT(4)
LCLICK(567,615)
WAIT(4)
LCLICK(810,497)
WAIT(4)

// 7) После битвы выйти на экран карты.

LCLICK(861,691)     //кликаем по кнопке "Окей"
WAIT(4)
LCLICK(855,736)     //кликаем по 2й кнопке "Окей"
WAIT(4)
« Last Edit: May 09, 2014, 01:52:09 AM by Oraven »

v_sun

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #3 on: May 13, 2014, 09:21:58 AM »
Ух ты, спасибо огромное Oraven.

Вчера проверил на работоспособность скрипта. Все работает, кроме поиска картинок. Сохранял в разных размерах от большого до маленького , не хочет находить на экране, хотя много вариантов использовал :(. Подскажите пожалуйста, с чем это может быть связано?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #4 on: May 13, 2014, 12:51:18 PM »
Возможно с незаметными для глаза изменением цветов.

Используй цветокоррекцию + процент совпадения.

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

Обрезаешь этот скриншот. Кстати можно резать и еще меньше, например вдоль нескольких букв полоску в 1-3 пиксела по высоте.

В скрипте указываешь тот же уровень цветороррекции, зеленым я отметил процент совпадения 80% в данном случае
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 100,100, "file.bmp", -1, 80)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

v_sun

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #5 on: June 26, 2014, 11:47:48 AM »
Доброго
Вопрос: ты с автокликером для Battle Nations добился каких нибудь результатов?

Добрый день. Нет, застрял на том месте, где после нахождения моба, нужно нажать на кнопку  "В атаку!". Программа не находит этой картинки у меня :(.

p.s. Простите, в ЛС не получилось написать  ::) Такую беду пишет

arsqqq

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #6 on: July 05, 2014, 09:56:52 PM »
Code: [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (430,299, 80,40, "VS_MOBA.bmp", -1, 80)
Может я с синтаксисом не разобрался !

430,299, это начало от куда мы будем анализировать
80,40 размер квадратика который мы будем анализировать (ну сравнивать с БМПХОЙ) .... или не так ?

Code: [Select]
//WAIT(1)          //начитаем искать мобов
LCLICK(1185,673) // в БОЙ
WAIT(1)




GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (430,299, 80,40, "VS_MOBA.bmp", -1, 80)

   LDOWN(742,446)
   WAITMS(100)
   LUP(614,380)
   WAITMS(100)
   LCLICK(614,380)
   WAITMS(100)
END_IF
 



LCLICK(55,173) //Пока валим на базу
WAIT(1)
вот не хочет он замечать моба если он стоит в том квадратике !
« Last Edit: July 05, 2014, 10:08:51 PM by arsqqq »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #7 on: July 05, 2014, 10:16:38 PM »
Не разобрался, это область поиска, верхний левый угол и нижний правый!

arsqqq

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #8 on: July 05, 2014, 10:29:17 PM »
Не разобрался, это область поиска, верхний левый угол и нижний правый!

IF_PICTURE_IN (430,299, 510,339, "VS_MOBA.bmp", -1, 80)

так и так не робит ))

там можно поглядеть что он себе снял? .. ну скриншот
хоть сравнить что не так (отладить )))?
« Last Edit: July 05, 2014, 10:47:14 PM by arsqqq »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #9 on: July 05, 2014, 10:54:48 PM »
Функция SCREENSHOT скидывает скриншот в ту же папку из которой работает скрипт.
В последних версиях появилась более навороченная функция SCREENSHOTEX. Позволяет сохранить заданную область с выбором формата 0 - BMP 1 - JPG

Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
SCREENSHOTEX(430,299, 510,339, "Image_", 0) // сохранить область в BMP файл
IF_PICTURE_IN (430,299, 510,339, "VS_MOBA.bmp", -1, 80)

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

« Last Edit: July 05, 2014, 10:57:40 PM by Oraven »

arsqqq

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #10 on: July 06, 2014, 01:42:14 PM »
Блин походу из-за того что мобы анимированные всё не работает ....
попробую по тени иХ спалить !
« Last Edit: July 06, 2014, 09:28:58 PM by arsqqq »

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #11 on: July 06, 2014, 02:55:37 PM »
Блин походу из-за того что мобы анимированные всё не работает ....
попробую по тени из спалить !
да в бою реализовать действия проблематично тем более что ни каких горячих клавиш не реализовано

arsqqq

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #12 on: July 06, 2014, 10:06:52 PM »
По теням вышло!  Отличная тема для отладки этот
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
SCREENSHOTEX(423,343, 434,346, "Image_.bmp", 0)
там в клеточке под юнитом буквально минимум, но удалось вычислить осмотром не одного десятка скринов те неизменные пиксели.

Сейчас работа думаю пойдёт ... Боёвка в моём случае будет простая ибо пока буду просто самыми мощными юнитами просто фармить золото .
« Last Edit: July 06, 2014, 10:12:34 PM by arsqqq »

arsqqq

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #13 on: July 17, 2014, 05:22:56 PM »
Ребят а можно как то без скриншотов отдельный пиксель сравнить с тем что мне нужно ??
(судя по тому что у позиции мышки выводится цвет пикселя такая возможность имеется)

 

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Бот для онлайн игры Battle Nations (Steam)
« Reply #14 on: July 17, 2014, 05:30:23 PM »
if_pixel_in