1

Тема: AHK v2: Скрипт не эмулирует клавиши

Всем привет, дорогие пользователи форума! Я написал скрипт для Майнкрафта, и он работает, как ему вздумается, то есть не хочет эмулировать клавиши n, e, j, при этом Esc работает корректно. Я пытался сносить ахк, перезагружать скрипт и комп, но все бестолку. Вчера комп простоял буквально пол часа и все опять заработало, а сегодня - та же песня.


coords := [
    [1768, 1240],
    [1821, 1240],
    [1876, 1240],
    [1932, 1240],
    [1987, 1240],
    [2038, 1240],
    [2093, 1240],
    [2147, 1240]
]
global Toggle := false
global Stack := true
WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
Sleep(100)

G::ToggleScript()

ToggleScript() {
    global Toggle
    Toggle := !Toggle
    if (Toggle) {
        SetTimer(MainLoop, 100)  ; Запускаем основной цикл с интервалом 100 мс
    } else {
        SetTimer(MainLoop, 0)  ; Останавливаем основной цикл
    }
}

AutoSell(){
    ; Активировать окно по его названию
    WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
    Sleep(500) ; Увеличенная задержка для надежности
	global Stack
    ; Первая продажа инвиза
    Loop 8
    {
        index := A_Index + 1
        SendInput(index)
        Sleep(50) ; Увеличенная задержка
        SendInput("n")
        Sleep(50) ; Увеличенная задержка
    }
    
    if !Toggle
        return
    
    ; Инвиз в хотбар
    SendInput("e")
    Sleep(100) ; Увеличенная задержка
    Send("+{Shift down}")
    Click("left", "down")
    MouseMove(1714, 1240)
    Loop 8
    {
        coord := coords[A_Index]
        MouseMove(coord[1], coord[2])
        Sleep(100) ; Увеличенная задержка
    }
    Send("+{Shift up}")
    Click("left", "up")
    
    MouseMove(1718, 1050)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    Sleep(100) ; Увеличенная задержка
    
    MouseMove(1714, 1240)
    Sleep(100) ; Увеличенная задержка

    ; Зажать ПКМ
    Click("right", "down")
    Sleep(100) ; Увеличенная задержка
    Loop 8
    {
        coord := coords[A_Index]
        MouseMove(coord[1], coord[2])
        Sleep(100) ; Увеличенная задержка
    }
    Click("right", "up")
    Sleep(100) ; Увеличенная задержка
    MouseMove(1718, 1050)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    SendInput("{Esc}")
    
    ; Повторная продажа
    Loop 8
    {
        index := A_Index + 1
        SendInput(index)
        Sleep(50) ; Увеличенная задержка
        SendInput("n")
        Sleep(50) ; Увеличенная задержка
    }
    
    if !Toggle
        return
    
    ; Предметы из хотбара обратно в инвентарь
    SendInput("e")
    Sleep(100) ; Увеличенная задержка
    Send("+{Shift down}")
    Click("left", "down")
    MouseMove(1714, 1240)
    Loop 8
    {
        coord := coords[A_Index]
        MouseMove(coord[1], coord[2])
        Sleep(100) ; Увеличенная задержка
    }
    Send("+{Shift up}")
    Click("left", "up")
    SendInput("{Esc}")
    
    if !Toggle
        return

    ; Инвиз в хотбар
    SendInput("e")
    Sleep(100) ; Увеличенная задержка
    Send("+{Shift down}")
    Click("left", "down")
    MouseMove(1714, 1240)
    Loop 8
    {
        index := A_Index + 1
        SendInput(index)
        Sleep(50) ; Увеличенная задержка
        SendInput("n")
        Sleep(50) ; Увеличенная задержка
    }
    Send("+{Shift up}")
    Click("left", "up")
    
    MouseMove(1718, 1050)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    Sleep(100) ; Увеличенная задержка
    
    MouseMove(1714, 1240)
    Sleep(100) ; Увеличенная задержка

    ; Зажать ПКМ
    Click("right", "down")
    Sleep(100) ; Увеличенная задержка
    Loop 8
    {
        coord := coords[A_Index]
        MouseMove(coord[1], coord[2])
        Sleep(100) ; Увеличенная задержка
    }
    Click("right", "up")
    Sleep(100) ; Увеличенная задержка
    MouseMove(1718, 1050)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    SendInput("{Esc}")
    
    if !Toggle
        return
    
    ; Повторная продажа
    Loop 8
    {
        index := A_Index + 1
        SendInput(index)
        Sleep(50) ; Увеличенная задержка
        SendInput("n")
        Sleep(50) ; Увеличенная задержка
    }
    
    if !Toggle
        return
    
    ; Открытие AH и снятие предметов
    Sleep(10000)
    SendInput("j")
    Sleep(500)
    MouseMove(1704, 1072)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    MouseMove(1700, 797)
    Sleep(500)
    Send("+{Shift down}")
    Sleep(50)
    Click("left", "down")
    MouseMove(1700, 796)
    Sleep(10000)
    Send("+{Shift up}")
    Click("left", "up")
    SendInput("{Esc}")
    
    if !Toggle
        return
    
    ; Инвиз в хотбар 
    SendInput("e")
    Sleep(100) ; Увеличенная задержка
    Send("+{Shift down}")
    Click("left", "down")
    MouseMove(1714, 1240)
    Loop 8
    {
        coord := coords[A_Index]
        MouseMove(coord[1], coord[2])
        Sleep(100) ; Увеличенная задержка
    }
    Send("+{Shift up}")
    Click("left", "up")
    
    MouseMove(1718, 1050)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    Sleep(100) ; Увеличенная задержка
    
    MouseMove(1714, 1240)
    Sleep(100) ; Увеличенная задержка

    ; Зажать ПКМ
    Click("right", "down")
    Sleep(100) ; Увеличенная задержка
    Loop 8
    {
        coord := coords[A_Index]
        MouseMove(coord[1], coord[2])
        Sleep(100) ; Увеличенная задержка
    }
    Click("right", "up")
    Sleep(100) ; Увеличенная задержка
    MouseMove(1718, 1050)
    Sleep(100) ; Увеличенная задержка
    Click("left")
    SendInput("{Esc}")
    Sleep(1000)
    SendInput("e")

    ; Заданный цвет (в формате RGB)
    Sleep(1000)
    x := 1702
    y := 1043
    targetColorHex := "0xD16C48"
    targetColor := targetColorHex + 0
    
    GetPixelColor(x, y) {
        return PixelGetColor(x, y)
    }
    
    pixelColor := GetPixelColor(x, y) + 0
    Sleep(500)
    if (pixelColor == targetColor) {
        SendInput("{Esc}")
        Sleep(500)
    } else {
        SendInput("{Esc}")
        Sleep(500)
        Stack := !Stack
    }
}



