1

Тема: AHK: Макрос для сигналов в игре Stalcraft

Всем привет! Мне нужен скрипт на языке AutoHotKey, который после запуска ждет нажатия кнопки F3 . Скрипт начинается после нажатия этого F3 - нажимает кнопку X , затем  проверяет  цвет в координатах 689, 393. Если цвет не меняется  в течение 0.3 секунд (если такое можно реализовать), то идет повторное нажатие X и скрипт перезапускается , т.е. опять X и ожидаение цвета. Если цвет меняется , идет нажатие левой кнопкой мыши на координаты 1080, 791 , а затем, с небольшой задержкой, на координаты 1348, 798. После этого ожидается изменение цвета в координатах 1119, 736 до смены цвета. Когда в этой координате цвет изменился, идет нажатие левой кнопкой мыши на координаты 1350, 795 , а затем нажатие левой кнопкой мыши на координаты 627, 578. После этого идет нажатие X и конец без закрытия программы с возможностью перезапуска на F3. В общем-то нужен скрипт с нуля. Пробовал через ChatGPT cделать , но неудачно , все время не то. Приложу еще скрин этого же макроса , только в другой программе. Там идет ожидание определенного цвета , если получится так в ahk, буду крайне благодарен.

Post's attachments

signal.JPG 97.54 kb, 1 downloads since 2024-02-01 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: Макрос для сигналов в игре Stalcraft

Для заказов скриптов у нас есть Коммерческий раздел. Создайте пост там, и укажите цену.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: SannoV, 2024-02-03 17:27:32)

Re: AHK: Макрос для сигналов в игре Stalcraft

Повозился сам немного , но проблема в определении цвета остается. Вот этот первый цикл , где жду более яркий зеленый вообще никак не реагирует , точнее при запуске он думает , что цвет меняется , хотя это не так. Пробовал также точные цвета писать по типу if (color1 = 0x586955 and color2 = 0x586955 ...) для первого условия и другой цвет для второго , он на второе не реагировал , когда цвет все таки менялся. По таймингам по идее все нормально. Еще хотел бы узнать как можно для следующего цвета сделать именно ожидание без sleep 11500 , а тип как только цвет , так нажатие?
Alt Slow писал , тк думал и думаю , что так определяет цвета точнее , но не помогло.

#Persistent ; сделать скрипт постоянным (не закрывается после выполнения)


