Статья
Раздел:
4. Триггеры
Эта статья будет посвящена, не столь распространенной, теме - Пользовательских подфункций (Sub-Functions), и возможно вы вообще о такой возможности редактора и не слышали. Да что уж там, я сам об этом не так давно узнал и был мягко говоря приятно удивлен этому.
Подфункции - это
продвинутый механизм в редакторе карт StarCraft 2, позволяющий создавать пользовательские конструкции управления потоком выполнения кода. По сути, это инструмент для определения собственных управляющих структур, аналогичных встроенным циклам и условным операторам (таких как If Then Else, Switch и прочих).

Как создать свою собственную подфункцию?

Описание примера
Мы создадим конструктор, который будет перебирать слова в строке подобно тому как работает Pick Each Integer, с возможностью на каждой итерации получить перебираемое слово
  1. Создадим действие For Each Word In Strings
  1. Далее добавим параметр String (Просто нажмите по полю выделив его и нажмите Ctrl - W), А также добавим новую подфункцию, выбрав поле Sub-Function Types и нажав на Ctrl - W
  1. Теперь нужно слегка поработать с кодом Galaxy в Custom Script Code.
Вставьте этот код в поле - Custom Script Code
#AUTOVAR(s,string) = #PARAM(string);
#AUTOVAR(len) = StringLength(#PARAM(string));
#AUTOVAR(curIndex) = 1;

for (;;#AUTOVAR(len) -= 1) 
{
    #AUTOVAR(word,string) = StringWord(#PARAM(string),#AUTOVAR(curIndex));
    #AUTOVAR(curIndex) += 1;
    if (#AUTOVAR(word) == "") { break; }
    #SUBFUNCS(Actions)
}
Что делает каждая строка?
#AUTOVAR(s,string) = #PARAM(string);
Создаёт автоматическую переменную со стартовым значением заданным в нашем параметре строки
#AUTOVAR(len) = StringLength(#PARAM(string));
Создает авто-переменную с информацией о длине нашей строки
for (;;#AUTOVAR(len) -= 1) 
{
	. . .
}
Цикл, итерирующийся столько раз, сколько длина строки
#AUTOVAR(word,string) = StringWord(#PARAM(string),#AUTOVAR(curIndex));
Получаем текущее перебираемое слово
#SUBFUNCS(Actions)
Стартуем действия, которые будут добавлены для нашего цикла в самом триггере

Первый итог

Теперь мы уже сможем добавить наш собственный цикл в любой триггер! и даже сможем добавить в него некоторые действия, которые он выполнит на каждое слово строки
Но хотелось бы иметь возможность внутри тела цикла получить доступ к текущему слову
Позже дополню статью и распишу как делать свои функции для своих циклов
`
ОЖИДАНИЕ РЕКЛАМЫ...