Что нового

сбивается бот

Александр_

[url=http://autoit-script.ru/index.php?topic=21393
Сообщения
62
Репутация
2
Доброго времени суток! Написал небольшого бота не загрузку и выходи из игры, но столкнулся с некоторыми неприятностями такими как:
1. Мышь не всегда попадает в нужные координаты. Такое ощущение, что координаты отсчитываются то относительные от края окна, то от края экрана... Непонятно как это исправить
2. Бот сбивается, т.е производит манипуляции в неподходящее время. Написал уже 2 проверки для распознания когда надо производить действия смысла особо не прибавилось.... В чем может быть загвоздка?
3. Т.к бот работает на 4 окна с одинаковым заголовком, то постоянно проверка на изменения цвета пикселя выполняется непонятно к цему привязана, а обращаться к окну по handle не получается возникают ошибки
4. Все проверки срабатывают, а результат не правильный...
Кому не трудно помогите довести бота до рабочего состояния. Заранее спасибо за внимание.
Для большего понимая
Код:
Func winButton ()

;AutoItSetOption("CaretCoordMode",0)
Opt("MouseCoordMode", 0)
Dim $wList[2]=[1,2];[2]=[[1,2],[2,2]]
Dim $bList[2]=[1,2];[2]=[[1,2],[2,2]]
 GUISetState(@SW_HIDE)
 GUISetState(@SW_DISABLE, $mainwindow)
	  $ex = False
	   $i=0
	   $j=1
       $k=0
	   $n=0
	 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
Do
			if $ex = True Then ExitLoop

			;MsgBox(0,"","начало фарма!")
			Sleep(500)
			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(1000)

			$i=$i+1
			;$n=$n+1
			if $i=2 Then $i=0
			; новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================
		      ;$n=8
			if  ProcessExists ( $ok )  Then  ; Проверьте, если процесс запущен Блокнот.
			Else
			MsgBox ( 64 ,  "" ,  " не работает" )
			EndIf
$Mem = _WinAPI_GetProcessMemoryInfo($ok)
;MsgBox(64,'',Round($Mem[9] / 1024))
$p = $Mem[9]
Sleep (500)
$Mem = _WinAPI_GetProcessMemoryInfo($ok)
   Sleep(500)
If $p < $Mem[9] Then
   Global $log = True
   ;MsgBox (64, "", "true")
 EndIf
	if $p >= $Mem[9] Then
	   Global $log = False
	  ; MsgBox(64,"","false")
	EndIf

Until $log = True
			;новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================
Sleep(5000)
;Opt("MouseCoordMode", 0)

Do
   WinActivate($wList[0])
   MouseMove(800,425,5)
   WinActivate($bList[0])
   MouseMove(800,425,5)
   WinActivate($wList[1])
   MouseMove(800,425,5)
   WinActivate($bList[1])
   MouseMove(800,425,5)
   			$checksum = PixelGetColor (710,430)
			Sleep(500)
			$chec = PixelGetColor (710,430)
			if $checksum = $chec Then
			   Global $l = True
			EndIf
			if $checksum <> $chec Then
			   Global $l = False
			EndIf

			$pin = 0
			$Mema = _WinAPI_GetProcessMemoryInfo($ok)
			;MsgBox(64,'',Round($Mem[9] / 1024))
			$pin = $Mema[9]
			Sleep (1000)
			$Mema = _WinAPI_GetProcessMemoryInfo($ok)
			;Sleep(1000)
If $pin < $Mema[9] Then
  Global $log = True
   ;Sleep(1000)
   ;MsgBox (64, "", "true")
 EndIf
if $pin >= $Mema[9] And $l = False Then
	Global    $log = False
	  ; MsgBox(64,"","false")
	EndIf

Until $log = False

			;новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================новый кусок=================


;		 WEnd

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


			Sleep(40000)
			WinActivate($wList[0])
			MouseMove(700,550,5)
			MouseClick("Left")
			MouseClick("Left")
			Sleep(5000)

			WinActivate($wList[1])
			MouseMove(700,550,5)
			MouseClick("Left")
			MouseClick("Left")


			$n=0

EndIf
			;EndIf


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


   EndFunc
 

dstasv

Новичок
Сообщения
45
Репутация
1
Ты бы написал старт последовательно всех клиентов, и после старта бери handle.
Научись четко управлять переключением клиентов и двиганьем в них мышкой.
Потом после активации Окна вставь паузы ибо задержки бывают при активации, отрисовки и прочего.
Двигать мышку а потом там кликать тоже не обязательно, можно сразу кликать по координатам.
 
Автор
А

Александр_

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