В общем я всё же сделал этот скрипт работающим, как часики и при этом оставил в нем всего одну подпрограмму.
Сейчас объясню, что мне помогло. Возможно это поможет тем, кто пытается как-то соединить меж собой разные направления в боле-менее больших макросах, в которых глаза разбегаются и в итоге мы начинаем в них громоздить докера разных подпрограмм, а потом еще и искать из них выпрыгивания не по GOTO. Дак вот, что я сделал. У меня в макросе три основных направления. Это - "time Out", "boy" и "slepoy boy". "time Out" - это состояние перса, в котором он отдыхает, проверяет свои бафы, отхиливается "klich"-ем и регенит ману "meditaciya"-ей. Логически из этого состояния выход только в одну сторону - в "boy". В бою перс следит за своими ХП, хилится "klich"-ем, если они упали до определенной отметки, ну и собственно юзает скилы ударов по откату. Из боя выход у нас в двух направлениях - вернуться в "time Out", если мы слили моба, или уйти в "slepoy boy", если дела совсем плохи. Это происходит тогда, когда ХП перса падают на столько, что еще несколько секунд и моб может слить перса. В таком случае экран потихоньку заволакивает пульсирующей красной дымкой и кликер перестаёт видеть ХП и МП перса и его скилы, равно как и моба. В "slepoy boy" перс просто бешенно жмет на все кнопки - авось что откатилось. Из "slepoy boy" у нас тоже два направления. Это - в "boy", в случае если перс хильнулся и этим поправил свое здоровье настолько, что экран вновь пришел в норму и кликер вновь видит его ХП и контролирует скилы, или в "time Out", если перс слил таки моба и моб перестал его бить, благодаря чему, ХП перса отрегенились настолько, что экран опять же пришел в норму. Делим наш макрос на три части и пишем в трех разных файлах. Где выходы в какое-либо направление, мы просто ставим ////////////// и подписываем - куда мы выходим. "////////////////" я делаю для того, чтобы это место потом бросалось в глаза, чтоб не забыть про него.
slepoy boy:
WAITMS(50)
BEEP(800,200)
IF($time < $_time_t)
KEYPRESS(187) // Микстура
WAITMS(100)
$time = $_time_t + 10
END_IF
GETSCREEN
IF_PIXEL_IN(80,64, 80,64, 1930288) // Минимум хп
IF_PIXEL_IN(506,64, 506,64, 4539822) // Минимум ХП моба
///////////////// В бой.
Else
//////////////// в тайм аут
END_IF
Else
klich() // Клич
KEYPRESS(49) // Адреналин
KEYPRESS(56) // Молот
KEYPRESS(54) // Вихрь ударов
KEYPRESS(53) // Решающий
KEYPRESS(52) // Тройной
END_IF
GOTO(slepoy boy)
Так же пишем остальные два направления. Когда работу окончим, мы выбираем, с какого направления будет начинаться скрипт. В моем случае это "time Out", из которого выход только в "boy". Копируем весь код из макроса "boy" и тупо вставляем в "time Out", вместо "/////////////// в бой". Потом просто жмем
"Расставить отступы". Вуаля! Мы соединили два направления без всякого гемороя! Так же поступаем с третьим макросом. Вот и всё - мы избавлены от головоломок и в нашем скрипте нет путанници и лишних команд, чем ещё и улучшили читаемость скрипта
В подпрограмму я вынес только "клич", так как он вызывается в двух направлениях - в бою и в тайм ауте, а у него есть откат.