Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с AHK TriggerBot

a_enigma Знаток (327), на голосовании 1 месяц назад
Можно ли сделать радиус вокруг курсора, к примеру 4х4 пикселя вокруг него, сейчас только конкретный пиксель:

Threshold = 20

*~$t::
MouseGetPos, MouseX, MouseY
PixelGetColor, Color1, (MouseX+2), (MouseY+2)
StringSplit, Colorz, Color1
Color1B = 0x%Colorz3%%Colorz4%
Color1G = 0x%Colorz5%%Colorz6%
Color1R = 0x%Colorz7%%Colorz8%
Color1B += 0
Color1G += 0
Color1R += 0

while (GetKeyState("t", "P"))
{
BlockInput, MouseMove
sleep 1
MouseGetPos, MouseX, MouseY
PixelGetColor, Color2, (MouseX+2), (MouseY+2)
StringSplit, Colorz, Color2
Color2B = 0x%Colorz3%%Colorz4%
Color2G = 0x%Colorz5%%Colorz6%
Color2R = 0x%Colorz7%%Colorz8%
Color2B += 0
Color2G += 0
Color2R += 0
if (Color1R > (Color2R + Threshold)) or (Color1R < (Color2R - Threshold)) or (Color1G > (Color2G + Threshold)) or (Color1G < (Color2G - Threshold)) or (Color1B > (Color2B + Threshold)) or (Color1B < (Color2B - Threshold))
{
send {LButton}
}
}
BlockInput, MouseMoveOff
Return

End::
exitapp
return
Голосование за лучший ответ
salo moya Знаток (323) 2 месяца назад
Для добавления радиуса вокруг курсора, нужно изменить код так, чтобы он проверял не один конкретный пиксель, а область вокруг курсора. Мы можем настроить радиус 4x4, что соответствует квадрату 9x9 (с учетом центрального пикселя). Это означает, что мы будем проверять несколько пикселей вокруг курсора.

Я перепишу ваш скрипт, чтобы он проверял цвет в квадрате 4x4 пикселя вокруг курсора.

ahk
Копировать код
Threshold = 20
Radius = 4

*~$t::
MouseGetPos, MouseX, MouseY
PixelGetColor, Color1, (MouseX+2), (MouseY+2)
StringSplit, Colorz, Color1
Color1B = 0x%Colorz3%%Colorz4%
Color1G = 0x%Colorz5%%Colorz6%
Color1R = 0x%Colorz7%%Colorz8%
Color1B += 0
Color1G += 0
Color1R += 0

while (GetKeyState("t", "P"))
{
BlockInput, MouseMove
sleep 1
MouseGetPos, MouseX, MouseY

ColorChanged := false

; Проверяем цвет в квадрате вокруг курсора
Loop, %Radius%
{
xOffset := A_Index - 1 - Floor(Radius / 2)
Loop, %Radius%
{
yOffset := A_Index - 1 - Floor(Radius / 2)
PixelGetColor, Color2, (MouseX + xOffset), (MouseY + yOffset)
StringSplit, Colorz, Color2
Color2B = 0x%Colorz3%%Colorz4%
Color2G = 0x%Colorz5%%Colorz6%
Color2R = 0x%Colorz7%%Colorz8%
Color2B += 0
Color2G += 0
Color2R += 0

; Проверка по каждому каналу (RGB) с учетом порога Threshold
if (Color1R > (Color2R + Threshold)) or (Color1R < (Color2R - Threshold)) or (Color1G > (Color2G + Threshold)) or (Color1G < (Color2G - Threshold)) or (Color1B > (Color2B + Threshold)) or (Color1B < (Color2B - Threshold))
{
ColorChanged := true
break 2 ; Выходим из обоих циклов, если цвет изменился
}
}
}

if (ColorChanged)
{
send {LButton}
}
}
BlockInput, MouseMoveOff
Return

End::
exitapp
return
Пояснение изменений
Параметр Radius: устанавливает радиус вокруг курсора. В данном случае Radius = 4, что задает область 4x4 пикселя.

Двойной цикл Loop, %Radius%: Первый цикл проходит по оси X, второй — по оси Y. Мы смещаемся от курсора, чтобы охватить все точки внутри радиуса.

ColorChanged := true: Если хотя бы один из пикселей в радиусе отличается от исходного цвета больше, чем на Threshold, то устанавливается флаг ColorChanged, и мы выходим из обоих циклов, отправляя клик мыши.

Этот скрипт проверяет каждый пиксель в радиусе 4х4 вокруг курсора, что поможет вам отслеживать изменение цвета в области, а не на одной точке.
a_enigmaЗнаток (327) 2 месяца назад
Лучший, большое спасибо <3
a_enigmaЗнаток (327) 2 месяца назад
можно ли сделать по линии? например 2 пикселя вправо и 2 влево от курсора?
Похожие вопросы