Что нового

[Автоматизация] Звуковой сигнал при НПС

argusv

Новичок
Сообщения
14
Репутация
0
Я не спец, простите. Прочёл множество вариаций про цвет в овервью, понял, что определить красный крестик возможно, а как сделать, чтобы при появлении в овервью НПС .. проигрывался звуковой сигнал с медиа файла?
Это и не бот вовсе получается, а как в фильмах - сигнал тревоги.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
If цвет найден Then
	SoundPlay ( "filename" [, wait] )
EndIf
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
Извините, что наглею... голова уже кипит.. а написать не могу. Как это полностью написать, чтобы в определённых координатах экрана если появятся одинакового цвета 4 пиксела и после этого запускался звуковой файл. Напишите плиз. :-[
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
;#include <Array.au3>

Global $hColor = "0xFF0000" ; красный
Local $aOther[3]

_Check()

Func _Check()
	$aSearch = _Loop() ; ждем нужный нам цвет в цикле

	$aOther[0] = PixelGetColor($aSearch[0]+1, $aSearch[1])
	$aOther[1] = PixelGetColor($aSearch[0], $aSearch[1]+1)  ; проверяем цвет 3 пикселей рядом
	$aOther[2] = PixelGetColor($aSearch[0]+1, $aSearch[1]+1)

	If ($hColor == "0x" & Hex($aOther[0],6)) And ($aOther[0] == "0x" & Hex($aOther[1],6)) And ($aOther[1] == "0x" & Hex($aOther[2],6)) Then ; если цвета одинаковы
		SoundPlay("какой-то_файл.mp3") ; проигрываем звук и выход
		Exit
	Else
		_Check() ; иначе все заново
	EndIf
EndFunc

Func _Loop()
	Local $iSearch

	Do
		$iSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, $hColor)
		Sleep(10)
	Until IsArray($iSearch) ; ждем нужный нам цвет в цикле
	;_ArrayDisplay($iSearch)
	;MouseMove($iSearch[0], $iSearch[1])

	Return $iSearch
EndFunc
 

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Либо можно использовать команду

Код:
Beep


Мерзкий писк, но всё же звуковой сигнал и отличим даже в суматохе...

Хотя если записать себя самого в звуковые файлы по действиям, то можно сделать программу с пояснениями. Вижу врага, цикл закончен, да и много чего ...

Код:
Beep(588,250)
Beep(660,250)
Beep(699,250)
Beep(660,250)
Beep(588,400)
Sleep(100)
Beep(524,250)
Beep(467,250)
Beep(440,500)
Sleep(1250)
Beep(588,250)
Beep(660,250)
Beep(699,250)
Beep(660,250)
Beep(588,400)
Sleep(100)
Beep(699,250)
Beep(784,250)
Beep(880,500)
Sleep(1000)
Beep(588,250)
Beep(588,250)
Beep(933,400)
Sleep(100)
Beep(880,400)
Sleep(100)
Beep(784,350)
Sleep(400)
Beep(880,400)
Sleep(100)
Beep(784,250)
Beep(699,250)
Beep(660,250)
Beep(699,400)
Sleep(100)
Beep(588,250)
Beep(660,250)
Beep(699,250)
Beep(699,250)
Beep(699,250)
Beep(784,250)
Beep(880,400)
Sleep(100)
Beep(660,250)
Beep(699,250)
Beep(588,500)
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
xlgrgrc [?]
Либо можно использовать команду
Код:
Beep
Мерзкий писк, но всё же звуковой сигнал и отличим даже в суматохе...

Частота и продолжительность настраиваются вроде.
Но проблема в том, что в ХР он идёт через системный динамик (который тоже есть не у всех) и потому громкость может различаться. А в 7-ке оно бипает уже колонками, хотя частота и продолжительность тоже настраиваются.
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
Fever
что то не понял. В твоём коде он весь экран будет проверять? :blink:
 

Fever

