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

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

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

> Описание: Динамические изображения в браузерной игре
rev41k
Отправлено: 17 Декабря, 2013 - 14:21:29
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




Всем привет!!! Обожаю одну игрушку но никак не хватает времени поиграть и решил написать бота при помощи КИБОР. Игра браузерная (на флэше). Самая большая проблема у меня появилась при написании бота с поиском мобов. Подскажите что лучше использовать finddynamic или findimage !? Я пробовал при помощи findimage , но поиск происходит очень долго ... Finddynamic находит , но по разному( т.е. одного и того же моба может находить по 3 раза). Я думаю , что это из-за того , что не все мобы подходят под динамический поиск , но надеюсь , что я ошибаюсь и вы мне подскажете что к чему.

Скрин локации (без динамики):(для просмотра ссылки Вам необходимо авторизоваться)
Скрин с динамикой :(для просмотра ссылки Вам необходимо авторизоваться)
как видно на скрине из-за взмаха крылье летучих мышей я не могу хорошо подобрать центр моба и на одну и ту же мышь бот может наводить по 2 , а то и по 3 раза.

Мой простой код (поиск и указание курсором на мобов)
CODE:

win w=window (-1, "Chrome_RenderWidgetHostHWND", window ("Òåõíîìàãèÿ - Google Chrome", "Chrome_WidgetWin_1", -1));
int x[20], y[20];
int Mob_X=8, Mob_Y=14;
int Mob_Din_X=16, Mob_Din_Y=51;
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 0, 0, 1366, 676, w);
int k=finddynamic(10, #x[0], #y[0], Mob_X, Mob_Y, Mob_Din_X, Mob_Din_Y, 0, 0, 1366, 676, w);
//----------------------------------------------------------

a:
wait(1000);

search();
move();

goto a;
//===================================
function search()
{
poisk:
sleep(500);
if (k>10)goto poisk;
if (k<2)goto poisk;
}

//==================================

function move()
{
int n=0;
b:
if (n<k)
{
mousemove(x[n], y[n],w);
sleep(2000);
n++;
goto b;
}
}
//==================================


Вообщем я хочу максимально точно сделать поиск мобов на локации и чтобы мышь кликала в одинаковые координаты моба. При том чтобы бот находил близжайшего моба на локации от героя и кликал его( но это можно и потом , главное поиск) !
Всем заранее спасибо!
 
 Top
Kibor
Отправлено: 17 Декабря, 2013 - 19:11:29
Post Id



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


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




findimage в смысле медленно? По скринам смотреть если он может не найти просто, так как там даже морда и туловище разные...


Между finddynamic надо ставить паузу небольшую. sleep(200) прмерно.

Надо подобрать
int Mob_X, Mob_Y;
int Mob_Din_X, Mob_Din_Y;


Если по скрину смотреть можно попробовать
int Mob_X=30, Mob_Y=20;
int Mob_Din_X=60, Mob_Din_Y=70;

Может понадобиться увеличение паузы между finddynamic .

Тут важно даже не количество найденных участков, а как определить что это моб именно. Есль механизм который в игре покажет что под мышкой находится моб?
Так же если знать что это моб, то даже если найдено 3 места на мобе то реагировать на первое. Нажать мышь например и не важно сколько там найдено еще.
По поводу сортировки смотрите sort.
 
 Top
rev41k
Отправлено: 18 Декабря, 2013 - 00:06:42
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




когда курсор наводится на моба то появляется такой рисунок на мобе....(для просмотра ссылки Вам необходимо авторизоваться)
но как это реализовать !? курсор ведь при наведении на моба может быть выше , ниже или с отклонениями в бок... и потом как искать ? при наведении курсора на моба проверять есть ли в заданных координатах( цвета этих канжалов по пикселям !?
 
 Top
Kibor
Отправлено: 18 Декабря, 2013 - 00:26:48
Post Id



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


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





Узнаете в этом рисунке часть мечей?
Делаете похожий с игры и ищите с помощью findimage наличие его на экране после наведения мышки на моба. Если есть - над мобом. Можно ограничить область поиска позицией найденных координат + - сколько надо что бы при любой позиции относительно моба обеспечить что бы рамка поиска охватывала всего моба.
 
 Top
rev41k
Отправлено: 26 Декабря, 2013 - 23:11:57
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




Написал пару строк для проверки моих мечей при наведении на моба. Простой поиск мечей в окне, но ничего не происходит (( или я снова что-то не правильно написал!?

CODE:

win w=window (-1, "Chrome_RenderWidgetHostHWND", window ("Òåõíîìàãèÿ - Google Chrome", "Chrome_WidgetWin_1", -1));
int Image_0[34][34];
loadimage (#Image_0[0][0], "C:\meci.bmp");
int PosX_0, PosY_0;
a:
if (findimage(-1, #Image_0[0][0], 0, #PosX_0, #PosY_0, 0, 0, 1366, 676, w)==1)
{
mousemove(PosX_0, PosY_0);
sleep(500);
}
goto a;


Моя бмп в оригинальном размере :(для просмотра ссылки Вам необходимо авторизоваться)
 
 Top
Kibor
Отправлено: 27 Декабря, 2013 - 00:07:55
Post Id



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


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




С права возле места пересечения явно фон захвачен.
Проверьте этот файл
Если не будет поиск, используйте расширенную findimage . Тогда может мечи не имеют постоянного цвета.
 
 Top
rev41k
Отправлено: 06 Января, 2014 - 13:53:45
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




Помучился немного и получил хороший поиск мобов на локации. Теперь появились другие проблемы:
1- при входе в бой чтобы бот кликал по картинке (скиллу) если только есть определенные пксели в в нужных координатах (это будет указывать , что наш ход), и если есть другие цвета пикселей в других координатах , тогда ждать ( это будет указывать на ход противника).
2- когда не будет на экране ни одного ни другого пикселя тогда перейти к поиску монстров на локации.
(Добавление)
Мой код (Отобразить)

(Добавление)
Бой

Верхние головы указывают на "Чей ход". Если слева секунды в голове соответственно мой ход , если справа , то моба.

Ниже в красной рамке скиллы.
 
 Top
Kibor
Отправлено: 06 Января, 2014 - 14:10:21
Post Id



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


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




Укажу ошибки:
 rev41k пишет:
function search()
{
poisk:
sleep(500);
if (k>20)goto poisk;
if (k<2)goto poisk;
}

Что делает эта функция? Вводит скрипт в замкнутый цикл? С которого не выйдет если k>20 иль k<2.

 rev41k пишет:
int n=1;
b:
if (n<k)
{
sort(683, 310, #x[0], #y[0], k);
mousemove(x[n], y[n]+10,w);


Зачем сортировать массивы в каждом цикле. Один раз надо перед циклом:
CODE:
int n=1;
sort(683, 310, #x[0], #y[0], k);
b:
if (n<k)
{
mousemove(x[n], y[n]+10,w);


Ну и не понятно применение указателя на окно игры... То применяется, то нет... Игра наверно во весь экран или около того?
Ну вот пример неверного применения:
 rev41k пишет:
if (findimage(-1, #Image_0[0][0], 0, #PosX_0, #PosY_0, 0, 0, 1366, 676, w)==1)
{
sleep(300);
mouse(LEFT, PosX_0+15, PosY_0+80);


findimage работает с окном, а клик в экранных координатах...
 
 Top
rev41k
Отправлено: 11 Января, 2014 - 16:13:53
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013  
Откуда: Молдова, Кишинев
Репутация: 0




[quote=Kibor]Укажу ошибки:
 rev41k пишет:
function search()
{
poisk:
sleep(500);
if (k>20)goto poisk;
if (k<2)goto poisk;
}

Что делает эта функция? Вводит скрипт в замкнутый цикл? С которого не выйдет если k>20 иль k<2.

Здесь я проверяю : "Если динамики больше 20 , то ищем снова динамику на экране (от 3 до 19)" , просто больше 20 и меньше 2 мне не подходит.

По поводу сортировки и указателя на окно СПАСИБО не заметил, спешил и упустил. Но функционал бота не изменился.

Но хотелось бы помощи вот в этом :

 rev41k пишет:
Помучился немного и получил хороший поиск мобов на локации. Теперь появились другие проблемы:
1- при входе в бой чтобы бот кликал по картинке (скиллу) если только есть определенные пксели в в нужных координатах (это будет указывать , что наш ход), и если есть другие цвета пикселей в других координатах , тогда ждать ( это будет указывать на ход противника).
2- когда не будет на экране ни одного ни другого пикселя тогда перейти к поиску монстров на локации.
(Добавление)
Мой код (в предыдущем посте)
(Добавление)
Бой :(для просмотра ссылки Вам необходимо авторизоваться)
Верхние головы указывают на "Чей ход". Если слева секунды в голове соответственно мой ход , если справа , то моба.

Ниже в красной рамке скиллы.


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

(Отредактировано автором: 11 Января, 2014 - 16:15:31)

 
 Top
Kibor
Отправлено: 11 Января, 2014 - 22:02:25
Post Id



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


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




 rev41k пишет:
Но хотелось бы помощи вот в этом


Я с логикой помочь не могу, так как не могу вникать в каждую игру.
Вот конкретно с кодом - да, могу.

 rev41k пишет:
Здесь я проверяю : "Если динамики больше 20 , то ищем снова динамику на экране (от 3 до 19)" , просто больше 20 и меньше 2 мне не подходит.

Это понятно.. но Ваш код не работает. Проследите за его выполнением и увидите.

 rev41k пишет:
poisk:
sleep(500);
if (k>20)goto poisk;
if (k<2)goto poisk;


Ну допустим что k<2 и k>20, то что, идем на две строки вверх и код опять выполняется до проверки... При этом k не меняется... то есть цикл замкнутый. Нет с него никогда выхода.
Надо что бы между
poisk:
и
if (k>20)goto poisk;
if (k<2)goto poisk;
был код меняющий k...

Например
CODE:
int k;
poisk: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 0, 0, 1366, 676, w);
sleep(100);
k=finddynamic(10, #x[0], #y[0], Mob_X, Mob_Y, Mob_Din_X, Mob_Din_Y, 0, 0, 1366, 676, w);

if (k>20)goto poisk;
if (k<2)goto poisk;
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by