Что нового

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

archiver

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

ynbIpb

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

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 573
Репутация
933
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
 
Верх