Что нового

проверка множества условий

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
Доброго времени суток! Столкнулся с такой проблемой при написании бота. Для того что бы бот ориентировался загружается игра или нет написал 4 проверки:
- проверка оперативной памяти т.е при загрузке кол-во памяти увеличивается
- проверка на цвет пикселя
- проверка по таймеру
- действия повторяются в цикле ввожу счетчик
в итоге, по факту проверка по счетчику не срабатывает и цикл зацикливается, "()" не помогают решить проблему
если убираю проверки бот сбивается. В чем может быть проблема????
:IL_AutoIt_1:
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
OffTopic:
Вы немножко форумом ошиблись, вам нужно к экстрасенсам :smile:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
() - такие скобки конечно же не решают проблемы. Все давно уже пользуются такими: (.)(.)
 
Автор
А

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
:smile: действительно было бы лучше использовать (.)(.) только где?
Код:
Sleep(500)
			WinActivate($bList[0])
			Sleep(1000)
			$chec = PixelGetColor (710,430)
			if $checksum = $chec Then
			   Global $l = 1
			EndIf
			if $checksum <> $chec Then
			   Global $l = 0
			EndIf

			$pin = 0
			$Mema = _WinAPI_GetProcessMemoryInfo($ok)
			$pin = $Mema[9]
			Sleep (1000)
			$Mema = _WinAPI_GetProcessMemoryInfo($ok)
			Local $fDiff  =  TimerDiff($htime)
If $pin < $Mema[9] And $l = 1 and $fDiff < 20000 Then
  Global $log = 1
    EndIf
if $pin >= $Mema[9] And $l = False And $fDiff > 20000 Then
	Global    $log = 0
	    EndIf
 

ildar

Осваивающий
Сообщения
252
Репутация
29
что это?(ниже в комментариях)
Код:
$pin = 0
            $Mema = _WinAPI_GetProcessMemoryInfo($ok)
            $pin = $Mema[9]  ; <------------- тут переменной $pin присваиваешь значение $Mema[9]
            Sleep (1000)
            $Mema = _WinAPI_GetProcessMemoryInfo($ok)
            Local $fDiff  =  TimerDiff($htime)
; ------------------------------------------ а ниже их сравниваешь
If $pin < $Mema[9] And $l = 1 and $fDiff < 20000 Then
  Global $log = 1
    EndIf
if $pin >= $Mema[9] And $l = False And $fDiff > 20000 Then
    Global    $log = 0
        EndIf
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ildar
а ниже их сравниваешь
Всё правильно. Он функцию повторно вызывает.

Александр_
Код:
If $pin < $Mema[9] And $l = 1 And $fDiff < 20000 Then
  Global $log = 1
Else
  Global $log = 0
EndIf
 
Автор
А

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
Изменил код, но проблема осталась. вот собственно и сам код
Код:
Func winButton ()
Opt("MouseCoordMode", 0)
Opt("PixelCoordMode", 0)
Dim $wList[2]=[1,2]
Dim $bList[2]=[1,2]
 GUISetState(@SW_HIDE)
 GUISetState(@SW_DISABLE, $mainwindow)
	   $k=0
	   $m=0
	   ToolTip( $m &"-й цикл", 0, 100)
	 Do
	   Select
        Case $w = True
			$wList[0]= WinGetHandle(WinGetTitle("[ACTIVE]")) ;$aList[$i][1]
			MsgBox(4096,"warface",$wList[0])
			$w = False
			$k=$k+1
		 Case $ww = True
			$wList[1]= WinGetHandle(WinGetTitle("[ACTIVE]")) ;$aList[$i][1]
			MsgBox(4096,"warface",$wList[1])
			$ww = False
			$k=$k+1
		Case $b= True
		  	$bList[0]= WinGetHandle(WinGetTitle("[ACTIVE]"));$aList[$i][1]
			MsgBox(4096,"bleckwood", $bList[0])
			$b = False
			$k=$k+1
		Case $bb= True
		  	$bList[1]= WinGetHandle(WinGetTitle("[ACTIVE]"));$aList[$i][1]
			MsgBox(4096,"bleckwood", $bList[1])
			$bb = False
			$k=$k+1
		 EndSelect
		 if $k=4 Then
		 $log = 1
		 WinActivate($bList[0])
		 Sleep(500)
		 $checksum = PixelGetColor (710,430)
		 $Mem = _WinAPI_GetProcessMemoryInfo($ok)
		 $t=0
Do

			;ToolTip( $t, 0, 200)
			Sleep(500)
			WinActivate($wList[0])
			Sleep(500)
			MouseMove(700,425,5)
			Sleep(500)
			MouseClick("left")

			WinActivate($bList[0])
			Sleep(500)
			MouseMove(700,425,5)
			Sleep(500)
			MouseClick("Left")


			WinActivate($wList[1])
			Sleep(500)
			MouseMove(700,425,5)
			Sleep(500)
			MouseClick("left")


			WinActivate($bList[1])
			Sleep(500)
			MouseMove(700,425,5)
			Sleep(500)
			MouseClick("Left")
			$t=$t+1


$p = $Mem[9]
Sleep (1000)
WinActivate($bList[0])
Sleep(500)
$chec = PixelGetColor (710,430)
$Mem = _WinAPI_GetProcessMemoryInfo($ok)

If ($p <= $Mem[9])  And ($checksum = $chec)  Then ;($p <= $Mem[9])  And
   $log = 1
   ;ToolTip("log = " & $log, 0, 100)
 endIf
