JASS
Содержание:
Функции — это блоки кода, выполняющие определенные операции.
nothing
Чтоб обозначить, что функция не принимает аргументы или не возвращает значений используется синтаксическая конструкция nothing. Тобишь такого типа как nothing в игре не существует.
function MyFunc takes nothing returns nothing
//...
endfunction
Аргументы
Указываются в блоке takes:
function MyFunc takes integer a, real b, boolean c returns nothing
//...
endfunction
Несколько раз встречал подобные вопросы, посему уточню - аргументов может быть произвольное количество. Если их больше одного, то они разделяются запятой.
Возврат значения
Тип возвращаемого значения указывается в блоке returns:
function MyFunc takes nothing returns integer
return 100500
endfunction
Вызов
main
Изначально игра вызывает функцию main из которой уже будут вызваны другие функции. Функция main должна ничего не принимать и ничего не возвращать. Все остальные функции так или иначе будут вызваны вследствие вызова функции main. Существует ещё функция config, вызываемая в лобби, но принцип остаётся прежним.
Важно, что могут быть вызваны только те функции, которые по коду выше функции из которой происходит вызов. Особо гениальные вспомнят про ExecuteFunc, но про это будет ниже.
call
Используется для вызова функции напрямую. Для вызова функции как выражения этот оператор опускается.
function a takes integer b, integer c returns integer
return b + c
endfunction
function main takes nothing returns nothing
call a(1, a(2, 3))
endfunction
Рекурсия
В данном контексте это вызов функции из самой себя и она прекрасно работает:
function a takes integer b returns integer
if b < 0 then
return b
endif
return a(b - 1)
endfunction
function main takes nothing returns nothing
call a(10)
endfunction
native
Они же нативки - функции, код которых не являются частью скрипта, а вшит в движок игры. Полный список эти функций можно найти в файлах common.j и common.ai.
common.ai
Файл с дополнительными функциями, которые по умолчанию отключены. Для их включения необходимо добавить их сигнатуру до объявления первой функции в war3map.j:
//...
endglobals
native UnitAlive takes unit id returns boolean
native GetUnitGoldCost takes integer unitid returns integer
native GetUnitWoodCost takes integer unitid returns integer
//...
При использовании VJASS эти объявления автоматически переносятся в нужное место.
ExecuteFunc
native ExecuteFunc takes string funcName returns nothing
Функция, позволяющая вызвать другую функцию по её имени. Используется костылеписателями для {кавычка}оптимизации{кавычка} своего говнокода. Не используйте её, если не хотите преисполниться в своём познании потоков и прочей никому не нужной {цензура}.
ExecuteCode
native ExecuteCode takes code c returns nothing
Если вы уже перешли на UjAPI но ещё не перешли на AngelScript то это единственный адекватный способ передать функцию аргументом. Передаваемая функция по традиции должна ничего не принимать и ничего не возвращатть.
function a takes code b returns nothing
call ExecuteCode(b)
endfunction
function c takes nothing returns nothing
//...
endfunction
function main takes nothing returns nothing
call a(function c)
endfunction
null
Как сказано в статье про типы, null это специально обученный ноль. Но ведёт он себя не вполне как ноль, так что будте с ним поаккуратней и чаще проверяйтесь, если не уверены. Ибо во многих нативках нет проверок и случайно переданный null вместо, к примеру, юнита может привнести многие печали.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Unryze
И GetBuilding - выдаёт последнее построенное или созданное триггерно здание