4.0 KiB
Консоль
Для работы с командным интерпретатором предоставляется библиотека console.
Создание команд
Для создания команды консоли используется следующая функция:
console.add_command(схема: str, исполнитель: function)
Схема имеет следующий синтаксис:
название позиционные параметры {именованные параметры}
Название может содержать:
- латинницу
- цифры (кроме первого символа)
.,_,-
Позиционные параметры разделяются пробелами и имеют следующий синтаксис:
название:тип (вариант 1)
название:тип=по-умолчанию (вариант 2)
название:тип~центральное-значение (вариант 3)
название:тип=по-умолчанию~центральное-значение (вариант 4)
Доступные типы:
- int - целое число
- num - дробное число
- str - строка
- sel - селектор (id объекта представленный целым числом)
- enum - перечисление
На вариантах 3 и 4 показан оператор ~ позволяющий использовать относительные значения. Центральное значение - значение, относительно которого будет указываться пользовательское. Например позиция игрока.
Относительный оператор работает только с числами (num или int)
В качестве центральных значений могут указываться переменные, назначаемые через console.set.
Пример:
x:num~pos.x
Переменные можно указывать и в качестве значений по-умолчанию, при использовании префикса $:
t:int=$time
Перечисления указывазываются в формате:
mode:[replace|destruct|none]
Либо через переменную:
mode:enum $modes
Селекторы указываются с префиксом @. На данный момент являются заглушкой, по причине отсутствия объектной модели. Следует делать опциональными и использовать переменные:
obj:sel=$obj.id # obj.id - id игрока
Именованные аргументы указываются в специальном блоке, ограниченном фигурными скобками { } по той же схеме.
Пример:
eval name:str="World" {greeting:str='Hello'}
Примеры схем команд
Схемы стандартных команд можно найти в файле res/script/stdcmd.lua.
Пример - команда tp:
tp obj:sel=$obj.id x:num~pos.x y:num~pos.y z:num~pos.z
Полный lua код создания команды:
console.add_command(
"tp obj:sel=$obj.id x:num~pos.x y:num~pos.y z:num~pos.z",
"Teleport object",
function (args, kwargs)
player.set_pos(unpack(args))
end
)
- В args передаются готовые значения позиционных аргументов.
- В kwargs передается таблица значений именованных аргументов.
Проверку и приведение типов интерпретатор команд производит автоматически.