if ($p > $Mem[9]) And ($checksum <> $chec)  And ($t >= 5)  Then ;($p > $Mem[9]) And And ($t > 5) не робит проверка

	   $log = 0
	   ;ToolTip("log = " & $log, 0, 100)

EndIf

Until $log = 0
$log = 1
$t=0
			;новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================
Sleep(5500)
WinActivate($bList[0])
Sleep(500)
$checksum = PixelGetColor (710,430)
Local $htime = TimerInit()
$lo = 0
$Mema = _WinAPI_GetProcessMemoryInfo($ok)
$pin = $Mema[9]
Do
			WinActivate($bList[0])
			Sleep(1000)
			$chec = PixelGetColor (710,430)
			if $checksum == $chec Then
			    $l = 1
			EndIf
			if $checksum <> $chec Then
			    $l = 0
			EndIf

			Local $fDiff  =  TimerDiff($htime)

			;Sleep (1000)
			$Mema = _WinAPI_GetProcessMemoryInfo($ok)
If ($pin < $Mema[9]) And ($l = 0) and ($fDiff > 20000) Then
  $lo = 1
EndIf
if ($pin > $Mema[9]) And ($l = 1) And ($fDiff < 20000) Then
  $lo = 0
EndIf
; на всякий случай________на всякий случай________на всякий случай________на всякий случай________на всякий случай________на всякий случай________на всякий случай________

if   $fDiff > 80000  Then
   WinActivate($wList[0])
			MouseMove(700,425,5)
			MouseClick("left")
			Sleep(500)
			WinActivate($bList[0])
			MouseMove(700,425,5)
			MouseClick("Left")
			Sleep(500)

			WinActivate($wList[1])
			MouseMove(700,425,5)
			MouseClick("left")
			Sleep(500)
			WinActivate($bList[1])
			MouseMove(700,425,5)
			MouseClick("Left")
			Sleep (30000)

			MouseMove(700,425,5)
			MouseClick("left")
			Sleep(500)
			WinActivate($bList[0])
			MouseMove(700,425,5)
			MouseClick("Left")
			Sleep(500)

			WinActivate($wList[1])
			MouseMove(700,425,5)
			MouseClick("left")
			Sleep(500)
			WinActivate($bList[1])
			MouseMove(700,425,5)
			MouseClick("Left")
			$lo = 1
		 EndIf


Until $lo = 1
$lo = 0
			;новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================


;		 WEnd

			WinActivate($bList[0])
			Sleep(100)
			Send("{ESC}")
			MouseMove(400,290,5)
			Sleep(500)
			MouseClick("Left")
			MouseClick("Left")
			MouseMove(350,350,5)
			Sleep(500)
			MouseClick("Left")
			MouseClick("Left")
			MouseClick("Left")
			Sleep(500)

			WinActivate($wList[0])
			Sleep(100)
			MouseMove(400,290,5)
			WinActivate($wList[1])
			Sleep(100)
			MouseMove(400,290,5)

			WinActivate($bList[1])
			Sleep(100)
			Send("{ESC}")
			MouseMove(400,290,5)
			Sleep(500)
			MouseClick("Left")
			MouseClick("Left")
			MouseMove(350,350,5)
			Sleep(500)
			MouseClick("Left")
			MouseClick("Left")

			Sleep(1000)
			WinActivate($wList[0])
			Sleep(500)

			Sleep(30000)

			;WinActivate($wList[0])
			;Sleep(500)
			$checksumm = PixelGetColor (710,600)
			;Sleep(5000)
			;MouseMove(720,600,5)

		Do

		    ;WinActivate($wList[0])
			;Sleep(500)
			$checs = PixelGetColor (710,600)
			if $checksumm = $checs Then
			    $li = 1
			EndIf
			if $checksumm <> $checs Then
			    $li = 0
			EndIf
		 Until $li = 0

			;Sleep(5000)
			WinActivate($wList[0])
			Sleep(500)
			MouseMove(710,600,5)
			MouseClick("Left")
			MouseClick("Left")


			WinActivate($wList[1])
			Sleep(500)
			MouseMove(710,600,5)
			MouseClick("Left")
			MouseClick("Left")
			$m=$m+1
			ToolTip( $m &"-й цикл", 0, 100)
	EndIf

  Until _IsPressed ("11")= 1
      GUISetState(@SW_SHOW)
	  GUISetState(@SW_ENABLE, $mainwindow)


   EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Александр_
проблема осталась
Ваша проблема в том, что СОСТАВНОЕ условие вы разбираете, как ПРОСТОЕ.
Поясняю. Вот у вас условия
Код:
If ($pin < $Mema[9]) And ($l = 0) and ($fDiff > 20000) Then $lo = 1
if ($pin > $Mema[9]) And ($l = 1) And ($fDiff < 20000) Then $lo = 0


А что будет при следующих условиях?
Код:
If ($pin > $Mema[9]) And ($l = 0) And ($fDiff > 20000) Then $lo = "?"
If ($pin < $Mema[9]) And ($l = 1) And ($fDiff > 20000) Then $lo = "?"
If ($pin < $Mema[9]) And ($l = 0) And ($fDiff < 20000) Then $lo = "?"
; и т.д.


Другими словами, вам нужно придумать такое составное условие, при котором $lo = 1, а всё остальное (т.е. Else) будет $lo = 0. Как раз пример этого я вам и приводил.
 
Автор
А

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
Спасибо большое!!!! понял в какую сторону смотреть и с чем разбираться! :IL_AutoIt_1:
 
Верх