Что нового

завершение главного цикла без выполнения вложеных

DoubleTrouble

Новичок
Сообщения
15
Репутация
0
Сегодня при написании бота возникла проблема, есть 1 цикл(ОБЩИЙ) в него вложено 8 других циклов которые выполняются при некоторых условиях, как сделать так чтобы если нужное мне условие не выполнилось то завершился 1 - общий цикл?
вот мой код, в коде я отметил при каком условии нужно завершить общий цикл
Код:
HotKeySet("{ESC}", "terminate")
While 1; на тот случай, если мы собираемся так играть вечно
     MouseClick("left", 364, 149, 1, 0)
	 Sleep(100)
While 1
	 PixelSearch ( 620, 166, 711, 200, 0x32392D )
	 if @error <> 1 Then ExitLoop
	 if @error <> 0 Then MouseClick("left", 364, 149, 1, 0)
WEnd
While 1
PixelSearch (359, 155, 359, 155, 0x272B14)
If @error <> 1 Then MouseClick (359, 155, 1, 0)
Sleep(30)
PixelSearch ( 473, 183, 473, 183, 0x444C41 )
If @error <> 1 Then ExitLoop
If @error <> 0 Then MouseClick("left", 575, 146, 1, 0)
Sleep(30)
PixelSearch ( 739, 184, 739, 184, 0x191D17 )
If @error <> 1 Then ExitLoop
If @error <> 0 Then MouseClick("left", 575, 146, 1, 0)
WEnd
$point_pixel = PixelSearch ( 441, 164, 507, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
$point_pixel = PixelSearch ( 440, 281, 506, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
$point_pixel = PixelSearch ( 441, 164, 507, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
$point_pixel = PixelSearch ( 440, 281, 506, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
PixelSearch ( 920, 478, 920, 478, 0x742800 )
if @error <> 1 Then MouseClick("left", 897, 140, 1, 0) - ЕСЛИ ЭТО НЕ ВЫПОЛНИТСЯ ТО НУЖНО ЗАВЕРШИТЬ 1 - ОБЩИЙ ЦИКЛ, А ВЛОЖЕНЫЕ ЧТОБ НЕ ТРОГАЛ
While 1
PixelSearch (870, 158, 870, 158, 0x644327)
If @error <> 1 Then MouseClick ("left", 1100, 125, 1, 0) - ЕСЛИ ЭТО ВЫПОЛНИТСЯ ТО НУЖНО ПРОДОЛЖАТЬ ОБЩИЙ ЦИКЛ ВПЛОТЬ ДО ЕГО САМОСТОЯТЕЛЬНОГО ЗАВЕРШЕНИЯ
If @error <> 0 Then ExitLoop - В ЭТОМ СЛУЧАЕ НАМ НУЖНО ЗАВЕРШИТЬ ОБЩИЙ ЦИКЛ А ВЛОЖЕНЫЕ ЧТОБ НЕ ТРОГАЛ(ЦИКЛ БЕСКОНЕЧНО ПОВТОРЯЕТСЯ)
Sleep(3000)
MouseClick("left", 254, 358, 1, 0) ; нажтмаем на общую кнопку магазина
Sleep(3000)
MouseClick("left", 421, 252, 1, 0) ; нажимаем на кнопку рынка
Sleep(10000)
MouseClick("left", 347, 601, 1, 0) ; нажимаем на кнопку продажи
WEnd
While 1
Sleep(150)
$point_pixel = PixelSearch ( 428, 159, 626, 416, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
If @Error <> 0 Then ExitLoop
Sleep(100)
MouseClick("left", 695, 365, 1, 0)
sleep(10)
Send ("{RIGHT}")
sleep(10)
Send ("{RIGHT}")
sleep(10)
Send ("{RIGHT}")
Send ("{BS}")
sleep(10)
Send ("1")
Sleep(10)
Send ("3")
sleep(10)
Send ("0")
sleep(10)
Send ("0")
Sleep(150)
MouseClick("left", 614, 408, 1, 0) ; нажимаем кнопку ОК
Sleep(100)
WEnd
While 1
PixelSearch ( 638, 466, 638, 466, 0x2C2A1A)
If @error <> 1 Then ExitLoop
Sleep(3000)
MouseClick("left", 1037, 132, 1, 0)
Sleep(3000)
MouseClick("left", 254, 358, 1, 0)
Sleep(3000)
MouseClick("left", 420, 220, 1, 0)
Sleep(3000)
MouseClick("left", 831, 140, 1, 0)
WEnd
While 1 ; продаем хлам в магазине
Sleep(3000)
PixelSearch(822, 369, 822, 369, 0x1F2216)
If @error <> 1 Then ExitLoop
MouseClickDrag("left", 822,369, 660, 374) ; перетаскиваем предмет
Sleep(3000)
MouseClick("left", 669, 353, 1, 0) ; жмем ОК
Sleep(3000)
MouseClick("left", 768, 359, 1, 0) ; Выбираем продать все
Sleep(3000)
MouseClick("left", 606, 409, 1, 0) ; жмем ок
Sleep(2000)
MouseClick("left", 831, 140, 1, 0)
WEnd
While 1
Sleep(3000)
PixelSearch(822, 369, 822, 369, 0x1F2216)
If @error <> 1 Then ExitLoop
MouseClickDrag("left", 822,369, 660, 374) ; перетаскиваем предмет
Sleep(3000)
MouseClick("left", 669, 353, 1, 0) ; жмем ОК
Sleep(3000)
MouseClick("left", 768, 359, 1, 0) ; Выбираем продать все
Sleep(3000)
MouseClick("left", 606, 409, 1, 0) ; жмем ок
Sleep(2000)
MouseClick("left", 831, 140, 1, 0)
WEnd
While 1
Sleep(3000)
PixelSearch(822, 369, 822, 369, 0x1F2216)
If @error <> 1 Then ExitLoop
MouseClickDrag("left", 822,369, 660, 374) ; перетаскиваем предмет
Sleep(3000)
MouseClick("left", 669, 353, 1, 0) ; жмем ОК
Sleep(3000)
MouseClick("left", 768, 359, 1, 0) ; Выбираем продать все
Sleep(3000)
MouseClick("left", 606, 409, 1, 0) ; жмем ок
WEnd
Sleep(150)
$color_green = 1514002
While 1
        If PixelGetColor( 364, 149 ) <> 1514002 Then ExitLoop ; если кнопка НЕ серая, то выходим из этого цикла и жмем другую кнопку
WEnd
WEnd
Func Terminate()
    Exit 0
EndFunc

помогите пожалуйста, желательно покажите на моём примере что и куда писать:smile:
вот второй код для сравнения в котором всё работает так как мне нужно(но не совсем так как мне нужно, поэтому хочу дописать 1й вариант)
Код:
HotKeySet("{ESC}", "terminate")
While 1; на тот случай, если мы собираемся так играть вечно
     MouseClick("left", 364, 149, 1, 0)
	 Sleep(100)
While 1
	 PixelSearch ( 620, 166, 711, 200, 0x32392D )
	 if @error <> 1 Then ExitLoop
	 if @error <> 0 Then MouseClick("left", 364, 149, 1, 0)
WEnd
While 1
PixelSearch (359, 155, 359, 155, 0x272B14)
If @error <> 1 Then MouseClick (359, 155, 1, 0)
Sleep(30)
PixelSearch ( 473, 183, 473, 183, 0x444C41 )
If @error <> 1 Then ExitLoop
If @error <> 0 Then MouseClick("left", 575, 146, 1, 0)
Sleep(30)
PixelSearch ( 739, 184, 739, 184, 0x191D17 )
If @error <> 1 Then ExitLoop
If @error <> 0 Then MouseClick("left", 575, 146, 1, 0)
WEnd
$point_pixel = PixelSearch ( 441, 164, 507, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
$point_pixel = PixelSearch ( 440, 281, 506, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
$point_pixel = PixelSearch ( 441, 164, 507, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
$point_pixel = PixelSearch ( 440, 281, 506, 351, 0x51554F )
if @error <> 1 Then MouseClick("left", $point_pixel[0], $point_pixel[1], 2, 0)
PixelSearch ( 920, 478, 920, 478, 0x742800 )
if @error <> 1 Then MouseClick("left", 897, 140, 1, 0)
While 1
PixelSearch (870, 158, 870, 158, 0x644327)
If @error <> 1 Then MouseClick ("left", 1100, 125, 1, 0)
If @error <> 0 Then ExitLoop
MouseClick("left", 254, 214, 1, 0)
Sleep(3000)
MouseClick("left", 707, 98, 1, 0)
Sleep(3000)
MouseClick("left", 254, 358, 1, 0)
Sleep(3000)
MouseClick("left", 421, 252, 1, 0)
Sleep(10000)
MouseClick("left", 347, 601, 1, 0)
Sleep(5000)
MouseClick("left", 493, 440, 1, 0)
While 1
PixelSearch ( 638, 466, 638, 466, 0x2C2A1A)
If @error <> 1 Then ExitLoop
WEnd
Sleep(3000)
MouseClick("left", 1037, 132, 1, 0)
Sleep(3000)
MouseClick("left", 254, 214, 1, 0)
Sleep(3000)
MouseClick("left", 707, 98, 1, 0)
Sleep(3000)
MouseClick("left", 254, 358, 1, 0)
Sleep(3000)
MouseClick("left", 421, 252, 1, 0)
Sleep(10000)
MouseClick("left", 347, 601, 1, 0)
Sleep(5000)
MouseClick("left", 493, 440, 1, 0)
While 1
PixelSearch ( 638, 466, 638, 466, 0x2C2A1A)
If @error <> 1 Then ExitLoop
WEnd
Sleep(3000)
MouseClick("left", 1037, 132, 1, 0)
Sleep(3000)
MouseClick("left", 254, 214, 1, 0)
Sleep(3000)
MouseClick("left", 707, 98, 1, 0)
Sleep(3000)
MouseClick("left", 254, 358, 1, 0)
Sleep(3000)
MouseClick("left", 421, 252, 1, 0)
Sleep(10000)
MouseClick("left", 347, 601, 1, 0)
Sleep(5000)
MouseClick("left", 493, 440, 1, 0)
While 1
PixelSearch ( 638, 466, 638, 466, 0x2C2A1A)
If @error <> 1 Then ExitLoop
WEnd
MouseClick("left", 254, 214, 1, 0)
Sleep(3000)
MouseClick("left", 707, 98, 1, 0)
Sleep(3000)
MouseClick("left", 254, 214, 1, 0)
Sleep(3000)
MouseClick("left", 707, 98, 1, 0)
Sleep(3000)
MouseClick("left", 255, 358, 1, 0)
Sleep(3000)
MouseClick("left", 420, 220, 1, 0)
Sleep(100)
WEnd
Sleep(100)
$color_green = 1514002
While 1
        If PixelGetColor( 364, 149 ) <> 1514002 Then ExitLoop ; если кнопка НЕ серая, то выходим из этого цикла и жмем другую кнопку
WEnd
WEnd
Func Terminate()
    Exit 0
EndFunc
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Выход на два цикла вверх:
Код:
ExitLoop 2

[optional] The number of loop levels to exit from. The default is 1 (meaning the current loop).
То есть:
Код:
If Not @error Then
    MouseClick("left", 897, 140, 1, 0)
Else
    ExitLoop 2
EndIf

В случае, когда нужно не выполнять цикл при определенных условиях используется ContinueLoop
То есть для конструкции:
Код:
While 1
    PixelSearch (1, 1, 5, 5, 0x191D17)
    If Not @error Then ContinueLoop
    ConsoleWrite('!!!')
WEnd

Цикл будет выдавать "!!!" каждый раз, когда в квадрате поиска не будет искомого цвета, если цвет присутствует - выдачи не будет.
 
Верх