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

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

 Страниц (6): [1] 2 3 4 5 6 »   

> Описание: Бот для онлайн игры RF Online
Kibor
Отправлено: 12 Апреля, 2013 - 18:58:36
Post Id



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


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




Данный скрипт реализует бот для игры RF Online.
Видео работы этого бота:видео 1, видео 2 и видео 3

Код скрипта:
CODE:
/*Бот для RF Online. Для фришек. Тестировалось на pvpwar.net.
Игра в окне. Разрешение игры 1024/768. Всю анимацию и эфекты отключить. Вид подбирать сверху с уклоном примерно 45. Зависит от мобов и ситуации.
Чем выше камера, тем точнее сортировка по растоянию. Удаление камеры в несколько раз больше стандарта
Положение таблички таргета - стандартное по середине.
Выбрать управление - клавиатура. На экране все закрыть что можно. Чат свернуть. Панель быстрого доступа тоже можно свенуть*/

int Cursor=100204663;//Идентификатор курсора атаки. Узнать - навести на моба и нажать CTRL+SHIFT+S. Меняется при каждом запуске игры.
int tabX=460, tabY=74, tabColor=4671042;//Координаты и цвет пикселя на табличке выделенного моба. Узнать - навести на табличку и нажать CTRL+SHIFT+S.
int p=50;//Задержка мыши над мобом. Увеличить если курсор цвет не успевает менять.
int lyt=5;//Количество нажатий пробела. Сбор лута. Установить 0 если не нужен лут, так как занимает время.
int Mob_X=3, Mob_Y=5;//Размер крестика который должен быть весь динамичным. (Половинные размеры)
int Raz_Din_X=50, Raz_Din_Y=70;//Полный размер моба (Половинные размеры) В этом объеме больше не искать динамику.
int c_X=512, c_Y=416;//Координаты перса на экране. Примерно центр экрана под ногами.Узнать - навести на точку экрана и нажать CTRL+SHIFT+S
int payza_sravn=500;//Пауза между сравнением изображения игры для индификации очагов динамики. Увеличить если при поиске не находятся все мобы. Не успевает показать все меняющиеся пикселя.
int st_poisk_X=27, st_poisk_Y=146;//Левый верхний угол начала поиска в клиенте.
int fin_poisk_X=974, fin_poisk_Y=530;//Правый нижний угол окончания поиска в клиенте.
//Размеры Mob_X/Mob_Y и удаление камеры от перса подобрать так, чтоба в очаги не попадал лут и трава. Мобы должны попадать все.
//Размеры Raz_Din_X/Raz_Din_Y подобрать так, чтоб на каждый моб было по одной координате. Зависит от удаления камеры и размеров моба.