F3::
    Loop
    {
            ; Нажимаем кнопку X
            Send, x
            
            ; Ждем 0.1 секунду
            Sleep 100
            
            ; Проверяем цвет1 в координатах 689, 393
            PixelGetColor, color, 689, 393 , Alt Slow
            	sleep 64
            ; Проверяем цвет2 в координатах 689, 393
            PixelGetColor, color2, 689, 393 , Alt Slow
		sleep 64
            ; Проверяем цвет3 в координатах 689, 393
            PixelGetColor, color3, 689, 393 , Alt Slow
		sleep 64
            ; Проверяем цвет4 в координатах 689, 393
            PixelGetColor, color4, 689, 393 , Alt Slow
		sleep 64
            ; Проверяем цвет5 в координатах 689, 393
            PixelGetColor, color5, 689, 393 , Alt Slow
		sleep 64
            ; Проверяем цвет6 в координатах 689, 393
            PixelGetColor, color6, 689, 393 , Alt Slow
		sleep 64


            if (color1 = color2 and color2 = color3 and color3 = color4 and color4 = color5 and color5 = color6 and color6 = color1)
            {
                ; Если цвет не меняется(#586955), нажимаем X и перезапускаем скрипт
                Send, x
		break
            }
            
            if (color1 != color2 or color2 != color3 or color3 != color4 or color4 != color5 or color5 != color6 or color6 != color1)
            {
                ; Если цвет (#5d8d59), нажимаем левой кнопкой мыши на координаты 1080, 791
                Click, 1080, 791
                
                ; Ждем 0.1 секунду
                Sleep 100
                ; Нажимаем левой кнопкой мыши на координаты 1348, 798
                Click, 1348, 798
                Sleep 11500
                ; Проверяем цвет в координатах 1119, 736
                PixelGetColor, color7, 1119, 736 , Alt Slow
			sleep 100
		PixelGetColor, color8, 1119, 736 , Alt Slow
                if (color7 = color8)
                {
                    ; Если цвет #ec6868, нажимаем левой кнопкой мыши на координаты 1350, 795
                    Click, 1350, 795
                    
                    ; Ждем
                    Sleep 64
                    
                    ; Нажимаем левой кнопкой мыши на координаты 627, 578
                    Click, 627, 578
                    
                    ; Ждем
                    Sleep 64
                    
                    ; Нажимаем X
                    Send, x
		    return
                }
            }
        }


F4:: Pause, Toggle 

4

Re: AHK: Макрос для сигналов в игре Stalcraft

SannoV пишет:

проблема в определении цвета остается

По синтаксису всё вроде правильно. Чтобы проверить, какой именно цвет определился, используйте MsgBox % color

SannoV пишет:

как только цвет , так нажатие?

Проверяйте цвет в цикле с небольшим Sleep, как значение будет нужным, выходите из цикла и посылайте нажатие.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: SannoV, 2024-02-04 19:25:21)

Re: AHK: Макрос для сигналов в игре Stalcraft

teadrinker, спасибо , немного помогло. Там цвет , действительно, не так определялся немного. Также почему-то были проблемы для второго цикла с координатами , но CoordMode вроде это поправил. Сейчас остановился пока что на таком варианте:

#Persistent ; сделать скрипт постоянным (не закрывается после выполнения)
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
CoordMode, pixel , screen


F3::
начало:
    Loop
    {
            ; Нажимаем кнопку X
            Send, x
            
            ; Ждем 0.25 секунды
            Sleep 250
            
            ; Проверяем цвет1 в координатах 689, 393
            PixelGetColor, color, 689, 393
            	sleep 64
            ; Проверяем цвет2 в координатах 689, 393
            PixelGetColor, color2, 689, 393
		sleep 64
            ; Проверяем цвет3 в координатах 689, 393
            PixelGetColor, color3, 689, 393
		sleep 64
            ; Проверяем цвет4 в координатах 689, 393
            PixelGetColor, color4, 689, 393
		sleep 64
            ; Проверяем цвет5 в координатах 689, 393
            PixelGetColor, color5, 689, 393
		sleep 64
            ; Проверяем цвет6 в координатах 689, 393
            PixelGetColor, color6, 689, 393

            if (%color% = "0x598D5D" or %color2% = "0x598D5D" or %color3% = "0x598D5D" or %color4% = "0x598D5D" or %color5% = "0x598D5D" or %color6% = "0x598D5D")
            {
                ; Если цвет (0x598D5D), нажимаем левой кнопкой мыши на координаты 1080, 791
                Click, 1080, 791
                
                ; Ждем 0.1 секунду
                Sleep 100
                ; Нажимаем левой кнопкой мыши на координаты 1348, 798
                Click, 1348, 798
                Sleep 10000
		colorred = "0xEC6868"
                ; Проверяем цвет в координатах 1119, 736
                PixelGetColor, color7, 1119, 736
			sleep 110
		PixelGetColor, color8, 1119, 736
			sleep 110
                PixelGetColor, color9, 1119, 736
			sleep 110
		PixelGetColor, color10, 1119, 736
			sleep 110
		PixelGetColor, color11, 1119, 736
			sleep 110
                PixelGetColor, color12, 1119, 736
			sleep 110
		PixelGetColor, color13, 1119, 736
			sleep 110
		PixelGetColor, color14, 1119, 736
			sleep 110
                PixelGetColor, color15, 1119, 736
			sleep 110
		PixelGetColor, color16, 1119, 736
			sleep 110
		PixelGetColor, color17, 1119, 736
			sleep 110
                PixelGetColor, color18, 1119, 736

                if (%color7% != "0x5A4040" or %color8% != "0x5A4040" or %color9% != "0x5A4040" or %color10% != "0x5A4040" or %color11% != "0x5A4040" or %color12% != "0x5A4040" or %color13% != "0x5A4040" or %color14% != "0x5A4040" or %color15% != "0x5A4040" or %color16% != "0x5A4040" or %color17% != "0x5A4040" or %color18% != "0x5A4040")
                {
                    ; Если цвет поменялся, нажимаем левой кнопкой мыши на координаты 1350, 795
                    Click, 1350, 795
                    
                    ; Ждем 0,1 секунду
                    Sleep 100
                    
                    ; Нажимаем левой кнопкой мыши на координаты 627, 578
                    Click, 627, 578
                    
                    ; Ждем 0,1 секунду
                    Sleep 100
                    
                    ; Нажимаем X
                    Send, x
		    Pause
                }
            }

            if (%color% = %color2% and %color2% = %color3% and %color3% = %color4% and %color4% = %color5% and %color5% = %color6% and %color6% = %color%)
            {
                ; Если цвет не меняется, нажимаем X и перезапускаем скрипт
                Send, x
		sleep 100
		Goto , начало
            }

        }


F4:: Pause, Toggle

Однако , даже зная точные цвета , цикл if все еще не хочет реагировать , когда видит нужный цвет. Т.е. он сразу идет на тот цикл , который для неизменного цвета , и перезапускает скрипт.  Я проверял это вот так :

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
CoordMode, pixel , screen
color0 = 0x556958
F3::           
; Проверяем цвет1 в координатах 689, 393
MouseMove 689, 393
PixelGetColor, color, 689, 393
		MsgBox % color
            	sleep 100
PixelGetColor, color2, 689, 393
		MsgBox % color2
            	sleep 100
PixelGetColor, color3, 689, 393
		MsgBox % color3
            	sleep 100
PixelGetColor, color4, 689, 393
		MsgBox % color4
            	sleep 100
PixelGetColor, color5, 689, 393
		MsgBox % color5
            	sleep 100
PixelGetColor, color6, 689, 393
		MsgBox % color6
            	sleep 100
PixelGetColor, color7, 689, 393
		MsgBox % color7
            	sleep 100

 if (%color% != %color0% || %color2% != %color0% || %color3% != %color0% || %color4% != %color0% || %color5% != %color0% || %color6% != %color0% || %color7% != %color0%)
            {
		MsgBox Поиск
		return
            }

	else MsgBox neud
        

return

Даже после сообщения с нужным цветов он выводил сообщение он неудаче. По-разному писал условие , все равно не реагирует правильно ((

6

Re: AHK: Макрос для сигналов в игре Stalcraft

SannoV пишет:
if (%color% != %color0% || %color2% != %color0% || %color3% != %color0% || %color4% != %color0% || %color5% != %color0% || %color6% != %color0% || %color7% != %color0%)

Здесь знаки процентов не нужны. В прошлом варианте у вас их не было. Пример:

a := 5
b := 6

if (a = b) {
    MsgBox a equals b
} else {
    MsgBox a is NOT equal to b
}

if (%a% = %b%) {
    MsgBox a equals b
} else {
    MsgBox a is NOT equal to b
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Макрос для сигналов в игре Stalcraft

teadrinker , большое спасибо! Помогло , теперь вроде все работает.

8

Re: AHK: Макрос для сигналов в игре Stalcraft

Итоговый код для коллег по игре и может кого еще. Можно поиграть с таймингами , но так вроде норм , хотя пока нет времени долго проверять. Макрос для 1920x1080 , игра в оконном режиме. После запуска скрипта нажимаете F3 и оно начнет самостоятельно открывать/закрывать САК , пока не найдется сигнал. На паузу ставить на F4.

#Persistent ; сделать скрипт постоянным (не закрывается после выполнения)
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
CoordMode, pixel , screen

color0 = 0x598D5D
colorred = 0xEC6868
colordarkred = 0x5A4040

F3::
начало:
    Loop
    {
            ; Нажимаем кнопку X
            Send, {vk58}
            
            ; Ждем 0.25 секунды
            Sleep 250
            
            ; Проверяем цвет1 в координатах 689, 393
            PixelGetColor, color, 689, 393
            	sleep 50
            ; Проверяем цвет2 в координатах 689, 393
            PixelGetColor, color2, 689, 393
		sleep 50
            ; Проверяем цвет3 в координатах 689, 393
            PixelGetColor, color3, 689, 393
		sleep 50
            ; Проверяем цвет4 в координатах 689, 393
            PixelGetColor, color4, 689, 393
		sleep 50
            ; Проверяем цвет5 в координатах 689, 393
            PixelGetColor, color5, 689, 393
		sleep 50
            ; Проверяем цвет6 в координатах 689, 393
            PixelGetColor, color6, 689, 393

            if (color = color0 or color2 = color0 or color3 = color0 or color4 = color0 or color5 = color0 or color6 = color0)
            {
                ; Если цвет (0x598D5D), нажимаем левой кнопкой мыши на координаты 1080, 791
                Click, 1080, 791
                
                ; Ждем 0.1 секунду
                Sleep 100
                ; Нажимаем левой кнопкой мыши на координаты 1348, 798
                Click, 1348, 798
                Sleep 10000
                ; Проверяем цвет в координатах 1119, 736
                PixelGetColor, color7, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color8, 1119, 736 , RGB
			sleep 110
                PixelGetColor, color9, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color10, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color11, 1119, 736 , RGB
			sleep 110
                PixelGetColor, color12, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color13, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color14, 1119, 736 , RGB
			sleep 110
                PixelGetColor, color15, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color16, 1119, 736 , RGB
			sleep 110
		PixelGetColor, color17, 1119, 736 , RGB
			sleep 110
                PixelGetColor, color18, 1119, 736 , RGB

                if (color7 != colordarkred or color8 != colordarkred or color9 != colordarkred or color10 != colordarkred or color11 != colordarkred or color12 != colordarkred or color13 != colordarkred or color14 != colordarkred or color15 != colordarkred or color16 != colordarkred or color17 != colordarkred or color18 != colordarkred)
                {
                    ; Если цвет поменялся, нажимаем левой кнопкой мыши на координаты 1350, 795
                    Click, 1350, 795
                    
                    ; Ждем 0,1 секунду
                    Sleep 100
                    
                    ; Нажимаем левой кнопкой мыши на координаты 627, 578
                    Click, 627, 578
                    
                    ; Ждем 0,1 секунду
                    Sleep 100
                    
                    ; Нажимаем X
                    ; Send, {vk58} Не нажимаем , после Поиск сам закрывается
		    		Pause
                }
            }

            if (color = color2 and color2 = color3 and color3 = color4 and color4 = color5 and color5 = color6 and color6 = color)
            {
                ; Если цвет не меняется, нажимаем X и перезапускаем скрипт
                Send, {vk58}
		sleep 100
		Goto , начало
            }

        }


F4:: Pause, Toggle