Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Новая версия программы Кибор получила дополнительные фунции анализа экрана, позволяющие писать надежных ботов для 3Д игр.
С помощью этих функций написан бот для RF Online. Посмотреть видео работы этого бота: Смотреть. Так же можно скачать скрипт бота:Скачать. Он имеет небольшой размер и подробные комментарии.
Описание новых функций:
finddynamic - анализирует экран или окно с игрой и возвращает масив координат анимированных моделей мобов и т.д. Принимаемые параметры позволяют очень просто описать примерные размеры и форму ожидаемых объектов. Отлично подходит для поиска 3Д моделей в игре и фильтрует их от неинтересующего мусора, такого как пейзаж, трава, лут и т.д. Возвращает экранные координаты искомых объектов в масиве.
На этом скрине показано как эта функция видит анимированных мобов в игре:
Применение finddynamic:
finddynamic принимает 12 параметров.
finddynamic(21, #x[0], #y[0], ширина_искомого_места, высота_искомого_места, объем_искомого_объекта_X, объем_искомого_объекта_Y, Старт_поиск_X, Старт_поиск_Y, Финиш_поиск_X, Финиш_поиск_Y, указатель_на_окно);
Обозначение:
1.) Если -1 - искать все объекты сколько есть, если больше 0 - искать указанное количество и завершать поиск. Про 0 читайте дальше..
2.) 3.) Указатели на одномерные int масивы, в которые записываются координаты центров искомых мест.
4.) 5.) Половинные размеры искомых мест в объектах. Все пикселя должны быть определены как динамичноменяющиеся. См. рис. 2
6.) 7.) Половинные размеры объемов по X Y, в которых при нахождение искомого места не будет производиться дополнительный поиск. См. рис. 2
8.) 9.) Левый верхний угол старта поиска в клиентских координатах окна.
10.) 11.) Правый нижний угол финиша поиска в клиентских координатах окна.
12.) Указатель на окно.
Рис. 2:
Для идентификации объекта все пикселя входящие в перекресток ширины и высоты искомого объекта должны быть динамичными без пропусков. На скрине они имеют красную подсветку.
Центр перекрестия является координатами объекта. Он так же центр объема, в котором больше не будет искаться никакой объект. То есть даже при наличие не одного такого перекрестия данный объект будет иметь только одни координаты.
Для наглядного подбора размеров следует установить в игре желаемую позицию персонажа и камеры, навести мышь на окно с игрой, нажать CTRL+SHIFT+S и воспользоваться встроенным графическим редактором.
Функция возвращает количество найденых объектов. В случае ошибки -1 - масив X меньше количества найденых объектов, -2 - масив Y меньше количества найденых объектов.
Пример кода применяющего эту функцию: применение finddynamic
Использование finddynamic:
Использовать за 2 прохода. Первый вызов с первым параметром 0:
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, Старт_поиск_X, Старт_поиск_Y, Финиш_поиск_X, Финиш_поиск_Y, указатель_на_окно);//Сохраняем изображение экрана
sleep(пауза);// пауза для обновления анимированного изображения в игре.
finddynamic(21, #x[0], #y[0], ширина_искомого_места, высота_искомого_места, объем_искомого_объекта_X, объем_искомого_объекта_Y, Старт_поиск_X, Старт_поиск_Y, Финиш_поиск_X, Финиш_поиск_Y, указатель_на_окно);//сравниваем с сохраненным изображением и ищем изменившиеся объекты, записывая их координаты.
|