Что нового

[Автоматизация] Поиск пикселя и клик мышкой

be4hoctb

Новичок
Сообщения
38
Репутация
0
Сделал несколько функций которые выполняют клик мышкой при правильном цвете в нужных координатах. Но выполняется только первая функция остальные нет. Помогите разобраться в чем ошибка.
Код:
#RequireAdmin

Opt ( "MouseClickDelay", 1000)
HotKeySet("{F4}","_Start")
HotKeySet("{ESC}","_Stop")

Func _Stop()
	Exit
EndFunc



While 1
Sleep (350)
WEnd

Func _Start()
	PixelSearch(806, 959, 806, 959, 0x3CCBBB);Старт игры
	If Not @error Then
	MouseClick('Left', 806, 959, 1);OK

	EndIf
EndFunc

Func _Karta()
	PixelSearch(701, 150, 701, 150, 0x59453C);Выбор карты
	If Not @error Then
	MouseClick('Left', 701, 150, 1);OK
	
	EndIf
EndFunc

Func _Boy()
	PixelSearch(798, 936, 798, 936, 0xFBFEFA);Кнопка В бой
	If Not @error Then
	MouseClick('Left', 798, 936, 1);OK
	
	EndIf
EndFunc

Func _Kub()
	PixelSearch(819, 787, 819, 787, 0xFEFFFE);кидаем кубик
	If Not @error Then
	MouseClick('Left', 819, 787, 1);OK

	EndIf
EndFunc

Func _Fin()
	PixelSearch(766, 988, 766, 988, 0xFEFFFE);Трофеи
	If Not @error Then
	MouseClick('Left', 766, 988, 1);OK
	MouseClick('Left', 766, 988, 1)
	MouseClick('Left', 688, 602, 1)
	
	EndIf
EndFunc

Func _Uplvl()
	PixelSearch(920, 883, 920, 883, 0xFEFFFE);улутшаем уровень карты
	If Not @error Then
	MouseClick('Left', 920, 883, 1);OK
	
	EndIf
EndFunc

Func _Next()
	PixelSearch(830, 980, 830, 980, 0x51C242);Продолжить
	If Not @error Then
	MouseClick('Left', 830, 980, 1);OK
	EndIf
EndFunc
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Для того, чтобы функции выполнялись, они должны быть вызваны. А у вас есть вызов только функций Start и Stop.
Попробуйте сперва на листе бумаги нарисовать алгоритм работы программы. И будете знать, в какой момент какую функцию вызывать.
 
Автор
B

be4hoctb

Новичок
Сообщения
38
Репутация
0
Сделал так
Код:
While 1
_Start()
_Karta()
_Boy()
_Kub()
_Fin()
_Uplvl()
_Next()
WEnd

Функции выполняются поочередно, но пока одна функция не закончится то другая не начнется. Как сделать что бы функци поочередно вызывались даже если они не выполняются?
Например у меня выполняется функция
_Start()
затем функции
_Karta()
_Boy()
_Kub()
и они должны повторится от 3 до 5 раз в зависимости от того выполняется ли условие заложеное в функции
затем остальные 3 и опять по кругу


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

И я думал что после команды
Код:
While 1
Sleep (350)
WEnd

Функции будут вызываться сами поочередно
 

Whited

Знающий
Сообщения
79
Репутация
10
be4hoctb сказал(а):
Сделал так
Код:
While 1
_Start()
_Karta()
_Boy()
_Kub()
_Fin()
_Uplvl()
_Next()
WEnd

Функции выполняются поочередно, но пока одна функция не закончится то другая не начнется. Как сделать что бы функци поочередно вызывались даже если они не выполняются?
Например у меня выполняется функция
_Start()
затем функции
_Karta()
_Boy()
_Kub()
и они должны повторится от 3 до 5 раз в зависимости от того выполняется ли условие заложеное в функции
затем остальные 3 и опять по кругу


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

И я думал что после команды
Код:
While 1
Sleep (350)
WEnd

Функции будут вызываться сами поочередно




Слушай, мой тебе совет, ты почитай форум пока что, рановато тебе еще вопросы задавать, мульен раз тут всё обсасывалось, как найти пиксель и щелкнуть по нему и как всё это дело зациклить.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Не знаю, насколько правильно я понял смысл вашей программы, но могу предложить нечто подобное
Код:
#RequireAdmin

Opt ( "MouseClickDelay", 1000)
HotKeySet("{F4}","_Start")
HotKeySet("{ESC}","_Stop")
Global $Start = False

Func _Stop()
    Exit
EndFunc



While 1
	Sleep (350)

	While $Start
		PixelSearch(701, 150, 701, 150, 0x59453C);Выбор карты
		If Not @error Then
			MouseClick('Left', 701, 150, 1);OK
		EndIf
		PixelSearch(798, 936, 798, 936, 0xFBFEFA);Кнопка В бой
		If Not @error Then
			MouseClick('Left', 798, 936, 1);OK
		EndIf
		PixelSearch(819, 787, 819, 787, 0xFEFFFE);кидаем кубик
		If Not @error Then
			MouseClick('Left', 819, 787, 1);OK
		EndIf
		PixelSearch(766, 988, 766, 988, 0xFEFFFE);Трофеи
		If Not @error Then
			MouseClick('Left', 766, 988, 1);OK
			MouseClick('Left', 766, 988, 1)
			MouseClick('Left', 688, 602, 1)
		EndIf
		PixelSearch(920, 883, 920, 883, 0xFEFFFE);улутшаем уровень карты
		If Not @error Then
			MouseClick('Left', 920, 883, 1);OK
		EndIf
		PixelSearch(830, 980, 830, 980, 0x51C242);Продолжить
		If Not @error Then
			MouseClick('Left', 830, 980, 1);OK
		EndIf
	WEnd
WEnd
 
Func _Start()
	If $Start Then
		$Start = False
	Else
		PixelSearch(806, 959, 806, 959, 0x3CCBBB);Старт игры
		If Not @error Then
			MouseClick('Left', 806, 959, 1);OK
			$Start = True
		EndIf
	EndIf
EndFunc

Возможно, что стоит добавить ещё ContinueLoop в зависимости от смысла
Код:
If Not @error Then
	MouseClick('Left', 701, 150, 1);OK
	ContinueLoop
EndIf
 

Ksaan

Знающий
Сообщения
207
Репутация
15
be4hoctb сказал(а):
Функции выполняются поочередно, но пока одна функция не закончится то другая не начнется. Как сделать что бы функци поочередно вызывались даже если они не выполняются?
Например у меня выполняется функция
_Start()
затем функции
_Karta()
_Boy()
_Kub()
В справке про
Код:
If ....... EndIf

Все есть
Для примера
Код:
Func _Start()
    PixelSearch(806, 959, 806, 959, 0x3CCBBB);Старт игры
    If Not @error Then
	  MouseClick('Left', 806, 959, 1);OK
	Else
	  _Karta() ; Если не найден цвет то переход к ==> _Karta
    EndIf
EndFunc
 
Верх