Что нового

Программа игнорирует Select Case EndSelect

kolosov

Новичок
Сообщения
137
Репутация
0
Добрый вечер. Весь день, меня преследует она проблема, к которой я не могу найти решения.
Пытался искать ответ в Google но не нашёл.
Дело в том что, в блоке функции ,есть блок Select но по не понятным мне причинам, скрипт не как на него не обращает внимания.
Приложу код. Может кто свежим взглядом найдёт решение )
Код:
#Region    ************ Includes ************
;~ #include <ButtonConstants.au3>;~~~
;~   #include <EditConstants.au3>;~~~
#include <GUIConstantsEx.au3>
;~  #include <StaticConstants.au3>;~~~
;~  #include <WindowsConstants.au3>;~~~
;#include <Variables.txt>
#EndRegion ************ Includes ************
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Бот", 539, 293, -973, 548)
$Group1 = GUICtrlCreateGroup("Добыча", 8, 8, 161, 165)
$Gremlin1 = GUICtrlCreateCheckbox("1) ", 20, 28, 81, 13)
$Start = GUICtrlCreateButton("Начать", 332, 68, 75, 25)
$Setting = GUICtrlCreateButton("Настройка", 408, 68, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $Boobs [2] = [0,0]
Global $AtmosferaL[2]=[-8,-113]
Global $AtmosferaR[2]=[+67,-93]
Global $ButAgr [2]=[-85,-51]
Global $ButHit [2]=[+1,-51]
Global $ButSpo [2]=[+88,-51]
Global $SpoCol = 0x3F2AAA
Global $AgrCol = 0xD32906
Global $HitCol = 0x3D8506
Global $G1Spo = 1
Global $G1Hit = 1
Global $G1Agr = 1
Global $ButPovL [2]=[-111,-10]
Global $ButPovR [2]=[+106,+7]
Global $ButPovCol = 0x7F0000
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		 Case $Start
			Start()
		 Case $Setting
			Setting()
	EndSwitch
 WEnd

 Func Start()
	read()
	While 1
	If GUICtrlRead($Gremlin1) = 1 Then Gremlin1() ;Сюда заходит


WEnd
 EndFunc

 Func Setting()
	MsgBox(0, "Настрока", "Наведите мышку на букву 'О'в слове 'ПовтОрить' и нажмите 'Enter'")
	Sleep(1000)
	$pos = MouseGetPos()
	$Boobs[0] = $pos[0]
	$Boobs[1] = $pos[1]
	MsgBox(0, "Настрока", "Выполнено", 1)
	IniWrite("Setting.ini", "Windows - 7", "BoobsX", $Boobs[0])
	IniWrite("Setting.ini", "Windows - 7", "BoobsY", $Boobs[1])
 EndFunc

 Func Read()
	$Boobs[0] = IniRead("Setting.ini", "Windows - 7", "BoobsX", "0")
	$Boobs[1] = IniRead("Setting.ini", "Windows - 7", "BoobsY", "0")

 EndFunc
Func Gremlin1() ;Выполняет код до select
	 MsgBox(0,"",$G1Spo)
	  MsgBox(0,"",$G1Agr)
	   MsgBox(0,"",$G1Hit)
 Select ;Игнорирует
;Если вписать к примеру Msgbox после case то выдаёт на ошибку синтаксеса в Msgbox и последующий case
	 Case $G1Spo = 1
		 MsgBox(0,"","1")
	  PixelSearch($Boobs[0] + $AtmosferaL[0],$Boobs[1] + $AtmosferaL[1],$Boobs[0] + $AtmosferaR[0],$Boobs[1] + $AtmosferaR[1],$SpoCol,10)
	  If Not @error Then
		   MsgBox(0,"","1.1")
		  $G1Spo =0
		  $G1Agr = 1
		  $G1Hit = 1
		 MouseClick("Left",$Boobs[0]+$ButAgr[0],$Boobs[1]+$ButAgr[1])
	  EndIf
	 Case  $G1Agr = 1
		  MsgBox(0,"","2")
	  PixelSearch($Boobs[0] + $AtmosferaL[0],$Boobs[1] + $AtmosferaL[1],$Boobs[0] + $AtmosferaR[0],$Boobs[1] + $AtmosferaR[1],$AgrCol,10)
	  If Not @error Then
		   MsgBox(0,"","2.2")
		  $G1Spo = 1
		  $G1Agr = 0
		  $G1Hit = 1
		 MouseClick("Left",$Boobs[0]+$ButHit[0],$Boobs[1]+$ButHit[1])
	  EndIf
	 Case $G1Hit =1
		  MsgBox(0,"","3")
	  PixelSearch($Boobs[0] + $AtmosferaL[0],$Boobs[1] + $AtmosferaL[1],$Boobs[0] + $AtmosferaR[0],$Boobs[1] + $AtmosferaR[1],$HitCol,10)
	  If Not @error Then
		   MsgBox(0,"","3.3")
		  $G1Spo = 1
		  $G1Agr = 1
		  $G1Hit =0
		 MouseClick("Left",$Boobs[0]+$ButSpo[0],$Boobs[1]+$ButSpo[1])
	  EndIf
 EndSelect
 PixelSearch($Boobs[0] + $ButPovL[0],$Boobs[1] + $ButPovL[1],$Boobs[0] + $ButPovR[0],$Boobs[1] + $ButPovR[1],$ButPovCol,5);Вот от сюда опять работает 
   If Not @error Then
 		 MouseClick("Left",$Boobs[0],$Boobs[1])
		 MouseMove($Boobs[0],$Boobs[1]+50)
	EndIf
   EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
У Вас не определены объекты $Start и $Setting.
На каком основании Вы ожидаете от GUIGetMsg события по этим объектам.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
kolosov
В конструкции Select выполняется только первый найденный Case, для которого выполнено условие. Остальные игнорируются, даже если для них тоже выполняются условия.

Если анализировать данный нерабочий фрагмент кода, то у вас будет выполняться первый блок
Код:
Case $G1Spo = 1
до тех пор, пока в нём не отработает PixelSearch (т.е. пока не будет найден пиксель). Когда это случится, то будет отрабатывать второй блок. Но, как только во втором блоке будет найден пиксель, переменная $G1Spo станет равной единице и опять начнётся выполнение первого блока.
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
C2H5OH сказал(а):
У Вас не определены объекты $Start и $Setting.
На каком основании Вы ожидаете от GUIGetMsg события по этим объектам.
Определены) Я просто не стал вылаживать код с кнопками и целым окном, они не столь важны в этой ситуации.


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

