Что нового

в func не корректно работает if.подскажите плиз в чём ошибка.

434996232

Новичок
Сообщения
4
Репутация
0
Что именно меня напрягает - не корректно работает только функция "ch_cont" :stars:
при старте функции "ch_cont" он вне зависимости от пикселя, выполняет if *** then
конкретна та функция:
Код:
Func  ch_cont ()		;проверка контейнера
	  PixelSearch (580,352,580,352,0xfffbff) 
	  if Not @error Then
		 Send ("{Enter}")
		 return 0
   Else
	  sleep (20000)
	  Return 1
	  EndIf
EndFunc

весь скрипт с аналогичными функциями, которые исправно работают:
Код:
Opt ('MustDeclareVars',     1)
#include <GUIConstants.au3>

Local $gui      = GUICreate ("Process", 300, 50)
Local $process    = GUICtrlCreateLabel ("", 5, 5, 200, 25)
GUICtrlCreateLabel ("для выхода нажми Home", 5, 35, 200, 25)
GUISetState (@SW_SHOW, $gui)
HotKeySet ("{Home}","_Exit")

;раздел функций

Func ruda ()		;перекладывание руды
	  PixelSearch (1103,801,1103,801,0x000000)
   if  Not @error Then
	  GUICtrlSetData ($process,"нашёл, переложил")
	  MouseClickDrag ("left",1075,783,1075,600)
	  WinActivate ("Process")	  
	  GUICtrlSetData ($process,"жду")
	  return 1
   Else
	  GUICtrlSetData ($process,"жду")
	  WinActivate ("Process")
	  sleep (100)
EndIf
EndFunc

Func  ch_cont ()		;<=   вот тут и сбоит
	  PixelSearch (580,352,580,352,0xfffbff) 
	  if Not @error Then
		 Send ("{Enter}")
		 return 0
   Else
	  sleep (20000)
	  Return 1
	  EndIf
EndFunc	

func _Exit()		;экстренный выход =)
   Exit
EndFunc

;конец раздела функций

;тело
while 1
ruda ()
ch_cont ()
Sleep (200)
WEnd
GUICtrlSetData ($process,"контейнер полон, перезапили")
;конец тела
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
434996232
А так не проще?
Код:
If PixelGetColor(580, 352) = 0xFFFBFF Then
	ConsoleWrite('Yes' & @LF)
Else
	ConsoleWrite('No' & @LF)
EndIf
 
Автор
4

434996232

Новичок
Сообщения
4
Репутация
0
Да я понимаю что проще)
Только PixelGetColor - при работе с игровым клиентом достаточно часто сбоит, по этой причине приходится использовать PixelSearch


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


похоже IF какимто образом конфликтует с командой NOT убрал и всё работает...
вот он в итоге:
Код:
Func  ch_cont () ;проверка контейнера
    PixelSearch (580,352,580,352,0xFFFBFF)
	If @error Then
	   GUICtrlSetData ($process,"ещё есть место")
	   sleep(10000)
	   return 1
	Else
	   GUICtrlSetData ($process,"конт полон")
	   MouseClick ("left",580,352)
	   send("{enter}")
	   Sleep(10000)
	   _Exit ()
	EndIf
 EndFunc
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Пробуй так
Код:
Func  ch_cont () ;проверка контейнера
    If IsArray( PixelSearch (580,352,580,352,0xFFFBFF) ) Then
       GUICtrlSetData ($process,"ещё есть место")
       sleep(10000)
       return 1
    Else
       GUICtrlSetData ($process,"конт полон")
       Sleep(10000)
       _Exit ()
    EndIf
 EndFunc
 
Автор
4

434996232

Новичок
Сообщения
4
Репутация
0
2 rusreg79
спасибо) я как-то не додумался до такого решения)
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
похоже IF какимто образом конфликтует с командой NOT убрал и всё работает...
У меня как то была проблема похожая после обфускации кода, попробуй ради интереса еще такой вариант, сработает ли.
Код:
Func  ch_cont () ;проверка контейнера
    PixelSearch (580,352,580,352,0xFFFBFF)
    If @error <> 1 Then
       GUICtrlSetData ($process,"ещё есть место")
       sleep(10000)
       return 1
    Else
       GUICtrlSetData ($process,"конт полон")
       MouseClick ("left",580,352)
       send("{enter}")
       Sleep(10000)
       _Exit ()
    EndIf
 EndFunc
 
Автор
4

434996232

Новичок
Сообщения
4
Репутация
0
2 rusreg79
в этом варианте он все время выдает что контейнер пуст:smile:
делал бы он его безразмерным, было бы вообще замечательно :laugh:
 
Верх