Новая версия программы Кибор получила дополнительные фунции анализа экрана, позволяющие писать надежных ботов для 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, указатель_на_окно);//сравниваем с сохраненным изображением и ищем изменившиеся объекты, записывая их координаты.
1. Kibor - 05 Апреля, 2013 - 10:07:13 - перейти к сообщению
2. Serful - 08 Апреля, 2013 - 05:30:26 - перейти к сообщению
Где скачатьКибор?
3. Kibor - 08 Апреля, 2013 - 11:25:47 - перейти к сообщению
Serful пишет:
Где скачать Кибор?
Скачать Кибор
Функции для определения типа курсора
getcursor - возвращает тип курсора в выбранном окне или игре в настоящий момент. В зависимости от типа курсора можно делать выводы о объекте под мышкой.
Перед использованием этой функции надо присоединить поток игры к Кибор с помощью функции attach. Узнать тип курсора можно нажав на CTRL+SHIFT+S в момент интересующего курсора в игре. При каждом запуске игры индификатор меняется.
Применение:
getcursor();// Возвращает индификатор текущего курсора в потоке игры присоединенном функцией attach. использовать для долгого использования.
getcursor(W);// Возвращает индификатор текущего курсора в потоке на окно которого указывает W. При каждом таком вызове функции окно присоединяется и отсоеденяется.
Использовать для единичного использования.
Применение attach:
attach(W, 1) - Присоединить поток.
attach(W, 0) - Отсоединить поток.
Возвращает 1 при удаче
По окончанию работы с потоком его надо обязательно отсоединять.
CODE:
int y=65567;//идентификатор руки. узнать в шпионе кибор. меняется всегда после запуска.
win w=window (-1, "MozillaWindowClass", -1);
attach(w, 1);
loop()
{
if (getcursor()==y)messagebox ("рука..");
sleep(10);
}
win w=window (-1, "MozillaWindowClass", -1);
attach(w, 1);
loop()
{
if (getcursor()==y)messagebox ("рука..");
sleep(10);
}
4. Budni - 04 Февраля, 2019 - 14:52:43 - перейти к сообщению
При поиске по динамике возник вопрос, как правильно выделять объекты. Просто получается, что динамика выделяет все анимированные объекты. Фильтрация и разброс не помогает. Не одного видео как правильно искать по динамике не нашел.
5. Paskuda - 16 Мая, 2023 - 10:48:45 - перейти к сообщению
Добрый день, игра отображается только в режиме черный экран, в шпионе ИД курсора каждый раз меняется если менялся его вид, даже при возврате на предыдущий. Как в таком случае выловить курсор?
6. winlby97 - 19 Ноября, 2024 - 14:24:17 - перейти к сообщению
Всем привет! Спустя полтора года присоединяюсь к вопросу коллеги о смене id курсора каждый раз. Подскажите, как кто решал это ?