InnI сказал(а):
kolosov
В конструкции Select выполняется только первый найденный Case, для которого выполнено условие. Остальные игнорируются, даже если для них тоже выполняются условия.

Если анализировать данный нерабочий фрагмент кода, то у вас будет выполняться первый блок
Код:
Case $G1Spo = 1
до тех пор, пока в нём не отработает PixelSearch (т.е. пока не будет найден пиксель). Когда это случится, то будет отрабатывать второй блок. Но, как только во втором блоке будет найден пиксель, переменная $G1Spo станет равной единице и опять начнётся выполнение первого блока.
Так код не заходит даже проверить первый блок
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
kolosov
они не столь важны в этой ситуации
Вы не правы. Мне, например, чтобы понять, как ваш код работает, пришлось его модифицировать, чтобы запустить. Конечно, я не дописывал GUI, но время потратил :mad:

Так код не заходит даже проверить первый блок
Как "так"? Вы вообще поняли, что я вам написал?
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
InnI сказал(а):
kolosov
они не столь важны в этой ситуации
Вы не правы. Мне, например, чтобы понять, как ваш код работает, пришлось его модифицировать, чтобы запустить. Конечно, я не дописывал GUI, но время потратил :mad:

Так код не заходит даже проверить первый блок
Как "так"? Вы вообще поняли, что я вам написал?
Я понял. Вы написали что он будет пытаться выполнить первый блок до тех пор пока не будет найден нужный пиксель и только потом перейдёт ко второму.
Но дело в том что код даже не заходит в Case чтоб посмотреть что ему искать (


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

хз что произошло. Но теперь он заходит в первый блок,но он смотрит только его. Хотя должен смотреть все 3 блока и ждать когда в каком-то из них появиться нужный цвет. И тот блок в котором он появиться ,код больше не должен его смотреть, пока в коком-то из двух оставшихся, цвет снова не будет найден.


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

Может кто-то подсказать , как решить это? :IL_AutoIt_1:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
kolosov
Хотя должен смотреть все 3 блока
Не должен. Ещё раз перечитайте:
InnI [?]
В конструкции Select выполняется только первый найденный Case, для которого выполнено условие. Остальные игнорируются, даже если для них тоже выполняются условия.
Остальные - игнорируются.
Если хотите проверять все условия, меняйте Select...Case на If...Then
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
InnI сказал(а):
kolosov
Хотя должен смотреть все 3 блока
Не должен. Ещё раз перечитайте:
InnI [?]
В конструкции Select выполняется только первый найденный Case, для которого выполнено условие. Остальные игнорируются, даже если для них тоже выполняются условия.
Остальные - игнорируются.
Если хотите проверять все условия, меняйте Select...Case на If...Then

Спасибо. Всё заработало как нужно.
 
Верх