Что нового

Многопотоковый бот

lukoas

Знающий
Сообщения
16
Репутация
9
При разработке бота обнаружил что функция PixelSearch на некоторых машинах выполняется неопределено-продолжительное время, т.е. одиночная проверка в квадрате 2х2 пикселя может занять более 1 сек :shok:.
Пример бота ( MacroEVE.rar - многопотоковый бот-хантер, эта версия анализирует локал, и режит ВСЮ непись )
Для устранения этого решил использовать внешную dll-ку, сделаную по типу ImageSearch, но оптимизированую под задачи бота.
Ядром этой dll, является 2 функции
- функция "блокировки" экрана - считывание содержимое экрана в память(скриншет)
- функция поиска образа - поиск в памяти(скриншете) заданого образа состоящего из точек с заданым цветом с погрешностью.
Также реализован более удобный способ задания масок, чем написания функций поиска/анализа, маски задаются в файле *.ini
Реализация и пример использования в ( _dll.rar )
dll - еще сыровата, в плане того что нет различных проверок на переполнения и т.п. на даный момент ищить кнопочку "локал" начиная с точки 0:0(верхний-левый угол) в окне клиента менее чем за 30мс (разрешение окна клиента - 1024х768, размещение окон - дефолтное)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
Re: многопотоковый бот-хантер нульспейса

Хороший дебют
 

pred

Новичок
Сообщения
1
Репутация
0
Re: многопотоковый бот-хантер нульспейса

Эм. А можно пару комментариев по ДЛЛ?
А то я в Автоит не рублю, а вот пиксельсёрч с погрешностью.. :laugh: это классная тема.
какие функции можно экспортировать из длл и чо за ини файл там хитрый

Или может кто-нить сможет подсказать как сделать погрешность в поиске куска изображения? например крестик бш или квадратег минуса. Единственное что пока на ум приходит это брать шаблонный image, двигать его попиксельно слева направо сверху вниз и как тока процент совпадения цвета пикселей будет к примеру 90 % бинго. Или есть более простые/хитрые алгоритмы??

Или там идёт именно погрешность поиска цвета? Тоесть надо брать например не просто какой то доопустим красный но и +- там по 500 оттенков рядом с ним из палитры...
 
Автор
L

lukoas

Знающий
Сообщения
16
Репутация
9
Re: многопотоковый бот-хантер нульспейса

экспортируемые функции:
extern "C" __stdcall long Lock(HWND hwnd)
делает скриншет экрана и запоминает координаты окна и идентификатором hwnd

extern "C" __stdcall long PixelGet(long x, long y)
берет цвет в скриншете (координаты абсолютные). Сделана для просмотра скришета, нужно както все это отладить ;)

extern "C" __stdcall long SearchMask(MaskRecord* mask)
собствено ищит и возвращает координаты, вернуть структуру неудалось, поэтому X:Y - упаковываются в long

структура MaskRecord
long size; - размер структур, интереса не представляет
long width; - ширина маски
long height; - высота маски
char shade; - погрешность определения цвета (см. PixelSearch)
long top;
long left;
long bottom;
long right;
long colortbl[0]; - массив с цветом

top:left - bottom:right - диапазон поиска

цвет задается как 4х байтовое число, старший байт определеяет нужно ли анализировать цвет, если 0 - то проверяем принадлежит ли цвет заданому диапазону (каждая компонена отдельно, подобно PixelSearch), если не 0, то пропускаем анализ.

Пробовал все это делать на AutoIT. Скриншет и чтение пикселя - относительно неплохо по скорости, а вот поиск по маске крайне медленый 30мс(с учетом загрузки маски из файла) против 1-10 секунд !! на AutoIT, всетаки накладные расходы на обработку нетипизированых переменых сильно сказываются
 
Автор
L

lukoas

Знающий
Сообщения
16
Репутация
9
Re: многопотоковый бот-хантер нульспейса

структура ini файла:
например "треугольничек :rofl:" варпа, кооторый уже некоторое время представляет из себя несколько горизонтальных полосок

[WarpMenu]
color = 0x00CCCCCC - цвет который ищим
shade = 0x10 - погрешность анализа цвета (т.е цвет 0x00D4D4D4 и 0x00C0C0C - одноитоже)
0 = ++++
1 = ----
2 = ----
3 = ++++

"+" - цвет должен соостветсвовать color с учетом shade
"-" - по идее "не должен" соответсвовать color с учетом shade (пока пишу, понял что это не реализовал, хотя хотел , завтро подкорректирую )
"другой символ" - цвет может принимать любое значение.

Этот способ задания предбологает 3х позиционую маску, т.е. возможно 3 варианта пикселя "равно", "неравно" и "побарабану"
 

usrman

Новичок
Сообщения
13
Репутация
0
Re: многопотоковый бот-хантер нульспейса

Как-то путано с ini-файлом. Если можно приаттач семпл.

P.S. А почему C++, сейчас вроде как .Net FW рулит?
 
Автор
L

lukoas

Знающий
Сообщения
16
Репутация
9
Re: многопотоковый бот-хантер нульспейса

