Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (2): « 1 [2]   

> Описание: редактирование предложенного бота
Kibor
Отправлено: 15 Июля, 2013 - 06:17:50
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




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

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

Разберем по порядку...

Выбор окна игры:
Для того чтобы ограничить область обработки графики в пределах конкретного окна используются указатели на окно. Получить его можно с помощью функции window:
win w=window ("Warspear Online", "Warspear", -1);//Указатель на окно игры Warspear Online
Теперь используя этот указатель в функциях поиска изображений findimage, управления мышью mouse, управления клавиатурой key и т.д. мы автоматически ограничиваем область поиска этим окном и посылаем все сообщения этому окну использую координатную систему этого окна начало которой в левом верхнем углу окна.

Поиск мобов на экране:
Мобы в варспе представляют собой анимированные 2D изображения. При этом во время анимации происходит смена цвета не всего изображения поэтому выделив и сохранив в .bmp файле избранные пикселя отдельных частей стороны моба, которые не меняются во процессе анимации, можно довольно успешно находить их с помощью функции поиска 2D изображений на экране findimage. Выделенные пикселя не обязательно должны идти по порядку. Можно в встроенном в Кибор редакторе выделить несколько разных пикселей одной стороны искомого моба и сохранить в фале в одном рисунке. Все что не выделено зальется фоновым цветом и не будет учавствовать в поиске. Для этого мы должны указать в findimage цвет который не будет учитываться. Таким образом мы должны подготовить 4 изображения со всех сторон моба. Пример как работать с графическим редактором смотрите тут.
После того как изображения четырех сторон моба готовы переходим к кодингу.

CODE:
//Узнаем указатель на окно игры
win w=window ("Warspear Online", "Warspear", -1);//Указатель на окно игры Warspear Online
activate(w);//активируем окно игры
sleep(1000);//пауза секунда
//Выделяем память для хранения наших рисунков. Память выделяется с запасом что бы не замарачиваться для каждого моба расчетом размеров скринов. Выделяем сразу для рисунков 50 на 50.
int Image_0[50][50], Image_1[50][50], Image_2[50][50], Image_3[50][50];

