Author Topic: Помощь в создании бота на примере браузерной игры mycultures online  (Read 31931 times)

0 Members and 9 Guests are viewing this topic.

johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Всем привет!

Наверное ни для кого не секрет, что успех clickermann'a больше частью затрагивает онлайн игры, в частности браузерные. И если кто в теме, то тот прекрасно понимает почему, каждая игра основана по принципу, сиди целыми днями и кликай на пиксели, и будешь ты самым сильным, могущественным, богатым и т.д..
Ну и напоследок, даже самый последний ценитель этого "хардкора" поймет меня так, как никто другой, потому что все эти рутинные движения настолько надоедают, что особого то удовольствия от игры совсем и не получаешь, как следовало бы ожидать.
И вот тут то приходит на помощь нам замечательный эмулятор всех этих лишних и ненужных действий clickermann.

Поначалу я играл, просто играл , потому что не знал и еще не прочувствовал все "прелести" этой игры(mycultures online - далее просто culture).  Поэтому просто получал удовольствие и только много позже понял, для чего все это. Для вытягивания денег, дада и ничего в этом удивительного нет. Потому что если хочешь быть, как сказано выше, мегамогущественным всея и всего, плати. Ну а простым смертным, вроде меня, остается лишь клацать кнопкой мыши по этим цветным квадратикам, дабы приблизиться, хоть немного к элите. И все бы ничего, но это же так утомительно, и самое главное, отнимает уйму времени, которое дороже всего!

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

Для начала я сделал совсем маленький код, который дал возможность не сидеть у экрана по 6 часов в день, и делать 5 кликов, а пойти и почитать iptables, например. Возможности этого решения будут показаны ниже, на скриншотах.

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

[spoiler=Экскурс в суть дела]В этой игре я уже около полутора лет, с перерывами. Пришел на нее из травиана, трава игра конечно очень затягивающая, но отнимающая просто все твое время свободное и не свободное, к тому же она временная, и вся соль в том чтобы как можно быстрее успеть все сделать за выделенное время и в конце раунда(игры) все твои достижения теряются. Поэтому решил я уйти от всех этих бессонных ночей к размеренной и спокойной жизни, где от тебя не требуется следить за количеством пропитания, дабы войска твои не подохли от голода. Ну вот опять отвлекся, так вот culture игра многое мне напоминает из клиентской MMMORPG World of Warcraft а так как я очень большой поклонник творениям близардов, то меня это очень заинтересовало. Здесь не нужно пропадать и окунаться в нее с головой так, чтобы добиться каких-то успехов. Он придет к тебе и так, со временем, но чтобы добиться его, на это нужно потратить, ну по крайней мере года 2-2.5. И понятное дело ежедневное присутствие, небольшое 1.5 часа в день на один из 4-х серверов, который дают в сумме уже 6. А это уже много. А если хочешь лучшие достижения, которые дают бонусы. Можно на это тратить и все дни напролет. Так вот. Игра основана на героях. Вы отправляете их в приключения(квесты) где по их прохождению вы получаете деньги либо же ресурсы, опыт, который повышает уровень ваших героев и вещи(шмот, лут). Не правда ли похожая система в ВоВе? Так же как и в онлайн РПГ, присутствуют классы героев их 3, берсеркер, лучник, воин. Разновидности оружия и одежды для каждого разные. Существуют подземелья, где есть возможность получить самые настоящие трофеи, сетовые вещи, который в полных комплектах дают поистине могущественные бонусы. В купе с этим присутствуют альянсы, но, к сожалению, клановые прохождения инстансов не предусмотрены, возможно это невозможно или еще не ввели разработчики игры. Все плюшки вроде пвп игрок-игрок или альянс-альянс так же есть. В общем очень много параллелей с "той самой" игрой. Описывать конечно можно бесконечно долго но суть я из этого я вам так и не рассказал. В игре присутствую полоска приключений, которая измеряется во времени, то есть обычные минуты. По идее вся движуха то и заключена в их количестве, у кого их больше, тот дольше и сможет плавать, получать бесценный ресурсы, трофеи и опыт для главного героя. Выделяется их небольшое количество 100 минут в день, плюс возможность докупая дополнительную жажду(так ее величают в игре) за руны, которые покупаются за самые что ни наесть  реальные деньги, плавать дольше, тем самым увеличивать свои превосходства над другими. Разработчики игры, видимо, вполне такие щедрые люди, и раз в одну или две недели, делают эту жажду нескончаемой! То есть плавать можно хоть сколько, а ее хватит на все время, которое ее выделяется. Только дается она на сутки. Вот и считай, не просидишь же за компом целый день, чтобы делать 4 действия, так я и пришел к кликерману.  Вроде бы небольшой экскурс в суть я сделал, теперь можно и вернуться к самому боту.[/spoiler]

В самом начале пути, для использования жажды по максимум(все пояснения присутствуюв в "Экскурс в суть дела") был написан тот самый первый кусочек скрипта, который делал те простые 3 действия

