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

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

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

> Описание: Бот для онлайн игры RF Online
Chipyhaster
Отправлено: 20 Сентября, 2023 - 13:37:35
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




 Kibor пишет:
Данный скрипт реализует бот для игры 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);
}
/////////////////////////////////////////////////////////////////




Отлично работает, хотелось бы поинтересоваться как его "модернизировать" ?

1. Что если на поле 2+ вида мобов, как добавить несколько id-шек?
2. При не нахождении моба, бот нажимает на среднюю кнопку для разворота на 180, как правильно выключить эту функцию?
3. Можно ли добавить нажатие клавиш через N-кол-во времени? к примеру использование бафа раз в 150с (F4) , и использование скилла удара (F1) на моба каждые 5с.
(Добавление)
1. Что если на поле 2+ вида мобов, как добавить несколько id-шек?
2. При не нахождении моба, бот нажимает на среднюю кнопку для разворота на 180, как правильно выключить эту функцию?
3. Можно ли добавить нажатие клавиш через N-кол-во времени? к примеру использование бафа раз в 150с (F4) , и использование скилла удара (F1) на моба каждые 5с.

p.s. сразу почему-то подумал что это айдишник конкретного моба, но теперь заметил что это в целом любой моб
 
 Top
Chipyhaster
Отправлено: 23 Сентября, 2023 - 00:32:28
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




 Chipyhaster пишет:
 Kibor пишет:
Данный скрипт реализует бот для игры 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);
}
/////////////////////////////////////////////////////////////////




Отлично работает, хотелось бы поинтересоваться как его "модернизировать" ?

1. Что если на поле 2+ вида мобов, как добавить несколько id-шек?
2. При не нахождении моба, бот нажимает на среднюю кнопку для разворота на 180, как правильно выключить эту функцию?
3. Можно ли добавить нажатие клавиш через N-кол-во времени? к примеру использование бафа раз в 150с (F4) , и использование скилла удара (F1) на моба каждые 5с.
(Добавление)
1. Что если на поле 2+ вида мобов, как добавить несколько id-шек?
2. При не нахождении моба, бот нажимает на среднюю кнопку для разворота на 180, как правильно выключить эту функцию?
3. Можно ли добавить нажатие клавиш через N-кол-во времени? к примеру использование бафа раз в 150с (F4) , и использование скилла удара (F1) на моба каждые 5с.

p.s. сразу почему-то подумал что это айдишник конкретного моба, но теперь заметил что это в целом любой моб
 
 Top
Chipyhaster
Отправлено: 24 Сентября, 2023 - 12:10:24
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




Почему именно Калиан на Этере бот не хочет бить? он выделяет в таргет их и сразу же снимает таргет...
вот всех других мобов он бьет, калиан - нет

(Отредактировано автором: 24 Сентября, 2023 - 12:24:48)

 
 Top
Chipyhaster
Отправлено: 24 Сентября, 2023 - 17:28:03
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




Увидел о функции findheapcolor , возможно это решит проблему с таргетом на калианах
Насколько Я правильно понял, нужно заменить finddynamic? а дальше всё остается так же?
 
 Top
Kibor
Отправлено: 29 Сентября, 2023 - 06:58:49
Post Id



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


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




 Chipyhaster пишет:
Почему именно Калиан на Этере бот не хочет бить? он выделяет в таргет их и сразу же снимает таргет...

Когда бот выделяет моба, он проверяет наличие таблички которая появляется.
CODE:
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;
}


Возможно что для данного моба координаты
tabX, tabY
не находятся на табличке.
можно сделать дополнительные координаты и проверять так
if (getcolor(tabX, tabY, w)==tabColor || getcolor(tabX1, tabY1, w)==tabColor)//3//Если появилось окошко наверху что моб выделен
Или цвет таблички не такой.
Тогда так
if (getcolor(tabX, tabY, w)==tabColor || getcolor(tabX, tabY, w)==tabColor1)//3//Если появилось окошко наверху что моб выделен
Надо объявить новые переменные и указать их значения для этого моба.
 
 Top
Chipyhaster
Отправлено: 29 Сентября, 2023 - 13:12:01
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




Спасибо, Владимир. Добавил цвет и теперь всё работает. Закатив глазки
+ Я дополнительно сменил переменные координат старта и финиша, и теперь бот работает в другом разрешении Любовь...
 
 Top
Kibor
Отправлено: 29 Сентября, 2023 - 13:12:34
Post Id



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


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




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

И на такие глобальные вопросы мало кто ответит.
Это надо знать как работает скрипт в этой игре и разобраться в нем.
На более точные вопросы, с кодом дадут ответ быстрее.

Есть отладчик. Научитесь его использовать. Увидите как работает скрипт в реальном времени.
И можете использовать функцию kiborlog(для просмотра ссылки Вам необходимо авторизоваться)
 
 Top
Chipyhaster
Отправлено: 30 Сентября, 2023 - 20:07:28
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




Хотелось бы доработать "ребаф" персонажа, но не совсем понимаю какой функцией его проверять.
- Суть такова, что бафы в RFO "плавающие" по цвету пикселя, в момент наложения - они более чёткие, ближе к концу - более прозрачные, а под конец и вовсе мигают (скриншоты прилагаю)

[img](для просмотра ссылки Вам необходимо авторизоваться) /img] - в начале бафа
[img](для просмотра ссылки Вам необходимо авторизоваться) /img] - в конце

И проверять надо только самый нижний, остальные продлятся автоматически если будет баф последнего бафа.
По цвету пикселя - не проверить. На мой взгляд наверное костыль, который будет просто бафать через определённое время...

Возможно кто-то более опытный подскажет.
 
 Top
Kibor
Отправлено: 30 Сентября, 2023 - 23:06:51
Post Id



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


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




Может проверять его наличие любой функцией ?
По пикселям можно.
Если не нашел - бафа нет.
 
 Top
Chipyhaster
Отправлено: 01 Октября, 2023 - 14:03:03
Post Id



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


Покинул форум
Сообщений всего: 23
Дата рег-ции: Сент. 2023  
Откуда: Украина
Репутация: 0




 Kibor пишет:
Может проверять его наличие любой функцией ?
По пикселям можно.
Если не нашел - бафа нет.

не совсем понял. у пикселей есть цвет и он на этом бафе будет меняться в зависимости от времени бафа.
 
 Top
Страниц (6): « 1 2 3 [4] 5 6 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Готовые скрипты »


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




Powered by