Ну вот так не будет выпрыгивание из подпрограммы. В самой подпрограмме происходит присваивание значения переменной и прыжок в конец. После подпрограммы идут условия и если они сработают то выполнение прыгнет на одну из меток.
SUB(dar)
LOGWRITE ("dar")
IF($time1 < $_time_t)
KEYPRESS(189)
WAITMS(600)
$time1 = $_time_t + 9
END_IF
END_SUB
SUB(boy)
boy:
LOGWRITE ("boy")
dar() // Юзаем тикающюю хилку
GETSCREEN
IF_PIXEL_IN(571,63, 571,63, 4539822) // Проверяем моба если он на персе, то юзаем скилы ударов.
IF_PIXEL_IN(588,847, 588,847, 329753) // Рывок
KEYPRESS(51)
WAITMS(850)
Else
IF_PIXEL_IN(629,847, 629,847, 738459,6791167) // Тройной 1
KEYPRESS(52)
WAITMS(650)
Else
IF_PIXEL_IN(629,847, 629,847, 666529) // Тройной 2
KEYPRESS(52)
WAITMS(650)
Else
IF_PIXEL_IN(629,847, 629,847, 465195) // Тройной 3
KEYPRESS(52)
WAITMS(1200)
END_IF
END_IF
END_IF
END_IF
Else // Если моба нет, то проверяем минимум ХП у перса. Это нужно для того, что если моб уделает перса настолько, что экран затянет красной пеленой, то кликер ослепнет и не будет видеть не только ХП моба, но и ХП перса и скилы.
IF_PIXEL_IN(80,64, 80,64, 1930288) // Минимум хп
// Если ХП перса найдены, а ХП моба мы до этого не нашли, то значит бой окончен и отправляем перса в Time Out
$Time_Out = 1
GOTO(end boy)
Else // Если же и ХП перса не найдено, то это значит, что перс в трудном положении, о чем мы сигнализируем и переводим перса в слепой бой, так сказать...
BEEP(800,200)
slepoy boy:
LOGWRITE ("slepoy boy")
dar() // Юзаем тикающюю хилку
GETSCREEN
IF_PIXEL_IN(80,64, 80,64, 1930288) // Проверяем минимум ХП перса и если они найдены, то значет перса нужно выводить из слепого боя, в котором он юзает скилы наощупь, так сказать...
$begin = 1
GOTO(end boy)
Else // Если ХП перса не проявились, то юзаем минимальные (безоткатные) скилы вслепую.
BEEP(800,200)
KEYPRESS(#4)
WAITMS(700)
KEYPRESS(52)
WAITMS(700)
KEYPRESS(#4)
WAITMS(1250)
GOTO(slepoy boy)
END_IF
END_IF
Else
$Time_Out = 1
GOTO(end boy)
END_IF
GOTO(boy)
end boy:
END_SUB
1:
$begin = 0
$Time_Out = 0
GETSCREEN
IF_PIXEL_IN(571,63, 571,63, 4539822) // Проверяем - не висит ли на персе моб.
boy() // Если висит, то отправляем в boy
IF($begin = 1)
$begin = 0
GOTO(1)
END_IF
IF($Time_Out = 1)
$Time_Out = 0
GOTO(Time Out)
END_IF
Else
WAITMS(100)
END_IF
Time Out:
LOGWRITE ("Time Out")
GETSCREEN
IF_PIXEL_IN(749,645, 749,645, 16449535) // Дроп
KEYPRESS(#F)
WAITMS(2000)
Else
COLORMODE(6)
IF_PICTURE_IN (2,44, 320,96, "хп-мп.bmp", -1, 100) // Проверяем полное восстановление ХП и МП
KEYPRESS(#E) // Если восстановилось, то берем моба в таргет.
WAITMS(100)
GETSCREEN
IF_PIXEL_IN(571,63, 571,63, 4539822) // Если моб в таргете, то отправляем перса в boy
boy()
IF($begin = 1)
$begin = 0
GOTO(1)
END_IF
IF($Time_Out = 1)
$Time_Out = 0
GOTO(Time Out)
END_IF
Else
GOTO(1) // Если моб в таргете не появился, то в Time Out
END_IF
Else // Если ХП, или МП не восстановлены (как и сразу после боя), то не теряем время и проверяем наличие бафов.
IF_PICTURE_IN (1,83, 353,163, "второе дыхание.bmp", -1, 100) // Если бафы в норме, то ничего не делаем и ждем дальше восстановления ХП и МП, Предварительно проверив, не сагрился ли на нас какой-нибудь моб (скрипт перейдет на позицию 1)
Else // Если бафы слетели, то бафаемся.
KEYDOWN (#SHIFT)
WAITMS (50)
KEYPRESS (189)
WAITMS (50)
KEYUP (#SHIFT)
WAITMS(1300)
END_IF
END_IF
END_IF
WAITMS(100)
Создавать подпрограмму оправдано если код будет вызываться хотя бы два раза за проход скрипта.
Писать GETSCREEN к каждому анализу конечно не ошибка, но оптимально если нет задержек между анализами то GETSCREEN не пишут, это снижает нагрузку на проц.
Пример:
GETSCREEN // снимок делается один раз
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
LCLICK($_return1, $_return2)
WAITMS(100)
ELSE
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 15423488)
LCLICK($_return1, $_return2)
WAITMS(100)
Else
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 16777215)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
END_IF