Эта статья будет посвящена, не столь распространенной, теме - Пользовательских подфункций (Sub-Functions), и возможно вы вообще о такой возможности редактора и не слышали. Да что уж там, я сам об этом не так давно узнал и был мягко говоря приятно удивлен этому.
Подфункции - это
продвинутый механизм в редакторе карт StarCraft 2, позволяющий создавать пользовательские конструкции управления потоком выполнения кода. По сути, это инструмент для определения собственных управляющих структур, аналогичных встроенным циклам и условным операторам (таких как If Then Else, Switch и прочих).
Как создать свою собственную подфункцию?
Описание примера
Мы создадим конструктор, который будет перебирать слова в строке подобно тому как работает Pick Each Integer, с возможностью на каждой итерации получить перебираемое слово
- Создадим действие For Each Word In Strings
- Далее добавим параметр String (Просто нажмите по полю выделив его и нажмите Ctrl - W), А также добавим новую подфункцию, выбрав поле Sub-Function Types и нажав на Ctrl - W
- Теперь нужно слегка поработать с кодом Galaxy в Custom Script Code.
Вставьте этот код в поле - Custom Script Code
Что делает каждая строка?
#AUTOVAR(s,string) = #PARAM(string);
Создаёт автоматическую переменную со стартовым значением заданным в нашем параметре строки
#AUTOVAR(len) = StringLength(#PARAM(string));
Создает авто-переменную с информацией о длине нашей строки
for (;;#AUTOVAR(len) -= 1)
{
. . .
}
Цикл, итерирующийся столько раз, сколько длина строки
#AUTOVAR(word,string) = StringWord(#PARAM(string),#AUTOVAR(curIndex));
Получаем текущее перебираемое слово
#SUBFUNCS(Actions)
Стартуем действия, которые будут добавлены для нашего цикла в самом триггере
Первый итог
Теперь мы уже сможем добавить наш собственный цикл в любой триггер! и даже сможем добавить в него некоторые действия, которые он выполнит на каждое слово строки
Но хотелось бы иметь возможность внутри тела цикла получить доступ к текущему слову
Позже дополню статью и распишу как делать свои функции для своих циклов
Позже дополню статью и распишу как делать свои функции для своих циклов