Скриптер
Сообщения
308
Репутация
112
argusv [?]
весь экран будет проверять?
ну да. четких указаний что и как проверять не было, поправь под свои нужды :-\


Добавлено:
Сообщение автоматически объединено:

приношу свои извинения, я перепутал местами макросы @DesktopWidth и @DesktopHeight, если именно это стало причиной написания Вашего поста с недоумением, то я уже поправил :-[
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
Да, скорее всего я не полностью истолковал свою идею по программке. Хочется реализма немного добавить в игру. Вот например так:
У меня экран с разрешением 1024х768. Хочется, чтобы прога мониторила прямоугольный участок на наличие 3-х красных пикселей, которые находятся рядом друг с другом. Координаты прямоугольного участка: верхняя левая точка: x=850,y=180; нижняя правая точка: x=980,y=670. Это если я правильно понимаю координаты идут слева на право и сверху вниз. Когда красные пикселы обнаружены - проигрывается звуковой файл лежащий в папке с прогой. И повторяется каждые 5 секунд, пока красные пикселы не пропадут. После этого мониторит дальше.
Вот такая не лёгкая (для меня) задачка. Я очень далёк от программирования. Но, думаю, посмотрев на код с выполнением такой задачи - может разберусь как это работает.
Помогите плиз с кодом. :-[
 

Fever

Скриптер
Сообщения
308
Репутация
112
argusv [?]
на наличие 3-х красных пикселей
как именно расположены эти 3 пикселя? ведь есть множество вариантов, как они могут располагаться, например:
Код:
ххх

хх
х

х
хх

хх
  х

 хх
х
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
первый вариант. по порядку. :-[
 

Fever

Скриптер
Сообщения
308
Репутация
112
тогда вот так:
Код:
Global $hColor = "0xFF0000" ; чистый оттенок красного (отредактировать на свое усмотрение)

_Check()

Func _Check()
    Local $aOther[2]
    $aSearch = _Loop() ; ждем нужный нам цвет в цикле

    $aOther[0] = PixelGetColor($aSearch[0]+1, $aSearch[1])
    $aOther[1] = PixelGetColor($aSearch[0]+2, $aSearch[1])  ; проверяем цвет 2 пикселя рядом

    If ($hColor == "0x" & Hex($aOther[0],6)) And ($aOther[0] == "0x" & Hex($aOther[1],6)) Then ; если цвета одинаковы
		Do
			SoundPlay("какой-то_файл.mp3", 1) ; проигрываем звук
			Sleep(5*1000) ; ждём 5 секунд
		Until "0x" & Hex(PixelGetColor($aSearch[0], $aSearch[1])) <> $hColor ; играем звук, пока цвет не станет отличным от заданного

		_Check()
    Else
        _Check() ; иначе все заново
    EndIf
EndFunc

Func _Loop()
    Local $iSearch

    Do
        $iSearch = PixelSearch(850, 180, 980, 670, $hColor)
        Sleep(10)
    Until IsArray($iSearch) ; ждем нужный нам цвет в цикле

    Return $iSearch
EndFunc
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
Что то не получилось. Когда находит пикселы выдаёт такое сообщение в SciTe:
Код:
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\Install\AutoIt\Alarm.au3"    
D:\Install\AutoIt\Alarm.au3 (11) : ==> Expected a "=" operator in assignment statement.:
$aOther[0] = PixelGetColor($aSearch[0]+1, $aSearch[1])
$aOther^ ERROR
>Exit code: 1    Time: 3.720
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
вроде ошибки нет теперь, но и звук не проигрывает. И при нажатии F7, чтобы екзешник создать - выдаёт ошибку:

Код:
Error: Error opening the destination file.


как это поправить чтобы заработало?
Вот код:
[box title=TitleBox]
Код:
;#include <Array.au3>

Global $hColor = "0xC11414" ; чистый оттенок красного (отредактировать на свое усмотрение)
Local $aPixel[2]

_Check()

Func _Check()
	
    $aSearch = _Loop() ; ждем нужный нам цвет в цикле
Local $aOther[2]
    $aOther[0] = PixelGetColor($aSearch[0]+1, $aSearch[1])
    $aOther[1] = PixelGetColor($aSearch[0]+2, $aSearch[1])  ; проверяем цвет 2 пикселя рядом

    If ($hColor == "0x" & Hex($aOther[0],6)) And ($aOther[0] == "0x" & Hex($aOther[1],6)) Then ; если цвета одинаковы
        Do
            SoundPlay("ecm.ogg", 1) ; проигрываем звук
            Sleep(5*1000) ; ждём 5 секунд
        Until "0x" & Hex(PixelGetColor($aSearch[0], $aSearch[1])) <> $hColor ; играем звук, пока цвет не станет отличным от заданного

        _Check()
    Else
        _Check() ; иначе все заново
    EndIf
EndFunc

Func _Loop()
    Local $iSearch

    Do
        $iSearch = PixelSearch(850, 180, 980, 670, $hColor)
        Sleep(10)
    Until IsArray($iSearch) ; ждем нужный нам цвет в цикле

    Return $iSearch
EndFunc
[/box]
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
Всёравно звук не проигрывает и екзешник не даёт создать. :(
Код:
SoundPlay("222.wav",1) ; проигрываем звук



Добавлено:
Сообщение автоматически объединено:

В чём же ошибка?
вот код который сейчас не работает почемуто..
Код:
Global $hColor = "0xC11414" ; цвет неписи

_Check()

Func _Check()
    Local $aOther[2]
    $aSearch = _Loop() ; ждем нужный нам цвет в цикле

    $aOther[0] = PixelGetColor($aSearch[0]+1, $aSearch[1])
    $aOther[1] = PixelGetColor($aSearch[0]+2, $aSearch[1])  ; проверяем цвет 2 пикселя рядом

    If ($hColor == "0x" & Hex($aOther[0],6)) And ($aOther[0] == "0x" & Hex($aOther[1],6)) Then ; если цвета одинаковы
        Do
            SoundPlay("222.wav", 1) ; проигрываем звук
            Sleep(5*1000) ; ждём 5 секунд
        Until "0x" & Hex(PixelGetColor($aSearch[0], $aSearch[1])) <> $hColor ; играем звук, пока цвет не станет отличным от заданного

        _Check()
    Else
        _Check() ; иначе все заново
    EndIf
EndFunc

Func _Loop()
    Local $iSearch

    Do
        $iSearch = PixelSearch(850, 180, 980, 670, $hColor)
        Sleep(10)
    Until IsArray($iSearch) ; ждем нужный нам цвет в цикле

    Return $iSearch
EndFunc


Наверное как всегда дело в какойто мелочи. :scratch:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
argusv,
У меня работает:
Код:
#NoTrayIcon
Opt('MustDeclareVars', 1)
;Opt('TrayMenuMode', 1)

Global $aSearch, $iColor = 0xF0F4F9 ;Свой цвет поставьте.
HotKeySet('{Esc}', '_Exit');Esc - выход
While 1
	$aSearch = PixelSearch(0, 200, 65, 230, $iColor);Свои координаты поставьте.
	If Not @error Then ;проверяем на совпадение цвета правее на 1 и на 2 пикселя.
		If PixelGetColor($aSearch[0] + 1, $aSearch[1]) = $iColor And _
				PixelGetColor($aSearch[0] + 2, $aSearch[1]) = $iColor Then
			SoundPlay(@ScriptDir & '\22.wav', 1);Файл 22.wav должен лежать в папке со скриптом.
		EndIf
	EndIf
	Sleep(500)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

PS
У функций PixelSearch() и PixelGetColor() есть еще опциональный параметр hwnd, с ним искать(проверять) цвет можно в конкретном окне.
 
Автор
A

argusv

Новичок
Сообщения
14
Репутация
0
Интересно, только звук всёравно не играет :'(
 
Верх