1 (изменено: umakhan97, 2016-04-17 13:25:32)

Тема: AHK: Самонацеливающийся скрипт (DLL-продолжение)

Здравствуйте, форумчане.

Я имею скрипт:

Search_Spread=10 					    ;Стандартный поиск-квадрат 16х16.
PercentChance_of_Hit = 100 				;Как часто будет выполняться loop->else->Fire.
Idle_Before_Stopping = 4000 				;Количество "ненужного" времени.

;Добавляю кольца через " | "
ColsToScan = 0x46FF8A | 0x12C848 | 0x5EFFB0 | 0x12CE4C | 0x30FF3A | 0x50FF5E | 0x0EB818 | 0x90FFA6 | 0x72FF90 | 0x028702 | 0x50E940 | 0x04B804 | 0x50E658 | 0x044B04 | 0x50D825 | 0x0EFF0E | 0x50F07F | 0x11BB11 | 0x50C860 | 0x19D619 | 0x50BE70 | 0x1DFF1D | 0x50F086 | 0x0CFA0C | 0x50E67B | 0x088108 | 0x049604	| 0x15E415 | 0x045204 | 0x20EB20 | 	;Все цвета для обнаружения.

;Тут всё стабильно.

BotEnabled = 1
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
StringSplit, ColArray, ColsToScan, | 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;!НАЙТИ И УНИЧТОЖИТЬ!;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;!НАЙТИ И УНИЧТОЖИТЬ!;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;!НАЙТИ И УНИЧТОЖИТЬ!;;;;;;;;;;;;;;;;;;;;;;;;;;;

Loop
{

	;включение бота
	if(BotEnabled = 0) {
		continue ;the bot is off
	}

	;detect idle time
	if(A_TimeIdlePhysical > Idle_Before_Stopping) {
		BotEnabled = 0
		Suspend
	}

	Sleep, 10

	MouseGetPos, xpos, ypos 

		Loop, %ColArray0%
		{
			thisCol := ColArray%a_index%
			PixelSearch, x, y, xpos-Search_Spread/2, ypos-Search_Spread/2, xpos+Search_Spread/2, ypos+Search_Spread/2, %thisCol%, 4, Fast
			if ErrorLevel {
		   		 ;No Target
			 } else {
			 SC02F:: {				;Буква V на клавиатуре
				Fire()
				}
				continue
			}		
		}

}




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ИСПОЛНЯЕМЫЕ ФУНКЦИИ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ИСПОЛНЯЕМЫЕ ФУНКЦИИ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ИСПОЛНЯЕМЫЕ ФУНКЦИИ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Fire() {
		DllCall("mouse_event", UInt, 0x0001
                                 , Int, x
                                 , Int, y
                                 , UInt, 0
                                 , Int, 0)
		DllCall("mouse_event", UInt, 0x0001
                                 , Int, x
                                 , Int, -y
                                 , UInt, 0
                                 , Int, 0)
		ToolTip, Fired!!
		SetTimer, RemoveToolTip, 100
}

RemoveToolTip:
	SetTimer, RemoveToolTip, Off
	ToolTip
	Return


MButton::   						;Вкл/Выкл. всех исполняемых функций
Suspend
if(%A_IsSuspended% = 0) {
	ToolTip, ВКЛЮЧЕНО!!!
	BotEnabled = 1
	} else {
	ToolTip, ТРИГГЕР ВЫКЛЮЧЕН!!
	BotEnabled = 0
}
SetTimer, RemoveToolTip, 400
Return

Путём поиска нужных элементов и медленного познания AHK, я собирал его скрипт по частям.

В итоге, я своего добился:

Скрипт, сканирует область 16х16 пикселей вокруг курсора, и в случае обнаружения необходимого цвета, он жмёт Fire. Обычный Color Bot короче.

Но теперь я решил его модифицировать. Ниже представлена попытка модификации:
Дело в том, что мне теперь нужно, чтобы скрипт при обнаружении цвета, не стрелял, а пускал курсор в вечное следование данному цвету. То есть, при обнаружении цвета, курсор начал следовать за данным цветом, не переставая.

А теперь в чём подвох.

При использовании PixelSearch + MouseMove скрипт идеально работает автономно, но стоит мне запустить какую-либо игру (Шутер от первого лица), так при обнаружении цвета, камера в игре начинает вести себя, мягко говоря, неадекватно. При возвращении на рабочий стол, скрипт начинает работать нормально.

У меня есть подозрение, что игра использует модуль Raw для ввода мыши, чтобы не дать игрокам "читерить" с помощью макросов (MacroEditor).

Однако, при попытке использования простого DllCall:

LButton::DllCall("mouse_event", UInt, 0x0001
                                 , Int, 0
                                 , Int, 250
                                 , UInt, 0
                                 , Int, 0)
LButton Up::DllCall("mouse_event", UInt, 0x0001
                                 , Int, 0
                                 , Int, -250
                                 , UInt, 0
                                 , Int, 0)

Курсор в любых приложениях ведёт себя адекватно и "так, как надо".
____________________________________________________________

ССобсна, прошу вашей помощи
Как мне сделать так, чтобы при нажатии клавиши на клавиатуре или мыши, скрипт, при обнаружении цвета, заставлял курсор следовать за цветом, при этом используя функцию DllCall

2

Re: AHK: Самонацеливающийся скрипт (DLL-продолжение)

LButton::DllCall("mouse_event", UInt, 0x0001
                                 , Int, 0              ;тут должна быть х
                                 , Int, 250             ;тут должна быть y
                                 , UInt, 0
                                 , Int, 0)
LButton Up::DllCall("mouse_event", UInt, 0x0001
                                 , Int, 0               ;тут должна быть -х
                                 , Int, -250             ;тут должна быть -y
                                 , UInt, 0
                                 , Int, 0)

Нужно просто в эти строчки как-то запихнуть переменные x, y, но я не знаю как. Если просто подставить переменные x и y, то эффекта будет ноль, как-будто UInt не работает с переменными вообще. Есть предположения?

3

Re: AHK: Самонацеливающийся скрипт (DLL-продолжение)

Советую посмотреть на это.
https://autohotkey.com/board/topic/5395 … e-control/
особенно на такие функции:

SendMouse_RelativeMove(x, y) { ; send fast relative mouse moves
SendMouse_AbsoluteMove(x, y) { ; send fast absolute mouse moves

4

Re: AHK: Самонацеливающийся скрипт (DLL-продолжение)

Dworkin
Спасибо огромное! Я во всём разобрался.

p.s. дай бог тебе здоровья