Что нового

Написание бота для R2

archiver

Новичок
Сообщения
10
Репутация
1
Решил написать простенького бота для R2. Сделал автохилл, автоТП, контроль сытости, включение книг - все прекрасно работает. Осталось самое сложное-поиск мобов в локации. Пробовал через PixelSearch - работает, но плохо (много одинаковых цветов, бот похож на бешеную собаку)) Остался один способ - поиск моба перемещением курсора по определенной траектории (несколько колец, спирали и т.д) и одновременным контролем курсора. Курсор поменялся не меч ->атака. А вот как получить данные курсора игры? Кто-нибудь может помочь?
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
игру сам не видел. так что представляю абстрактно.
нужно двигать курсор например с шагом 5 пикселей (по каждому наверное долго), после каждого шага зная текущую позицию мыши делать проверку пикселей в нескольких местах со сдвигом на то место где предположительно находится меч.
Код:
$pos = MouseGetPos()
PixelGetColor ($pos[0]+5 , $pos[1]+4)

В нескольких местах чтоб точно убедиться что это не пейзаж. Можно брать яркость пикселя. Например со светлой частью меча обязательно должна быть тёмная т.д.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
http://autoit-script.ru/index.php/topic,116.0.html
тут говорится как сделать фиш бота для вов по принципу реакции на курсор.
 
Автор
A

archiver

Новичок
Сообщения
10
Репутация
1
Нет, решения с PixelSearch не подходят. Они не универсальны, подходят только для определенной локации, для мобов определенного цвета.
Идея с контролем курсора работает. В начале функции определяем хендл курсора атаки, а дальше тупо водим мышью по экрану и ждем, когда курсор окажется на мобе и хендл сменится хендл атаки. Топорно, грубо, но эффективно))) Как-то так:
Код:
$cursor= _WinAPI_GetCursorInfo() ;курсор атаки
......
For $j=1 to $ColCircle ;начало движения мыши по кругу, первый круг
	For $i = 1 to 360 ;рисуем мышью окружность
		hill()
		MouseMove($iXCenter + $iRadius * Cos($i*$pi/180), $iYCenter + $iRadius * Sin($i*$pi/180), 0) ;точка окружности
		Sleep($iDelay)
		$var = PixelGetColor(639, 731)   ;проверяем цвет пикселя точки
		$cursor_now= _WinAPI_GetCursorInfo() ;хендл курсора 
		if ($cursor_now[2]=$cursor[2]) and $var=0 Then ;если под курсором моб(хендл курсора=хендлу курсора атаки
			$m = MouseGetPos() 						;
			MouseMove($m[0], $m[1], 5) 				;
			MouseDown("left") 						;Атака
			Sleep(50)								;
			MouseClick( "right", $m[0] ,$m[1],5)	;
			MouseUp("left")							;
			While 1									;Ждем, пока моб будет убит (пока значек атаки не станет черного цвета
				$var = PixelGetColor(639, 731)		;
				hill()								;
				if $var=0 Then						;если моб убит, 
				loot()								;собираем лут
				ExitLoop							;следующий круг		
				EndIf
			WEnd
		EndIf
	Next
$iRadius=$iRadius+$Step
Next
 
Верх