Добавил обработку ( "-" - "не должен" соответсвовать ).
т.е. теперь:
"+" - цвет должен быть равен color(диапазон)
"-" - цвет "не должен" равен color(диапазон)
"другой символ" - цвет может принимать любое значение.

Все необходимые файлы в архиве, в ini определены маски для:
- "треугольник" меню варпа
- треугольник подменю варпа
- Овервью
- БШ, БК и фригат

По поводу многопоточности:
Использование ВМ(виртуальная машина) конечно неплохо, поскольку в это время можно использовать комп, но она крайне ресурсоемки и редко удается запустить более 2 клиентов на 1 физической машине, а запустить 2 клиента в 1 ВМ - это фантастика. Комп же дома простаивает 12-18 часов без дела ;) , поэтому почемуже не запустить пару, троку клиентов и крутить их.

Бот-артель (MultiTask.rar):
многопотоковый бот с индивидуальной настройкой алгоритма, предназначен для вскапывания гравиков/ладарок в ВХ.

Распределение ролей:
2 акка - "крот" (коветор) , просто копают и кидают в джетисоны по таймер, если неудалось залочить то делают переварп на подварп-спот (200-250км от гравика) и варпают на 10 к булыжнику. Каждый новый джетисон инкремирует счетчик числа джетисонов (глобальная переменая)
1 акка - "грузовик" (баджет/итерн), сидит на посе, когда число джетисонов не равно 0 подварпывает на подварп-спот и варпает на джетисон, забирает его и отвозит на пос в XL
1 акка - "протектор" (дрейк с проблаунчером и линком), поскольку ВХ нет локала, то используем комбат/дипспейс пробки, после первого запуска в ручную удаляем все сигнатуры (шипы/сиги/анамальки также настраиваем фильтр на сиги/анамальки), каждые 30-60 секунд делаем скан и анализируем появление новых сиг. Если появилось что-то новое даем все остальным команду на отварп.

"крот" и "грузовик" - были реализованы, "протектор" - только частично, в том плане что кричал в чат о появлении чегото левого.
Вообще этот проет забросил, по скольку в связи некой "игровой механикой" этот бот приводил к "выжиганию" системы. Причем выяснил что систему выжигает безобидный "протектор". Что касается "грузовика" то его использовать целесообразно только если имеем 4 и более капателя, при 3х акках "вермишель" (я его называю "кузнечик") более эффективен, например в ВХ класс 1(2) за ночь (4-6 часов) нарывает полный корпангар аркона/бистота


PS: почему С++ ? это вроде C :smile:, хотя есть функционирующий проект на С++ (анализ локала + разгон белтов). Пришлось его делать по "быстрому" поскольку решение с dll хоть и было на виду, но AutoIT в связке с dll для меня это была неразведаная территория, да и разницу в быстродействие проверил.
 
Автор
L

lukoas

Знающий
Сообщения
16
Репутация
9
Re: многопотоковый бот

Таки свершилось, я доделал ядро состоящего из менеджера задачь и базового GUI, получилось довольно таки громоздко, но зато удобства. Ядро получилось хорошо маштабируемое, в том плане что можно безболезнено добавлять новые алгоритмы поведения бота. Сами алгоритмы поведения (хант, майнинг и т.п.) не реализованы, но есть пример как оно должно выглядить изнутри ( Crosbusher_Script.au3 ).
PS: Изходя из структуры скриптов-алгоритмов они получаются очень сильно грамозкие, например алгоритм анализа варпа (ждем запрос, жмем варп, ждем начало , ждем окончания ...) с учетом разных таймаутов, числа попыток и т.п. разрастается до 100 строк текста, но такова цена за невытесняющую многозадачность
PSS: ну кто готов переделать "вермишель" под это ядро ?
 
Автор
L

lukoas

Знающий
Сообщения
16
Репутация
9
Re: многопотоковый бот

Накидал приблизительный алгоритм простейшего бота майнера в хайсеке


PS:Ктонить задумавался о прикручивание какойнить UML к AutoIT, а еще лучше ДРАКОНа :smile:
Разместил картинку на другом хостинге
OffTopic:
10-05-2011 уезжаю в командировку, небудет примерно недели 2
 

Castellan

Новичок
Сообщения
32
Репутация
2
есть пару вопросов:
Код:
AutoItSetOption("WinTitleMatchMode", 4)
Global $hWndList = WinList ("classname=triuiScreen") 
;почитал помощь но нифига не понял... как из этих двух строк скрипт понимает, что ему нужно именно окно евы??? как привязать скрипт к определенному имени окна(персонажа)? и почему, если пишешь 
$hWndClient = "EVE - Persona XXX" ; то вылетает скрипт????

скрипт выдает абсолютные координаты маски... как их (програмно) перевести в координаты клиентской части окна? или на худой конец хотя бы в относительные координаты окна?
п.с. прикольно так с координатами работает: диапазон поиска задается относительно окна, а выдает конечные абсолютные координаты )))))
 

Castellan

Новичок
Сообщения
32
Репутация
2
ок, понял... а первый вопрос? как в этих двух строках(мое предыдущее сообщение) понять, что это именно окно евы, а не какой-нить лейнэйдж? :smile:
и про относительные координаты :smile:
 
Верх