Что нового

Запуск нескольких функций

Nefakt

Новичок
Сообщения
74
Репутация
3
Всем привет.
Есть код
Код:
#include <ImageSearch.au3>
#include <GUIConstantsEx.au3>
HotKeySet("{F1}", "Start")
HotKeySet("{F2}", "Exitt")
$fYes = False

Global $X=0
Global $Y=0

$Form1 = GUICreate("Бот", 174, 116, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Бинты", 8, 8, 73, 33)
$Checkbox2 = GUICtrlCreateCheckbox("Аптечки", 8, 40, 65, 25)
$Checkbox3 = GUICtrlCreateCheckbox("Гранаты", 8, 64, 65, 25)
$Checkbox4 = GUICtrlCreateCheckbox("Чинить оружие", 8, 88, 57, 25)
$Button1 = GUICtrlCreateButton("Начать", 88, 32, 73, 33)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		 Case $Button1
            If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                $fYes = True
                bint()
            EndIf
            If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
                $fYes = True
                apteka()
            EndIf
            If GUICtrlRead($Checkbox3) = $GUI_CHECKED Then
                $fYes = True
                gren()
            EndIf
            If GUICtrlRead($Checkbox4) = $GUI_CHECKED Then
                $fYes = True
                weapons()
			 EndIf
			 start()
            If Not $fYes Then
			   MsgBox(16, 'Error', 'Вы ничего не выбрали')
            EndIf
    EndSwitch
WEnd

Func bint() ; Использовать бинты
	   While 1
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet =0x434B43 ;цвет, который нужен мне
    if $var =$cvet Then
       ; MsgBox(0,"","Пиксель найден!")
	   Sleep(1000)
	   Send("{4}")
	   Sleep(1000)
    EndIf
    Sleep(1000)
WEnd
EndFunc
Func apteka() ; Использовать аптеки
    	   While 1
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet =0x434B43 ;цвет, который нужен мне
    if $var =$cvet Then
       ; MsgBox(0,"","Пиксель найден!")
	   Sleep(1000)
	   Send("{5}")
    EndIf
    Sleep(1000)
WEnd
EndFunc
Func gren() ; Использовать гранаты
    While 1
$Search = start()
If $Search = 1 Then 
MouseClick('left', $X, $Y, 1)
Sleep (10000)
EndIf
WEnd 
EndFunc
Func Weapons() ; Чинить оружие
   While 1
$Search = _ImageSearch('img/Smart.bmp', 0, $X, $Y, 0)
If $Search = 1 Then 
MouseClick('left', $X, $Y, 1)
EndIf
WEnd
EndFunc


Func Start() ;Старт
   $Color1 =  0x981510
   $Dip_Col = 1
While 1
$Search = _ImageSearch('img/Smart.bmp', 0, $X, $Y, 0)
If $Search = 1 Then 
MouseClick('left', $X, $Y, 1, 1)
EndIf

Sleep(1000)
$Search = _ImageSearch('img/Lupoglaz.bmp', 0, $X, $Y, 0)
If $Search = 1 Then 
MouseClick('left', $X, $Y, 1)
EndIf

Sleep(1000)
$Rezult1 = PixelSearch( 1, 2, 1920, 1080, $Color1, $Dip_Col) ; ищет пиксель
If Not @error Then 
   MouseClick("left", $Rezult1[0], $Rezult1[1], 10, 1)
EndIf	

Sleep(1000)

$Search = _ImageSearch('img/846516.bmp', 0, $X, $Y, 0)
If $Search = 1 Then 
MouseClick('left', $X, $Y, 1)
EndIf
WEnd
EndFunc

While 1
sleep(100)
WEnd

 Func Exitt() ; Выход F2
	Exit 
 EndFunc
Работает нормально, но при выборе функции в CheckBox`е выполняет только функцию start() если она находиться в верхней части кода, а если поставить star() в нижнюю как в данный момент в коде который я выложил, то код будет выполнять любой CheckBox кроме неё. Проблема в том что start() основная функция а параметры которые находятся в checkBox`ах дополнительные.
Они по координатам проверяют ХП и если пиксель меняется то юзает бинт или аптеку.
Или если выбрано несколько checkbox`ов они выполняются но функция start() в действия не вступает.
И если как то можно сократить код от предложений не откажусь. Заранее спасибо.
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Nefakt [?]
если выбрано несколько checkbox`ов они выполняются
Не могут они выполняться, т.к. у вас каждая функция - это бесконечный цикл. Первый же отмеченный checkbox вызовет "свою" функцию, из которой не будет возврата. Вам нужно либо убирать в функциях циклы, либо создавать условия выхода из циклов. Вот попробуйте без циклов
Код:
#include <ImageSearch.au3>
#include <GUIConstantsEx.au3>

HotKeySet("{F1}", "Start")
HotKeySet("{F2}", "Exitt")
$fYes = False

Global $X=0
Global $Y=0

$Form1 = GUICreate("Бот", 174, 116, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Бинты", 8, 8, 73, 33)
$Checkbox2 = GUICtrlCreateCheckbox("Аптечки", 8, 40, 65, 25)
$Checkbox3 = GUICtrlCreateCheckbox("Гранаты", 8, 64, 65, 25)
$Checkbox4 = GUICtrlCreateCheckbox("Чинить оружие", 8, 88, 57, 25)
$Button1 = GUICtrlCreateButton("Начать", 88, 32, 73, 33)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
         Case $Button1
            If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                $fYes = True
                bint()
            EndIf
            If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
                $fYes = True
                apteka()
            EndIf
            If GUICtrlRead($Checkbox3) = $GUI_CHECKED Then
                $fYes = True
                gren()
            EndIf
            If GUICtrlRead($Checkbox4) = $GUI_CHECKED Then
                $fYes = True
                weapons()
            EndIf
            start()
            If Not $fYes Then
                MsgBox(16, 'Error', 'Вы ничего не выбрали')
            EndIf
    EndSwitch
WEnd

Func bint() ; Использовать бинты
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet =0x434B43 ;цвет, который нужен мне
    if $var =$cvet Then
        ; MsgBox(0,"","Пиксель найден!")
        Sleep(1000)
        Send("{4}")
        Sleep(1000)
    EndIf
    Sleep(1000)
EndFunc
Func apteka() ; Использовать аптеки
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet =0x434B43 ;цвет, который нужен мне
    if $var =$cvet Then
        ; MsgBox(0,"","Пиксель найден!")
        Sleep(1000)
        Send("{5}")
    EndIf
    Sleep(1000)
EndFunc
Func gren() ; Использовать гранаты
    $Search = start()
    If $Search = 1 Then
        MouseClick('left', $X, $Y, 1)
        Sleep (10000)
    EndIf
EndFunc
Func Weapons() ; Чинить оружие
    $Search = _ImageSearch('img/Smart.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1)
    EndIf
EndFunc

Func Start() ;Старт
    $Color1 =  0x981510
    $Dip_Col = 1
    $Search = _ImageSearch('img/Smart.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1, 1)
    EndIf

    Sleep(1000)
    $Search = _ImageSearch('img/Lupoglaz.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1)
    EndIf

    Sleep(1000)
    $Rezult1 = PixelSearch( 1, 2, 1920, 1080, $Color1, $Dip_Col) ; ищет пиксель
    If Not @error Then
       MouseClick("left", $Rezult1[0], $Rezult1[1], 10, 1)
    EndIf

    Sleep(1000)

    $Search = _ImageSearch('img/846516.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1)
    EndIf
EndFunc

Func Exitt() ; Выход F2
    Exit
EndFunc
 
Автор
Nefakt

Nefakt

Новичок
Сообщения
74
Репутация
3
Он весь код проходит полностью если без циклов и больше его не повторяет. И проверить я не могу работает checkbox или нет т.к. Он пропускает все, находит пиксель на мобе, бьет его и все больше не повторяет. А вы можете показать пример выхода из цикла?
Или как можно сделать что бы он проверял мое ХП периодически, но выполнял функцию start() и если ХП дошло до минимума он выходил из цикла start() использовал бинты или аптечки, в зависимости от того что выбрано в checkbox`е и возвращался назад на функцию start(). Буду благодарен за помощь.

Вроде разобрался с выходом но появилась другая проблема.
Вот часть кода с выходом
Код:
Func Start() ;Старт
   While 1
    $Color1 =  0x981510
    $Dip_Col = 1
    $Search = _ImageSearch('img/Smart.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1, 1)
    EndIf

    Sleep(1000)
    $Search = _ImageSearch('img/Lupoglaz.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1)
    EndIf

    Sleep(1000)
    $Rezult1 = PixelSearch( 1, 2, 1920, 1080, $Color1, $Dip_Col) ; ищет пиксель
    If Not @error Then
       MouseClick("left", $Rezult1[0], $Rezult1[1], 10, 1)
    EndIf

    Sleep(1000)

    $Search = _ImageSearch('img/846516.bmp', 0, $X, $Y, 0)
    If $Search = 1 Then
    MouseClick('left', $X, $Y, 1)
 EndIf
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet = 0x7A933C ;цвет, который нужен мне
    if $var = $cvet Then ContinueLoop
	   ExitLoop
 WEnd
 EndFunc
Он проверяет если цвет зеленый то начинает цикл с начало, но если цвет меняется то выходит из цикла но не использует бинты а просто останавливается. Вот код с циклом на бинты
Код:
Func bint() ; Использовать бинты
   While 1
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet =0x434B43 ;цвет, который нужен мне
    if $var = $cvet Then 
        ; MsgBox(0,"","Пиксель найден!")
        Sleep(1000)
        Send("{4}")
	 EndIf
    $var = PixelGetColor(91, 84) ; цвет пикселя на данный момент времени
    $cvet =0x434B43 ;цвет, который нужен мне
	if $var = $cvet Then ContinueLoop
	   ExitLoop
	   Wend
EndFunc
тут тоже если цвет серый то цикл повторяется, но если цвет меняется он выходит из цикла и идет дальше.
Но он выполняет только функцию start() как цвет меняется просто выходит из него и все останавливается, в чем может быть проблема?


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

InnI

Спасибо за помощь. Проблему решил поставив цикл на checkbox`е, который проверяет отмеченные checkbox`ы
Код:
Func test()
   While 1
               If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                $fYes = True
                bint()
            EndIf
            If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
                $fYes = True
                apteka()
            EndIf
            If GUICtrlRead($Checkbox3) = $GUI_CHECKED Then
                $fYes = True
                gren()
            EndIf
            If GUICtrlRead($Checkbox4) = $GUI_CHECKED Then
                $fYes = True
                weapons()
            EndIf
            start()
            If Not $fYes Then
                MsgBox(16, 'Error', 'Вы ничего не выбрали')
			 EndIf
			 WEnd
			 EndFunc
 
Верх