В основе этого урока лежит создание бота для Lineage 2 в программе Кибор.
Надеюсь что перед чтением этой статьи Вы пролистали хоть поверхностно справку по программе?
Часть первая. Подготовка графического материала и расчет координат.
Перед созданием любого бота мы должны составить четкий план инструкций, которые должен выполнять бот для достижения той или иной цели. В нашем случае это будет фарм-кач бот. В его обязаности будет входить поиск мобов, их убийство и сбор лута. Так же мы должны четко знать какие действия для этого предприняли бы мы и по чему ориентировались, будь мы этим ботом. Ориентируемся мы визуально. Поэтому нам надо определиться на что мы обращаем внимание во время фарма.
Мы видим на экране окно с игрой, видим в окне мобов, их положение на экране. Если мы не видим мобов, то у нас есть радар по которому мы можем найти направление и узнать куда надо идти что бы прийти к новой стае. Если есть мобы в непосредственной близости от нас мы можем просто брать их таргет с помощью специальной функции любезно предоставленной нам разработчиками линейки. Во время боя мы атакуем имеющимися скилами и видим табличку с XP моба и можем по ней определить ход
боя. После слива моба мы собираем лут.
Теперь наша задача заставить это все видеть и выполнять бота.
Для начала дадим боту возможность видеть и укажем куда надо смотреть для контроля того либо иного действия. Для этого определимся что бот должен видеть.
Первое - само окно с игрой, его позицию на экране и само игровое поле в окне. Для этого найдем в окне игры какой либо участок интерфейса, который был бы постоянным в любой ситуации, заставим бота при запуске скрипта найти этот участок и расчитаем координаты игрового поля.
Для определения не меняющихся частей интерфейса воспользуемся встроенным графическим редактором Кибор. Открываем панель Графика (прочитать про графический редактор Кибор), активируем окно с игрой и жмем CTRL+SHIFT+S. В Кибор появляется рисунок окна с игрой. Затем жмем CTRL+SHIFT+A (запустим фильтр динамики) и немного побегаем и покрутим камерой. Останавливаем фильтр динамики нажав опять на CTRL+SHIFT+A.
Смотрим на рисунок в редакторе и видим примерно такую картину:
Все что подсветилось красным нам не подходит, так как меняется во время игры. Для выбора рисунка для привязки к окну надо найти объект на экране который не будет сдвинут во время игры. В нашем случае подходит кнопка настройки чата. Выделяем ее и нажав правую кнопку мыши сохраняем выделенное в виде .bmp файла. Его потом при запуске бот найдет на экране и расчитает координаты игрового поля в котором ему предстоит играть. Так же нам надо указать позицию таблички с XP моба
для того что бы бот мог проверять ее наличие на экране и узнавать XP моба, и радара для последующего поиска на нем мобов и расчет их положений относительно центра радара (перса).
Во время поиска мобов на экране бот будет перебирать с помощью finddynamic все потенциальные участки на экране где может быть моб и будет ориентироваться на появление кружочков над мобом если на него навели мышь (ознакомиться с finddynamic) (как работает finddynamic).
Наводим мышь на моба, жмем CTRL+SHIFT+S и сохраняем центр кружочка в .bmp.
Собственно это тот минимум который необходимо контролировать для успешного фарма. Определение собственного XP я думаю вы сможете сделать сами. На этом рисунке выделены все объекты которые использовались в прилагаемом скрипте бота. Табличка с XP моба сохранялась по трем позициям выделенных толстыми красными рамками. Сами рисунки смотрите в папке со скриптом:
Красными толстыми прямоугольниками показаны все сохраненные рисунки.
Табличка с XP моба сохранена по трем участкам.
Белыми линиями показаны расчитываемые координаты которые найдены с помощью соответствующего рисунка.
Большая рамка в окне игры ограничивает область поиска мобов функцией finddynamic и расчитывается исходя из найденной позиции рисунка кнопки настройки чата (1).
Координаты рамки поиска на радаре и его центр (положение перса) расчитываются исходя из найденого рисунка кнопки показа карты (3).
Координаты первого красного пикселя полосы XP моба расчитываются исходя из позиции таблички моба в таргете (2).
Область поиска кружочка над мобом (6) когда на него навели мышь расчитывается исходя их положения мыши над мобом.
Все наши подготовленные рисунки ищутся функцией findimage (пример применения findimage) и (еще пример), которая позволяет найти на экране изображение подобное загруженному с .bmp файла с помощью функции loadimage (ознакомиться
с loadimage) и возвращает координаты левого верхнего угла найденного изображения.
Пример программирования загрузки рисунка кнопки настройки чата и расчет координат рамки ограничевающей поиск мобов:
int PrivyazkaXY[14][14];//Переменная в котрую будет загружен рисунок кнопки настройки чата
int P_X[1], P_Y[1];//Переменные в который будут записаны найденные координаты левого верхнего угла этого изображения
loadimage (#PrivyazkaXY[0][0], "C:\L2_online\PrivyazkaXY.bmp");//Загрузка изображения
findimage(1, #PrivyazkaXY[0][0], 0, #P_X[0], #P_Y[0], 0, 0, xe, ye, w);//Поиск одного экземпляра изображения кнопки и запись координат в P_X и P_Y.
Поясняю откуда взялись xe, ye и w:
xe и ye - разрешение экрана. Узнается с помощью функции getdisplay (подробнее о getdisplay)
w - указатель на окно. В нашем случае мы работаем со всем экраном, поэтому получаем указатель на рабочий стол с помощью window (подробнее о window)
Теперь можно расчитать координаты рамки (5). Наводим мышь на окно игры в позицию (7). Жмем CTRL+SHIFT+S. Переходим на вкладку Код (подробнее о шпионе) в Кибор. В окне Координаты мыши экранные видим координаты этой точки. Записываем их. Наводим мышь на левый верхний угол рисунка кнопки настройки чата. Жмем CTRL+SHIFT+S. Так же само записываем. Теперь расчитываем:
int S_X,S_Y,F_X,F_Y;//Переменные левого верхнего и правого нижнего угла рамки
S_X=P_X[0]; S_Y=P_Y[0]-625;//Левый верхний угол
F_X=P_X[0]+1010; F_Y=P_Y[0]-160;//Правый нижний угол
625, 1010, 160 мы получили узнав разницу между полученными координатами с помощью CTRL+SHIFT+S.
Таким же образом узнаем и записываем в переменные все остальные координаты которые будет использовать бот.
Следующий урок |