Тема: 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