MainLoop(){ ;ОСНОВНОЙ КОД СКРИПТА
	global Stack
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(1980, 1050) ; Первый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")

	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2022, 1050) ; Второй слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")

	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2070, 1050) ; Третий слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2130, 1050) ; Четвертый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(1980, 1100) ; Пятый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2022, 1100) ; Шестой слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2070, 1100) ; Седьмой слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2130, 1100) ; Восьмой слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(1980, 1160) ; Девятый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2022, 1160) ; Десятый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2070, 1160) ; Одиннадцатый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	
	
	Loop {
		if (Stack) {
			AutoSell()
		} else {
			break  ; Выйти из цикла, если Stack равно false
		}
		if (!Toggle) {
			break  ; Выйти из цикла, если Toggle выключен
		}
	}
    if !Toggle
        return
	Stack := !Stack
	WinActivate("Minecraft* 1.16.5 - Сетевая игра (сторонний сервер)")
	Send("e")
	Sleep(200)
	MouseMove(2130, 1160) ; Двенадцатый слот для замены
	Click("left")
	Sleep(100)
	MouseMove(1718, 1050)
	Click("left")
	Sleep(100)
    Send("{Esc}")
	Pause
}

Код я писал с помошью ChatGPT, который в этих вопросах, мягко говоря, немного туповат. Кстати, при запуске скрипта, он в логах пишет, что он ОТРАВЛЯЕТ n, e и j. Что делать?

2

Re: AHK v2: Скрипт не эмулирует клавиши

Начните с малого, проверяйте понемногу код, когда появится косяк - исправляйте. В чём именно проблема?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101