Синтаксис и лексика¶
Структура файла¶
Файл .fs — это последовательность деклараций верхнего уровня:
триггеры (on ...:), команды (command ...:), функции (function ...:)
и объявления глобалов ($name = ...). Пустые строки игнорируются.
Блоки выделяются отступом (4 пробела, табуляция = 4) и двоеточием:
command kit:
if #kit-ready == false:
message "Your kit is still cooling down."
stop
give "DIAMOND" 3
Отступы внутри скобок ()[]{} игнорируются — длинные вызовы можно переносить.
Обратный слэш в конце строки — продолжение строки.
Комментарии¶
# начинает комментарий, но #имя без пробела — это player-переменная:
# Это комментарий
#visits = #visits + 1 # а это код: переменная #visits
message "hi" # комментарий после кода завершает строку
Правило простое: # + буква сразу = переменная, # + пробел/конец = комментарий.
Конечный комментарий после кода работает как перевод строки.
Литералы¶
| Вид | Примеры |
|---|---|
Число (number, всегда double) |
0, 3, 7.5, .5 |
Текст (text) |
"hi", "Healed " + target, escapes \n \t \" \\ |
Логический (boolean) |
true, false |
Пусто (null) |
null — литерал, не переменная |
is — синоним ==, включая проверку на null: if victim is null:.
Переменные¶
| Запись | Область | Пример |
|---|---|---|
name |
Локальная (объявляется через let) |
let victim = player(target) |
$name |
Глобальная, видна всем скриптам | $server-started = 1 |
#name |
Per-player, в разрезе UUID игрока | #kit-ready = false |
Вне серверного контекста (бенчмарк) #var без игрока читается как null.
Присваивание в $/# без предварительного объявления — нормально, это и есть
объявление. Имя переменной может содержать -: loop-index, #kit-ready.
Затенение встроенных функций
Локальная переменная перекрывает встроенную функцию с тем же именем.
Поэтому в примерах let victim = player(target), а не let player = ... —
иначе следующий вызов player(...) сломается с unknown variable.