loop

Помощь в написании скриптов
gapk
Posts: 9
Joined: 06 Dec 2023, 02:06

loop

Post by gapk » 14 May 2024, 01:03

Привет, у меня простейший скрипт, который раньше работал, но я не помню почему он работал раньше корректно, а сейчас никак не хочет:

Code: Select all

SendMode Input
loop
{
	if GetKeyState("Alt")
	{
		;ищу желтый пиксель
		PixelGetColor, color, 546, 789
		if color = 0x737877
		{
			;ищу пиксель красный и жму 1
			PixelGetColor, color, 991, 785
			if (color = 0x1D6689)
			{
				Send {Blind}1
				break
			}
			
			;ищу пиксель зеленый и жму 2
			PixelGetColor, color, 940, 783
			if (color = 0x009FD9)
			{
				Send {Blind}2
				break
			}
		}
	}
}
return
Моя цель: только в случае если я нажимаю Alt или зажимаю альт
только если я нашел желтый пиксель
только если нашелся красный пиксель = без конца нажимать 11111 (пока не отожму альт)
если красный пиксель не нашелся = ищем зеленый пиксель и если нашелся нажимать 222222 (пока не отожму альт).

Раньше в таком виде кода это работало именно так как я описал, а сейчас почему-то не работает. Я как-то неправильно брекаю луп?
Сейчас у меня просто нажимается один раз 1 и всё, скрипт замерает. То есть видимо после нажатия 1 происходит break лупа и луп не пробует пройти дальше по коду чтобы искать зеленый пиксель и нажимать 2.

gapk
Posts: 9
Joined: 06 Dec 2023, 02:06

Re: loop

Post by gapk » 14 May 2024, 01:40

Пофиксил скрипт, для того чтобы работало как я писал в своем посте нужно было добавить следующую конструкцию вначале скрипта:

Code: Select all

#MaxThreadsPerHotkey, 2
f12::
  toggle := !toggle
  While (toggle)
Полный текст кода теперь выглядит так:

Code: Select all

#MaxThreadsPerHotkey, 2
f12::
  toggle := !toggle
  While (toggle)
	loop
	{
		if GetKeyState("Alt")
		{
			;z
			PixelGetColor, color, 546, 789
			if color = 0x737877
			{
				;1
				PixelGetColor, color, 991, 785
				if color = 0x1D6689
				{
					Send {Blind}1
					break
				}
				
				;2
				PixelGetColor, color, 940, 783
				if color = 0x009FD9
				{
					Send {Blind}2
					break
				}
			}
		}
	}
return
Остался вопрос: можно ли как-то сделать так, чтобы скрипт работал сразу как только я открываю файл без необходимости запускать toogle через нажатие f12?
И, естественно, чтобы loop в коде брекался так же правильно (то есть лут продолжал чекать следующие условия после выполнения условия ;1)

gapk
Posts: 9
Joined: 06 Dec 2023, 02:06

Re: loop

Post by gapk » 14 May 2024, 01:55

Доделал скрипт, теперь работает почти так как и было задумано, без нажатия F12 для начала работы. Последняя проблема - иногда он продолжает посылать нажатие "1" даже если кнопка Alt не нажата/не зажата. Пробовал мод "P" ставить в GetKeyState, всё равно не помогает - скрипт продолжает нажимать 11111111 иногда когда кнопка Alt не зажата. Происходит это как-то странно, то он так "залипает" и жмет 1111111, то иногда останавливается. Примерно 3 раза работает нормально, на четвертый начинает спамить 111111 и продолжает до того момента как я ещё раз не нажму Alt. Это багулина или фича?

Код:

Code: Select all

#MaxThreadsPerHotkey, 2
;f12::
  toggle := true
  While (toggle)
	loop
	{
		if GetKeyState("Alt")
		{
			;z
			PixelGetColor, color, 546, 789
			if color = 0x737877
			{
				;1
				PixelGetColor, color, 991, 785
				if color = 0x1D6689
				{
					Send {Blind}1
					break
				}
				
				;2
				PixelGetColor, color, 940, 783
				if color = 0x009FD9
				{
					Send {Blind}2
					break
				}
			}
		}
	}
return

gapk
Posts: 9
Joined: 06 Dec 2023, 02:06

Re: loop

Post by gapk » 14 May 2024, 02:03

Решил проблему с продолжающейся работой скрипта в loop даже без условия выполнения первого условия. Достаточно было добавить в начало скрипта: SendMode Input.
Теперь работает так как и было задумано: начинает работу только если нажата или зажата кнопка alt. Начинает проверять первое условие Z - если проверка успешна - начинает проверять условие 1 = если успешно - жмет 11111111 пока не отожму ALT. Как только условие 1 не выполняется loop функция начинает проверять следующее условие 2 = если успешно - жмет 2222222222 пока не отожму ALT.
Полный код выглядит так:

Code: Select all

#MaxThreadsPerHotkey, 5
SendMode Input
toggle := true
While (toggle)
{
	loop
	{
		if GetKeyState("Alt")
		{
			;z
			PixelGetColor, color, 546, 789
			if color = 0x737877
			{
				;1
				PixelGetColor, color, 991, 785
				if color = 0x1D6689
				{
					Send {Blind}1
					break
				}
				
				;2
				PixelGetColor, color, 940, 783
				if color = 0x009FD9
				{
					Send {Blind}2
					break
				}
			}
		}
	}
}
return

Post Reply

Return to “Помощь”