Выпрыгивать из циклов и подпрограмм нельзя.
У тебя там единственный цикл работает как условие, его нужно просто заменить на условие, тогда можно из этого условия без проблем выпрыгивать.
Смысл подпрограмм оптимизировать повторяющийся код, а у тебя 1 вызов на весь скрипт.
Вот твой код без подпрограммы и цикла, теперь должен работать верно.
//===============Объявление констант=======================
$XFirsttarget = 1065 // Х координаты первой цели
$YFirsttarget = 80 // Y координаты первой цели
$XLock = 885 // X координаты кнопки лока
$YLock = 85 // Y координаты кнопки лока
$XDron = 620 // X координаты первого дрона
$YDron = 122 // Y координаты первого дрона
$Red = 4145151 // Красный цвет лока
$Green = 4194111 // Зеленый цвет дронов
//==============Основное тело программы=========
ОсновнойСценарий:
MOVE($XDron,$YDron)
GETSCREEN($XDron-2,$YDron-2,$XDron+2,$YDron+2) // Делаем скрин
PRINT("Проверка активности дронов")
COLORMODE(6,$XDron-2,$YDron-2,$XDron+2,$YDron+2) //Упрощаем цвета в области
IF(PXL($XDron,$YDron)=$Green) // Проверяем активность дронов(Зеленый значит простой)
PRINT("Начинаем атаковать первую цель")
МеткаНачало:
PRINT("Начало скрипта")
MOVE($XFirsttarget,$YFirsttarget) // Перевод мыши на первую цель
WAITMS(500)
LCLICK($XFirsttarget,$YFirsttarget) // Выбор первой цели
WAIT(1)
MOVE($XLock,$YLock) // Перевод мыши на кнопку лока
WAITMS(500)
LCLICK($XLock,$YLock) // Нажатие мыши на кнопку лока
WAITMS(500)
$Zalip = 1 // Переменная счетчик, с ее помощью происходит ожидание выполнения условия (PXL($XLock,$YLock)=$Red)
МеткаВзятьЦель:
MOVE($XLock,$YLock) // Перевод мыши на кнопку лока
WAITMS(500)
GETSCREEN ($XLock-2,$YLock-2,$XLock+2,$YLock+2) // Делаем скрин
PRINT("Проверка выделения цели ", $Zalip)
COLORMODE(6,$XLock-2,$YLock-2,$XLock+2,$YLock+2) //Упрощаем цвета в области
IF(PXL($XLock,$YLock)=$Red) // Проверяем пиксель кнопки лока
WAITMS(500)
keypress(#F) //Атака дронов
WAITMS(500)
PRINT("Атака")
ELSE
IF($Zalip<8) // Пока переменная меньше 8 переходим на метку (МеткаВзятьЦель)
inc($Zalip)
WAIT(2)
GOTO(МеткаВзятьЦель)
END_IF
GOTO(МеткаНачало) //Если за 8 проходов цель не навелась, возможно она исчезла, начинаем выбирать новую цель
END_IF
МеткаЖив: // После начала атаки проверяем жива ли цель
MOVE($XLock,$YLock)
WAIT(1)
GETSCREEN($XLock-2,$YLock-2,$XLock+2,$YLock+2)
COLORMODE(6,$XLock-2,$YLock-2,$XLock+2,$YLock+2)
IF(PXL($XLock,$YLock)=$Red)
WAIT(2)
PRINT("Еще жив")
GOTO(МеткаЖив) // Пока пиксель $Red не выходим из цикла
ELSE
GOTO(ОсновнойСценарий) // Переходим к основному сценарию и проверяем активность дронов
END_IF
END_IF
WAIT(2)
//=============================================
Теперь избавляем код от ГОТО
//===============Объявление констант=======================
$XFirsttarget = 1065 // Х координаты первой цели
$YFirsttarget = 80 // Y координаты первой цели
$XLock = 885 // X координаты кнопки лока
$YLock = 85 // Y координаты кнопки лока
$XDron = 620 // X координаты первого дрона
$YDron = 122 // Y координаты первого дрона
$Red = 4145151 // Красный цвет лока
$Green = 4194111 // Зеленый цвет дронов
//==============Основное тело программы=========
WHILE(1) // Весконечный цикл
MOVE($XDron,$YDron)
WAITMS(50)
PRINT("Проверка активности дронов")
GETSCREEN($XDron-2,$YDron-2,$XDron+2,$YDron+2) // Делаем скрин
COLORMODE(6,$XDron-2,$YDron-2,$XDron+2,$YDron+2) //Упрощаем цвета в области
IF(PXL($XDron,$YDron)=$Green) // Проверяем активность дронов(Зеленый значит простой)
PRINT("Начинаем атаковать первую цель")
$check1 = 0
WHILE($check1 = 0)
PRINT("Начало скрипта")
MOVE($XFirsttarget,$YFirsttarget) // Перевод мыши на первую цель
WAITMS(500)
LCLICK($XFirsttarget,$YFirsttarget) // Выбор первой цели
WAIT(1)
MOVE($XLock,$YLock) // Перевод мыши на кнопку лока
WAITMS(500)
LCLICK($XLock,$YLock) // Нажатие мыши на кнопку лока
WAITMS(500)
$Zalip = 0 // Переменная счетчик, с ее помощью происходит ожидание выполнения условия (PXL($XLock,$YLock)=$Red)
$check2 = 0
WHILE($check2 = 0)
MOVE($XLock,$YLock) // Перевод мыши на кнопку лока
WAITMS(500)
GETSCREEN ($XLock-2,$YLock-2,$XLock+2,$YLock+2) // Делаем скрин
PRINT("Проверка выделения цели ", $Zalip)
COLORMODE(6,$XLock-2,$YLock-2,$XLock+2,$YLock+2) //Упрощаем цвета в области
IF(PXL($XLock,$YLock)=$Red) // Проверяем пиксель кнопки лока
WAITMS(500)
keypress(#F) //Атака дронов
WAITMS(500)
PRINT("Атака")
$check1 = 1 // Разрешаем выход из цикла check1
$check2 = 1 // Разрешаем выход из цикла check2
ELSE
IF($Zalip<8)
inc($Zalip)
WAIT(2)
ELSE
$check2 = 1 // Если за 8 проходов цель не навелась, возможно она исчезла, начинаем выбирать новую цель
END_IF
END_IF
END_CYC
END_CYC
$check = 0
WHILE($check = 0)
// После начала атаки проверяем жива ли цель
MOVE($XLock,$YLock)
WAIT(1)
GETSCREEN($XLock-2,$YLock-2,$XLock+2,$YLock+2)
COLORMODE(6,$XLock-2,$YLock-2,$XLock+2,$YLock+2)
IF(PXL($XLock,$YLock)=$Red) // Пока пиксель $Red не выходим из цикла
PRINT("Еще жив")
WAIT(2)
ELSE
$check = 1 // Переходим к основному сценарию и проверяем активность дронов
END_IF
END_CYC
END_IF
WAIT(2)
END_CYC