Code: (clickermann) [Select]
LCLICK(1232,954) // пропустить
WAITMS(2000)
LCLICK(810,575) // "ОК" взять вещи
WAITMS(2300)
LCLICK(336,751) // кнопка отправляемся

[spoiler=Пример вы можете наблюдать на скриншотах:]

[/spoiler]

Позже я добавил проверку, на предмет жив и здоров ли герой, потому что выяснилось, что мог и не вернуться из приключения.
Code: (clickermann) [Select]
LCLICK(1232,954) // пропустить
WAITMS(2000)
LCLICK(810,575) // "ОК" взять вещи
WAITMS(2300)
LCLICK(481,741) // если умер(возможность плавать еще )
WAITMS(100)
LCLICK(419,766) // тоже самое
WAITMS(500)
LCLICK(336,751) // кнопка отправляемся
[spoiler=о чем свидетельствовала картинка][/spoiler]
[spoiler=и дальше все шло по маслу] [/spoiler]

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

Поэтому я и пришел сюда, к вам, знатокам за советами. Задачи которые я хотел бы решить:

• Возможность логиниться(ввод логина и пароля в форму заполнения)
• Прохождение лотереи Бьярни (при заходе на один из 4-х серверов пройти лотерею Бьярни)
• Закрывать спам-сообщения(различные конкурсы, призы, покупки рун, в общем любого вида сообщения, блокирующие вохможность использования кликера по инструкции дальше)
Отправлять героя в приключения
Перезапуск игры при сбоях(различные ухищрения разработчиков от таких программ как кликерман, чтобы блокировать возможность их использования)
• Продавать вещи(продавать вещи которые даются в обычных приключениях, сделать эту функцию включаемой)
Возвращать героя к работе(после окончании жажды, отправлять героя добывать ресурсы)
• Удалять новые сообщения и отчеты о нападениях
• Проходить PvP-поединки
• Чтобы герой не простаивал
• Склады( следить чтобы не переполнялись склады)
• Печати(покупка печатей для возможности проходить подземелья)
• Нажатие молнии
• Подземелья(возможность проходить подземелья)
• Тур Бьярни(покупка тура , по окончании его действия)
• Переход между серверами(Казань, Москва,Тагил,Новгород)
• Делать все вышеуказанные действия на всех серверах(желательно одновременно когда действует жажда)
Привязка к окну(чтобы работало это все в фоновом режиме)

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

Теперь для более детального рассмотрения вопроса, буду предоставлять всю информацию со скриншотами, по каждому из пунктов. Итак начнем c тех этапов, который я выделил, как важные:

Отправка героя в приключения
Допустим я уже залогинился, выбрал один из 4-х миров. И перед мной такая картина, моя деревня:



Для того чтобы его отправить мне необходимо сделать последовательность
1) Нажать на компас(верхний правый угол)
2) Выбрать локацию(допустим Амстердам)
2) Выбрать тип приключения(либо это случайный квест, восклицательный знак, либо это сюжетные задания, свиток)
3) Перетащить иконку героя в один из 3 слотов, которого хотим отправить и нажать на кнопку "Отправляемся"


Все по сути, с этого момента, можно делать цикл тех 3 кликов, которые были у меня с самого начала.  Но уже на этапе выбора типа приключения у меня происходит загвоздка, к примеру если я создаю поисковую картинку для функции if_picture_in в амстердтаме, то уже в другой локации, она может не найтись, а может и найтись, размер я делаю 5х5 пикселей, с чем это связано, есть догадки, но как обойти такую ситуацию?

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

Пока что все, позже опишу другие пункты, которые вызывают у меня трудности, по мере решения поступления проблем, буду выбираться на форум, Надеюсь на вашу поддержку!
« Last Edit: September 13, 2013, 11:33:54 AM by johnix »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
к примеру если я создаю поисковую картинку для функции if_picture_in в амстердтаме, то уже в другой локации, она может не найтись, а может и найтись, размер я делаю 5х5 пикселей, с чем это связано, есть догадки, но как обойти такую ситуацию?
Может неправильно делаешь картинки? Все твои выложенные скрины зачем в BMP? Ты из них нарезал картинки для поиска? Спрашиваю, потому что они пережаты из JPEG.
По  if_picture_in и другим похожим, потренеруйся сначала на рабочем столе не нужно пока лезть в игру. Когда будешь уверен, что всё делаешь правильно, тогда разбирайся с игрой. Может необходимо применить процент совпадения или COLORMODE? а может и то и другое сразу.
« Last Edit: September 06, 2013, 09:20:36 AM by Vint »


johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
к примеру если я создаю поисковую картинку для функции if_picture_in в амстердтаме, то уже в другой локации, она может не найтись, а может и найтись, размер я делаю 5х5 пикселей, с чем это связано, есть догадки, но как обойти такую ситуацию?
Может неправильно делаешь картинки? Все твои выложенные скрины зачем в BMP? Ты из них нарезал картинки для поиска? Спрашиваю, потому что они пережаты из JPEG.
Эти скрины я делал через кликер
Code: (clickermann) [Select]
getscreen
screenshot
halt
Для создания картинки поиска, делаю так: PrtScn -> Paint -> ctrl+v -> увеличиваю нужный мне участок -> вырезаю нужный мне участок необходомиго размера -> создаю новый документ -> подгоняю размер холста под вырезанные пиксели -> save "testpicture.bpm"

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Меня ввела в заблуждение картинка выбора задания. Увеличил, она вся в квадратах... На панель и не глянул. Панель отрисовывается игрой, а картинка тупо вставлен статичный JPEG. Тогда всё нормально.

Для начала задай процент совпадения картинки не 100%. Пробуй У меня чаще всего прокатывает 80-85%
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "somefile.bmp",-1,85)

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

"...я так думаю, что это как защита от таких ботов..."  - чаще всего это распи...ство художников. Сталкивался неоднократно. Например нарисуют картинку 100х100 (твой знак например) так удобней рисовать, а используют в игре 60х60. Вот берут и пережимают. Вроде всё нормально.  Через пол года нужно добавить локацию. Искать картинку готовую лень, размеров тоже можно не помнить. Берут исходник 100х100 и пережимают в 65х65... вроде такой...
Для нас проблема, более 50% пикселов изменили цвет. Процентом тут уже не отделаешься, а то будет кликать куда не попадя. В таких случаях нужно Использовать COLORMODE+% или искать 2+ картинки.
Code: (clickermann) [Select]
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "image_1.bmp")
   //нашёл 1
ELSE
   IF_PICTURE_IN (0,0,$_xmax,$_ymax, "image_2.bmp")
      //нашёл 2
   ELSE
      IF_PICTURE_IN (0,0,$_xmax,$_ymax, "image_3.bmp")
         //нашёл 3
      ELSE
         // не нашёл ни одного варианта
      END_IF
   END_IF
END_IF
Иногда это быстрей чем подобрать COLORMODE.

Бывает картинка загнана в Флэш уже 100х100, но при выводе пережимает под 60х60, но он делает это всегда по разному в зависимости от места. Сместилось всплывающее окно на 0,5 пиксела вправо или вправо-вверх, рендерится по другому. За это вообще руки бы поотрывать, мне как-то раз одно приложение мозги попарило этим. Какого чёрта не сдвигать на целое число пикселов. Возьми же ты округли вычисленные координаты отбросив дробную часть...
Ладно с этим.



johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Благодарю, попробую с процентом попадания через if_picture_in пытался до этого, но видимо неправильно составил надпись, после чего поиск вовсе перестал происходить, как протестирую, отпишусь о результатах.

johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
В общем с погрешностью в 85% для "восклицательного знака" не помогло, даже под 4% не всегда кликает. А уже тем более если локация схожа с картинкой-донором, то начинает кликать туда, куда не нужно. По colormode не совсем понял, читал инструкции, не разобрался, что делать, помогите?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Выложи скрины выбора типа приключения с нескольких локаций (для сравнения).
Если даже на одной локации она бывает в разных местах, нужно хоть пару вариантов.
Надеюсь картинка не анимирована?
А также выложи свою подготовленную картинку. Ещё выложи кусок кода, которым ты ищешь. Может до поиска и дело не всегда доходит.

« Last Edit: September 10, 2013, 10:28:51 AM by Vint »


johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Сделал, все что просили. Все лежит  тут
Картинка-донор, была сделана с локации Grenlandia. Эта картинка ищется еще в двух других локациях (trondheim, dublin), без применения процента совпадения. Можете убедиться в этом сами. Сделал скрины локаций, в остальных не ищет совсем, даже с применением сжатия под 5 процентов...
« Last Edit: September 10, 2013, 11:30:35 AM by johnix »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Как сделать такой FTP?

johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Как сделать такой FTP?
Обычный пакет сервера фтп vsftpd на линуксе (:
« Last Edit: September 10, 2013, 11:31:51 AM by johnix »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Вот вроде теперь находит "!" стабильно.
По крайней мере на твоих скриншотах...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Как сделать такой FTP?
Обычный пакет сервера фтп vsftpd на линуксе (:

 :o

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Андрей опередил. Там восклицательный знак рендерится на 0,5 пиксела сдвинутым по диагонали, соответственно все цвета "плывут". Как я и говорил. В этом сложном случае только колормод+%.


johnix

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
И правда, работает! Чтобы создать картинку-донора , как создавать скриншот в таком случае?
« Last Edit: September 10, 2013, 12:25:54 PM by johnix »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
И правда, работает! Чтобы создать картинку-донора , как создавать скриншот в таком случае?
Самим кликером:
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(5,0,0,$_xmax,$_ymax)
SCREENSHOT
HALT
5- нужный тебе режим коррекции.