Что нового

Зациклить выполнение функции

n0kk

Новичок
Сообщения
22
Репутация
0
Помогите разобраться, необходимо зациклить выполнение функции на 500 раз, вроде бы все правильно написал но почему-то функция не выполняется столько раз сколько нужно

Код:
Func _click()
MouseMove (1169, 326, 50)
$ColorPx = PixelGetColor (1169, 326)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 326)
		MouseClick ("left", 1245, 846)
    Else
        Exit
	 EndIf

MouseMove (1169, 338)
	 $ColorPx = PixelGetColor (1169, 338)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 338)
		MouseClick ("left", 1245, 846)
    Else
        Exit
	 EndIf

	 MouseMove (1169, 349)
	 $ColorPx = PixelGetColor (1169, 349)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 349)
		MouseClick ("left", 1245, 846)
    Else
        Exit
	 EndIf

MouseMove (1169, 363)
	 $ColorPx = PixelGetColor (1169, 363)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 363)
		MouseClick ("left", 1245, 846)
    Else
        Exit
	 EndIf
  EndFunc

  $i = 0
While $i <= 500
    _click()
    $i += 1
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,401
Репутация
596
Код:
Do
Until $i <= 500



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

Либо
Код:
For $i = 1 To 500
;функция
Next
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Не знаю в чем дело и с тем и с тем вариантом не работает, писал так
В этом случае срабатывает один раз:
Код:
$i = 0
Do
   _click()
Until $i <= 500


В этом случае два:
Код:
$i = 0
For $i = 1 To 500
 _click()
Next
 

Tempo

Скриптер
Сообщения
603
Репутация
197
n0kk

У вас в самой функции есть условия для выхода может в них проблема попробуйте перед ними поставить уведомляющее сообщение что бы проверить


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

n0kk сказал(а):
Код:
$i = 0
Do
   _click()
Until $i <= 500

В этом варианте вы забыли

Код:
$i += 1


И так наверно будет лучше

Код:
Do
   _click()
   $i += 1
Until $i = 500
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Исправил, но к сожалению все так же
 

Tempo

Скриптер
Сообщения
603
Репутация
197
n0kk
Что вы именно исправили у вас в функции если пиксель не соответствует определенному цвету выполняется выход из скрипта вы это исправили? Или хотя бы проверили не в этом ли причина?
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Tempo сказал(а):
n0kk

У вас в самой функции есть условия для выхода может в них проблема попробуйте перед ними поставить уведомляющее сообщение что бы проверить
Перед самим условием?
 

Tempo

Скриптер
Сообщения
603
Репутация
197
Вот ваша функция добавил сообщения там где выход

Код:
Func _click()
	MouseMove(1169, 326, 50)
	$ColorPx = PixelGetColor(1169, 326)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 326)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 338)
	$ColorPx = PixelGetColor(1169, 338)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 338)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 349)
	$ColorPx = PixelGetColor(1169, 349)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 349)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 363)
	$ColorPx = PixelGetColor(1169, 363)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 363)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf
EndFunc
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Сообщения не выводятся, все так же происходит
 

Tempo

Скриптер
Сообщения
603
Репутация
197
А может с паузами в 25 секунд вы не замечаете как он работает? :rofl: В трее висит?

Код:
For $i = 0 To 500
	_Click()
Next

Func _Click()
	MouseMove(1169, 326, 50)
	$ColorPx = PixelGetColor(1169, 326)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 326)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 338)
	$ColorPx = PixelGetColor(1169, 338)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 338)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 349)
	$ColorPx = PixelGetColor(1169, 349)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 349)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 363)
	$ColorPx = PixelGetColor(1169, 363)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 363)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(0, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf
EndFunc
 

Tempo

Скриптер
Сообщения
603
Репутация
197
Вывел счетчик что бы было видно работает или нет

Код:
SplashTextOn("Test Script", "", 100, 50)
For $i = 0 To 500
	ControlSetText("Test Script", "", "Static1", $i)
	_Click()
Next

Func _Click()
	MouseMove(1169, 326, 50)
	$ColorPx = PixelGetColor(1169, 326)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 326)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(262144, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 338)
	$ColorPx = PixelGetColor(1169, 338)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 338)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(262144, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 349)
	$ColorPx = PixelGetColor(1169, 349)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 349)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(262144, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf

	MouseMove(1169, 363)
	$ColorPx = PixelGetColor(1169, 363)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 363)
		MouseClick("left", 1245, 846)
	Else
		MsgBox(262144, "", "Выход по условию") ;Добавил сообщение
		Exit ;тут выход из скрипта может быть в этом причина?
	EndIf