int x[21], y[21];//Масивы для координат центров крестиков Mob_X\Mob_Y динамичных очагов
int st=0;//Переключатель для смены (шаг вперед - шаг назад) Для торможения перса
int rz=0;//Счетчик пустых кругов. Кода не найден моб. Для разворота на 180 градусов
int k;//Количество найденых очагов динамики
int n, l;//Вспомогательные
/////////////////////////////////////////////
win w=window ("RF Online", "D3D Window", -1);//Указатель на окно игры
if (w==0)//Игра есть
{
messagebox ("Запустите игру.");
goto er;
}
activate(w);//Активировать окно игры
sleep(500);
if (attach(w, 1)!=0)//Присоеденить поток игры для проверки курсора
{
lo: key(ESCAPE);//Нажать esc(все окна убрать если появились)

if (Poisk_mob()==-1)goto lo;//Искать мобов

sort(c_X, c_Y, #x[0], #y[0], k);//Сортировка по растоянию очаг-перс

////////////////Поиск и бой найденых мобов/////////////////////
n=0;
ck: if (n<k)//1//Цикл перебора очагов динамики
{
trusit_mouse(x[n], y[n]);//Потрусить мышью, что бы клиент среагировал и поменял курсор если под курсором моб

if (getcursor()==Cursor)//2//Если курсор принял тип атаки(над мобом)
{
mouse (LEFT);//Щелкнуть по мобу мышкой
sleep(50);

if (Mob_naiden()==-1)//Проверка наличия моба в таргете и бой и сбор лута
{//Если нет в таргете (ошибка) тормозим что бы не бежал перс
if (st==0){key(UP);st=1;}//Шаг назад(по очереди)
else {key(DOWN);st=0;}//Шаг вперед(по очереди)
}

goto lo;
}//2

n++;
goto ck;
}//1
////////////////////////////////////////////////

rz++;
if (rz>1)//Моб не найден 2 круга
{
rz=0;
mouse (MIDDLE);//Клик средней кнопкой. Разворот перса на 180
sleep(1000);
}
sleep(200);
goto lo;
}
attach(w, 0);//Отсоединить поток
er:;

//////////////ФУНКЦИИ//////////////

function Mob_naiden()//Проверка наличия моба в таргете и бой и сбор лута
{
if (getcolor(tabX, tabY, w)==tabColor)//3//Если появилось окошко наверху что моб выделен
{
boi: key(SPACE);//Нажать пробел
sleep(50);
if (getcolor(tabX, tabY, w)==tabColor) goto boi;//Пока есть окошко нажимать пробел
l=0;
ty: if (l<lyt){key(SPACE);sleep(300); l++; goto ty;}//Сбор лута
rz=0;//Атака была. Счетчик разворота в ноль.
return 0;
}
return -1;
}

/////////

function Poisk_mob()//Искать мобов
{
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, st_poisk_X, st_poisk_Y, fin_poisk_X, fin_poisk_Y, w);//Получить изображение игры
sleep(payza_sravn);//Пауза между сравнением для поиска изменений
k=finddynamic(21, #x[0], #y[0], Mob_X, Mob_Y, Raz_Din_X, Raz_Din_Y, st_poisk_X, st_poisk_Y, fin_poisk_X, fin_poisk_Y, w);//Получить изображение игры и сравнить с прошлым. Получить координаты динамичных очагов.

if (k>20){sleep(200);return -1;}//Если более 20 очагов динамики. Шум. Сравнение повторить.
return 0;
}

//////////

function trusit_mouse(int tx, int ty)//Потрусить мышью, что бы клиент среагировал и поменял курсор если под курсором моб
{
mousemove(tx+st_poisk_X+1, ty+st_poisk_Y, w);sleep(p);
mousemove(tx+st_poisk_X-1, ty+st_poisk_Y, w);sleep(p);
mousemove(tx+st_poisk_X, ty+st_poisk_Y+1, w);sleep(p);
mousemove(tx+st_poisk_X, ty+st_poisk_Y-1, w);sleep(p);
mousemove(tx+st_poisk_X, ty+st_poisk_Y, w);sleep(p);
}
/////////////////////////////////////////////////////////////////


 
 Top
Wolter
Отправлено: 21 Ноября, 2013 - 20:46:45
Post Id



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


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




А есть подобный бот для руофа (https://ru.4game.com/rf/play) ? Желательно под x64 ОС.
 
 Top
Kibor
Отправлено: 21 Ноября, 2013 - 21:09:44
Post Id



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


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




Ну написать без задействия курсора определения и будет для 4game. мышь и клавиатура там работает под антиантикликером
 
 Top
Wolter
Отправлено: 21 Ноября, 2013 - 22:02:33
Post Id



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


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




Кто бы ещё это сделал... я способен лишь на простейшие скрипты.
 
 Top
Barabachka
Отправлено: 22 Ноября, 2013 - 11:37:33
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2013  
Репутация: 3




 Wolter пишет:
А есть подобный бот для руофа (https://ru.4game.com/rf/play) ?

А какой бот? это главная страница
(Добавление)
 Barabachka пишет:
 Wolter пишет:
А есть подобный бот для руофа (https://ru.4game.com/rf/play) ?

А какой бот? это главная страница

Сори... Это бот с первой страницы автора Радость

(Отредактировано автором: 22 Ноября, 2013 - 11:38:58)

 
 Top
Wolter
Отправлено: 22 Ноября, 2013 - 17:49:09
Post Id



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


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




 Barabachka пишет:
 Wolter пишет:
А есть подобный бот для руофа (https://ru.4game.com/rf/play) ?

А какой бот? это главная страница
(Добавление)
 Barabachka пишет:
 Wolter пишет:
А есть подобный бот для руофа (https://ru.4game.com/rf/play) ?

А какой бот? это главная страница

Сори... Это бот с первой страницы автора Радость


В этом и проблема, этот данный скрипт как бы работает на фришках, на русофе персонаж беспорядочно бегает по карте, вероятнее из-за x64 ОС, но только на ней клиент Kibor и может зафиксировать игровое окно. Попытки правок скрипта ни к чему не привели.
 
 Top
Kibor
Отправлено: 22 Ноября, 2013 - 18:30:16
Post Id



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


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




Не. Не из за 64...
Просто для идентификации моба применялась функция getcursor(). Она определяет действительно ли под курсором моб когда мышь наводится на моба который найден с помощью finddynamic.
А для getcursor нужен указатель на окно, а под фростом его нельзя получить. Анти антикликер обходит только блок мыши и клавиатуры.
Я конечно думаю потом сделать полный обход защит, но на данном этапе указатель на окно на офе не получить. В следствие этого не работают функции определения типа курсора и работы с памятью процесса.
Если переделать скрипт и идентифицировать моба по другому признаку, то будет работать на офе.
 
 Top
Wolter
Отправлено: 22 Ноября, 2013 - 21:00:07
Post Id



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


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




 Kibor пишет:
Не. Не из за 64...
Просто для идентификации моба применялась функция getcursor(). Она определяет действительно ли под курсором моб когда мышь наводится на моба который найден с помощью finddynamic.
А для getcursor нужен указатель на окно, а под фростом его нельзя получить. Анти антикликер обходит только блок мыши и клавиатуры.
Я конечно думаю потом сделать полный обход защит, но на данном этапе указатель на окно на офе не получить. В следствие этого не работают функции определения типа курсора и работы с памятью процесса.
Если переделать скрипт и идентифицировать моба по другому признаку, то будет работать на офе.

Бот же может подсвечивать активные зоны. Что если определение по цвету?
 
 Top
Kibor
Отправлено: 22 Ноября, 2013 - 21:02:35
Post Id



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


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




Какой там цвет в 3Д... Конечно по динамике.. Но для контроля еще надо проверять действительно ли курсор над мобом... Можно конечно обойтись и если после щелчка в таргете нет моба, тормознуть перса и дальше искать... но лучше проверять сразу перед тем как щелкать.
(Добавление)
CODE:
if (getcursor()==Cursor)//2//Если курсор принял тип атаки(над мобом)

Закоментировать эту строку - не будет проверки
И надо во всех функциях убрать указатель на окно w и использовать экранные координаты.
 
 Top
Kibor
Отправлено: 27 Ноября, 2013 - 17:33:03
Post Id



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


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




Набросал бота который работает на офе на 4game... и не только.
Для офа необходимо включать антиантикликер.

Требования:
Игра в окне. Разрешение игры 1024/768. Всю анимацию и эфекты отключить. Вид подбирать сверху с уклоном примерно 35. Зависит от мобов и ситуации.
Чем выше камера, тем точнее сортировка по растоянию. Удаление камеры на максимум.
Выбрать управление - клавиатура. На экране все закрыть что можно. Чат свернуть. Панель быстрого доступа тоже можно свернуть

Убрал привязку к окну и типу курсора. Следовать инструкции при запуске бота.
Вместо идентификации типа курсора идет определение ника над мобом если на нем мышь.
Подробнее как указать цвет в скрипте. Находится в переменной int Col_Nik.
Так же надо указать сколько таких пикселей в нике в int kol_sovp_pix. Можно меньше но не больше..



Скрипт:
CODE:
int Col_Nik=4718847;//Цвет основной массы пикселей в нике. Узнать через графический редактор Кибор ( CTRL+SHIFT+S )
int kol_sovp_pix=35;//Количество пикселей которые надо что бы найдены были если под мышью моб и над ним ник.
//Подробнее о настройке этого цвета http://s57.radikal.ru/i157/1311/ce/5ac9bca4724d.jpg

int tabX, tabY, tabColor;//Координаты и цвет пикселя на табличке выделенного моба. Узнается при запуске бота. Следовать инструкции
int p=50;//Задержка мыши над мобом. Увеличить если курсор цвет не успевает менять.
int lyt=5;//Количество нажатий пробела. Сбор лута. Установить 0 если не нужен лут, так как занимает время.
int Mob_X=3, Mob_Y=5;//Размер крестика который должен быть весь динамичным. (Половинные размеры)
int Raz_Din_X=50, Raz_Din_Y=70;//Полный размер моба (Половинные размеры) В этом объеме больше не искать динамику.
int c_X, c_Y;//Координаты перса на экране. Примерно центр экрана под ногами.Узнать - навести на точку экрана и нажать CTRL+SHIFT+S
int payza_sravn=500;//Пауза между сравнением изображения игры для индификации очагов динамики. Увеличить если при поиске не находятся все мобы. Не успевает показать все меняющиеся пикселя.
int st_poisk_X=27, st_poisk_Y=146;//Левый верхний угол начала поиска в клиенте.
int fin_poisk_X=974, fin_poisk_Y=530;//Правый нижний угол окончания поиска в клиенте.
int stX, stY;//Лев верхн угол клиента игры
int kol_mob=0;//Кол мобов слитых
int col, xe, ye;//Экрана разрешение и цвета глубина
int p_nik_X1=100, p_nik_Y1=80, p_nik_X2=100, p_nik_Y2=0;//Область поиска над мобом ника когда мышь над ним
int x[21], y[21];//Масивы для координат центров крестиков Mob_X\Mob_Y динамичных очагов
int st=0;//Переключатель для смены (шаг вперед - шаг назад) Для торможения перса
int rz=0;//Счетчик пустых кругов. Кода не найден моб. Для разворота на 180 градусов
int k;//Количество найденых очагов динамики
int n, l, vsx[512], vsy[512];//Вспомогательные
//Размеры Mob_X/Mob_Y и удаление камеры от перса подобрать так, чтоба в очаги не попадал лут и трава. Мобы должны попадать все.
//Размеры Raz_Din_X/Raz_Din_Y подобрать так, чтоб на каждый моб было по одной координате. Зависит от удаления камеры и размеров моба.
//Подробнее о насройке функции finddynamic http://filesd.net/kibor/finddynamic.php
/////////////////////////////////////////////

getdisplay(col, xe, ye);//Разрешение экрана узнаем..
textbkcolor (65535,0);//Ставим цвет фона и текста при выводе текста на экран
textout(0, xe/2-200, ye/2, "Наведите мышь на левый верхний угол клиента (не окна) игры и нажмите Ё.", 0);
r: if (getkeystate(192)!=1){sleep(50); goto r;}//Ждем когда нажмется Ё
getmouse(stX, stY);//Запишем координаты мышки (левый верх угол в клиенте)
st_poisk_X=stX+10; st_poisk_Y=stY+146;//Левый верхний угол начала поиска в клиенте.
fin_poisk_X=stX+980; fin_poisk_Y=stY+530;//Правый нижний угол окончания поиска в клиенте.
c_X=stX+512; c_Y=stY+416;//Это координаты перса

pause(1000);

textbkcolor (16777215,0);
textout(0, xe/2-300, ye/2, "Выделите моба, наведите мышь на самый левый пиксель полосы ХП в таргете и нажмите Ё.", 0);
r1: if (getkeystate(192)!=1){sleep(50); goto r1;}
getmouse(tabX, tabY);//Запишем координаты мышки (в xp первый пиксель)
tabColor=getcolor (tabX, tabY);//Цвет пикселя

sleep(500);
textbkcolor (8454017,0);
textout(0, stX, stY, "Бот запущен. Слито мобов: "+format(kol_mob), 0);


lo: key(ESCAPE);//Нажать esc(все окна убрать если появились)

if (Poisk_mob()==-1)goto lo;//Искать мобов

sort(c_X, c_Y, #x[0], #y[0], k);//Сортировка по растоянию очаг-перс

////////////////Перебор и бой найденых мобов/////////////////////
n=0;
ck: if (n<k)//1//Цикл перебора очагов динамики
{
trusit_mouse(x[n], y[n]);//Потрусить мышью, что бы клиент среагировал и поменял курсор если под курсором моб
if (findcolor(kol_sovp_pix, #vsx[0],#vsy[0], x[n]-p_nik_X1, y[n]-p_nik_Y1, x[n]+p_nik_X2, y[n]+p_nik_Y2, Col_Nik, -1)==kol_sovp_pix)//2//Если мышь над мобом ( совпадение количества пикселей определенного цвета в нике )
{
mouse (LEFT);//Щелкнуть по мобу мышкой
sleep(50);
if (Mob_naiden()==-1)//Проверка наличия моба в таргете и бой и сбор лута
{//Если нет в таргете (ошибка) тормозим что бы не бежал перс
if (st==0){key(UP);st=1;}//Шаг назад(по очереди)
else {key(DOWN);st=0;}//Шаг вперед(по очереди)
}
goto lo;//Моб слит - идем в начало цикла
}//2
n++;
goto ck;
}//1
////////////////////////////////////////////////

rz++;
if (rz>1)//Моб не найден 2 круга
{
rz=0;
mouse (MIDDLE);//Клик средней кнопкой. Разворот перса на 180
sleep(1000);
}
sleep(200);
goto lo;

er:;

//////////////ФУНКЦИИ//////////////


function Mob_naiden()//Проверка наличия моба в таргете и бой и сбор лута
{
if (getcolor(tabX, tabY)==tabColor)//3//Если появилось окошко наверху что моб выделен
{
boi: key(SPACE);//Нажать пробел
sleep(50);
if (getcolor(tabX, tabY)==tabColor) goto boi;//Пока есть окошко нажимать пробел
kol_mob++;
textout(0, stX, stY, "Бот запущен. Слито мобов: "+format(kol_mob), 0);
l=0;
ty: if (l<lyt){key(SPACE);sleep(300); l++; goto ty;}//Сбор лута
rz=0;//Атака была. Счетчик разворота в ноль.
return 0;
}
return -1;
}

/////////

function Poisk_mob()//Искать мобов
{
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, st_poisk_X, st_poisk_Y, fin_poisk_X, fin_poisk_Y, -1);//Получить изображение игры
sleep(payza_sravn);//Пауза между сравнением для поиска изменений
k=finddynamic(21, #x[0], #y[0], Mob_X, Mob_Y, Raz_Din_X, Raz_Din_Y, st_poisk_X, st_poisk_Y, fin_poisk_X, fin_poisk_Y, -1);//Получить изображение игры и сравнить с прошлым. Получить координаты динамичных очагов.

if (k>20){sleep(200);return -1;}//Если более 20 очагов динамики. Шум. Сравнение повторить.
return 0;
}

//////////

function trusit_mouse(int tx, int ty)//Потрусить мышью, что бы клиент среагировал и поменял курсор если под курсором моб
{
mousemove(tx+st_poisk_X+1, ty+st_poisk_Y);sleep(p);
mousemove(tx+st_poisk_X-1, ty+st_poisk_Y);sleep(p);
mousemove(tx+st_poisk_X, ty+st_poisk_Y+1);sleep(p);
mousemove(tx+st_poisk_X, ty+st_poisk_Y-1);sleep(p);
mousemove(tx+st_poisk_X, ty+st_poisk_Y);sleep(p);
}
/////////////////////////////////////////////////////////////////
 
 Top
Страниц (6): [1] 2 3 4 5 6 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« Готовые скрипты »


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




Powered by