//Загружаем 4 изображения моба в память программы в соответствующие переменные
loadimage (#Image_0[0][0], "C:\Image_0.bmp");//1 сторона
loadimage (#Image_1[0][0], "C:\Image_1.bmp");//2 сторона
loadimage (#Image_2[0][0], "C:\Image_2.bmp");//3 сторона
loadimage (#Image_3[0][0], "C:\Image_3.bmp");//4 сторона

//Выделяем память под переменные в которые запишутся координаты найденого изображения моба
int PosX_0[1], PosY_0[1];//Переменные, в которые записаны будут координаты X и Y левого верхнего угла найденой картинки моба


На этом подготовка бота к работе завершена. Бот знает в каком окне ему придется работать и что искать.

Приступаем к логической части бота. Псевдокод ее такой:

CODE:
Начало кода
Поиск моба и щелчок на нем мышкой
Ожидание смерти моба и использование скилов для ее быстрейшего наступления
Сбор лута
Идем в начало кода


Теперь код:

CODE:
loop:;

/*Анализ изображения в окне игры и поиск в нем любой из подготовленной картинки
Псевдо код:
Если нашли одно изображение или второе или третье или четвертое
запишем в PosX_0[0], PosY_0[0] координаты найденого изображения относительно левого верхнего угла окна игры
и идем бить моба
*/

if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;
if (findimage(1, #Image_1[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;
if (findimage(1, #Image_2[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;
if (findimage(1, #Image_3[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;

//Если не найдено изображение
sleep (100);//Пауза 100 мсек.
goto loop;// Идем к поиску моба в начало.


boi: //Если изображение найдено бьем моба
//Щелкним по найденому изображению мышкой. Так как в PosX_0[0], PosY_0[0] координаты левого верхнего угла изображения сместим клик на пару пикселей вправо и вниз на основание моба. Примерные смещения. Надо подобрать под каждого моба отдельно.
mouse (LEFT, PosX_0[0]+2, PosY_0[0]+25, 1, w);
sleep(500);//Пауза половина секунды
/*Теперь нам надо ждать когда моб упадет. Для этого ищем на экране ориентиры признака того что моб находится в таргете и еще жив и бьем его до тех пор пока эти признаки не пропадут с экрана. для этих целей в варспе подходит изображение короны которое находится в правом верхнем углу окна игры под табличкой ХП моба когда он в таргете.
С помощью встроенного в Кибор инструмента находим цвета и координаты трех разных пикселей этой короны и проверяем их наличие в окне игры*/
ik: if (getcolor(762, 39, w)==16249847 && getcolor(760, 47, w)==16777215 && getcolor(765, 44, w)==3617591)// проверяем цвет пикселей
{//При наличие этих пикселей бьем моба скилом и опять проверяем не пропала корона с экрана...
key('1');//Нажимаем 1. Или другую кнопку где находится скил.
sleep(500);//Пауза половина секунды
goto ik;//идем назад на проверку наличия короны
}
//Короны нет. моб слит
sleep(1000);//Пауза секунду
/*
Тут должен быть код сбора лута. Разобравшись с этим примером можно будет перейти к разбору выложенного мной скрипта там где все это есть
*/
}

sleep (100);//Пауза 100 мсек.
goto loop;// Идем к поиску моба в начало.



Соберем скрипт в кучу:

CODE:
//Узнаем указатель на окно игры
win w=window ("Warspear Online", "Warspear", -1);//Указатель на окно игры Warspear Online
activate(w);//активируем окно игры
sleep(1000);//пауза секунда
//Выделяем память для хранения наших рисунков. Память выделяется с запасом что бы не замарачиваться для каждого моба расчетом размеров скринов. Выделяем сразу для рисунков 50 на 50.
int Image_0[50][50], Image_1[50][50], Image_2[50][50], Image_3[50][50];

//Загружаем 4 изображения моба в память программы в соответствующие переменные
loadimage (#Image_0[0][0], "C:\Image_0.bmp");//1 сторона
loadimage (#Image_1[0][0], "C:\Image_1.bmp");//2 сторона
loadimage (#Image_2[0][0], "C:\Image_2.bmp");//3 сторона
loadimage (#Image_3[0][0], "C:\Image_3.bmp");//4 сторона

//Выделяем память под переменные в которые запишутся координаты найденого изображения моба
int PosX_0[1], PosY_0[1];//Переменные, в которые записаны будут координаты X и Y левого верхнего угла найденой картинки моба

loop:;

/*Анализ изображения в окне игры и поиск в нем любой из подготовленной картинки
Псевдо код:
Если нашли одно изображение или второе или третье или четвертое
запишем в PosX_0[0], PosY_0[0] координаты найденого изображения относительно левого верхнего угла окна игры
и идем бить моба
*/

if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;
if (findimage(1, #Image_1[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;
if (findimage(1, #Image_2[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;
if (findimage(1, #Image_3[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1)goto boi;

//Если не найдено изображение
sleep (100);//Пауза 100 мсек.
goto loop;// Идем к поиску моба в начало.


boi: //Если изображение найдено бьем моба
//Щелкним по найденому изображению мышкой. Так как в PosX_0[0], PosY_0[0] координаты левого верхнего угла изображения сместим клик на пару пикселей вправо и вниз на основание моба. Примерные смещения. Надо подобрать под каждого моба отдельно.
mouse (LEFT, PosX_0[0]+2, PosY_0[0]+25, 1, w);
sleep(500);//Пауза половина секунды
/*Теперь нам надо ждать когда моб упадет. Для этого ищем на экране ориентиры признака того что моб находится в таргете и еще жив и бьем его до тех пор пока эти признаки не пропадут с экрана. для этих целей в варспе подходит изображение короны которое находится в правом верхнем углу окна игры под табличкой ХП моба когда он в таргете.
С помощью встроенного в Кибор инструмента находим цвета и координаты трех разных пикселей этой короны и проверяем их наличие в окне игры*/
ik: if (getcolor(762, 39, w)==16249847 && getcolor(760, 47, w)==16777215 && getcolor(765, 44, w)==3617591)// проверяем цвет пикселей
{//При наличие этих пикселей бьем моба скилом и опять проверяем не пропала корона с экрана...
key('1');//Нажимаем 1. Или другую кнопку где находится скил.
sleep(500);//Пауза половина секунды
goto ik;//идем назад на проверку наличия короны
}
//Короны нет. моб слит
sleep(1000);//Пауза секунду
/*
Тут должен быть код сбора лута. Разобравшись с этим примером можно будет перейти к разбору выложенного мной скрипта там где все это есть
*/
}

sleep (100);//Пауза 100 мсек.
goto loop;// Идем к поиску моба в начало.



Это упрощенный скрипт приведенного мной бота. В нем отсутствуют необходимые проверки на ХП бойца, выскакивание разных табличек, сбоя во время использования скила(когда моб уже мертв а скил активен. тогда его надо отменить), сортировки мобов по растоянию (бот будет бежать к дальнему цепляя на себя агрессивных мобов) и т.д. Для нормального бота необходима доработка хотя бы как в моем скрипте.
 
 Top
vadiska
Отправлено: 15 Июля, 2013 - 20:52:54
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2013  
Репутация: 0




да такой ище вопрос как прописать так че выполнялось то или иное действия первым?
 
 Top
Kibor
Отправлено: 15 Июля, 2013 - 21:10:38
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 vadiska пишет:
да такой ище вопрос как прописать так че выполнялось то или иное действия первым?

Чё?
 
 Top
vadiska
Отправлено: 18 Июля, 2013 - 12:29:38
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2013  
Репутация: 0




ну к примеру сначала он бьет моба потом ищет его но уже убитым потом заберает лут и идет повтор действий, как так прописано че в таком порядке он делает это?
 
 Top
Kibor
Отправлено: 18 Июля, 2013 - 21:00:55
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




В таком порядке как и запрограммировано. Код выполняется по порядку если нет переходов и функций. Код имеет комментарии. Что именно не понятно в нем?
 
 Top
vadiska
Отправлено: 19 Июля, 2013 - 00:35:19
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2013  
Репутация: 0




терь все понятно)
Тема закрыта!
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by