EndFunc
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
С 0-2 посчитал а потом выдал выход по условию
 

Tempo

Скриптер
Сообщения
603
Репутация
197
n0kk сказал(а):
С 0-2 посчитал а потом выдал выход по условию

Ну вот значит проблема в вашей функции меняйте в ней выход на Return или на что вам нужно это же ваша функция
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Ну если функцию возвращать ошибка будет
 

Tempo

Скриптер
Сообщения
603
Репутация
197
n0kk сказал(а):
Ну если функцию возвращать ошибка будет

Вы о чем? Return остановит функцию в указанном месте и после этого счетчик запустит её заново. Возвращать она будет по умолчанию 0 (у вас не тот случай что нужно возвращаемое значение для вас оно ничего не значит) и все какие ошибки?

Справка вам в помощь Func...Return...EndFunc
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Сделал так, но все тоже самое, один раз выполняется и все
Код:
Func _click()
MouseMove (1169, 326, 50)
$ColorPx = PixelGetColor (1169, 326)

If $ColorPx = 16777215 Then

   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 326)
		MouseClick ("left", 1245, 846)
	 Else
		MsgBox(0, "", "Выход по условию")
        Return _click()
	 EndIf

MouseMove (1169, 338)
	 $ColorPx = PixelGetColor (1169, 338)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 338)
		MouseClick ("left", 1245, 846)
	 Else
		MsgBox(0, "", "Выход по условию")
        Return _click()
	 EndIf

	 MouseMove (1169, 349)
	 $ColorPx = PixelGetColor (1169, 349)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 349)
		MouseClick ("left", 1245, 846)
	 Else
		MsgBox(0, "", "Выход по условию")
        Return _click()
	 EndIf

MouseMove (1169, 363)
	 $ColorPx = PixelGetColor (1169, 363)
If $ColorPx = 16777215 Then
   MouseClick ("left", 1245, 846)
    ElseIf $ColorPx = 3708912 Then
	   Sleep(25000)
        MouseClick ("left", 1169, 363)
		MouseClick ("left", 1245, 846)
	 Else
		MsgBox(0, "", "Выход по условию")
        Return _click()
	 EndIf
  EndFunc

$i = 0
Do
_click()
   $i+=1
Until $i <= 50
 

Tempo

Скриптер
Сообщения
603
Репутация
197
n0kk
Зачем? Это уже какое-то подобие рекурсии зачем оно вам?

Код:
Return _click()


Попробуйте почитать справку

Код:
SplashTextOn("Test Script", "", 100, 50)
For $i = 0 To 500
	ControlSetText("Test Script", "", "Static1", $i)
	_Click()
Next

Func _Click()
	MouseMove(1169, 326, 50)
	$ColorPx = PixelGetColor(1169, 326)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 326)
		MouseClick("left", 1245, 846)
	Else
		Return
	EndIf

	MouseMove(1169, 338)
	$ColorPx = PixelGetColor(1169, 338)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 338)
		MouseClick("left", 1245, 846)
	Else
		Return
	EndIf

	MouseMove(1169, 349)
	$ColorPx = PixelGetColor(1169, 349)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 349)
		MouseClick("left", 1245, 846)
	Else
		Return
	EndIf

	MouseMove(1169, 363)
	$ColorPx = PixelGetColor(1169, 363)
	If $ColorPx = 16777215 Then
		MouseClick("left", 1245, 846)
	ElseIf $ColorPx = 3708912 Then
		Sleep(25000)
		MouseClick("left", 1169, 363)
		MouseClick("left", 1245, 846)
	Else
		Return
	EndIf
EndFunc
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
Выполняется один раз если написать просто Return

Попробовал заменить на
Код:
$i = 0
While $i <= 50
    _click()
    $i += 1
WEnd

Два раза выполняется а потом много раз пишет "Выход по условию"
 

Tempo

Скриптер
Сообщения
603
Репутация
197
Вы хоть код тот что выше пробовали?
 
Верх