5.3 KiB
Консоль
Для работы с командным интерпретатором предоставляется библиотека console.
При отправке команды через стандартную консоль (макет core:console):
- проверяется правило
allow-cheats - автоматически устанавливаются переменные
player,pos.x|y|z,entity.id,entity.selected. - вызывается обработчик команд - console.submit или по-умолчанию.
Обработчик по-умолчанию вызывает console.execute, передавая результат в вызов console.log.
Создание команд
Для создания команды консоли используется следующая функция:
console.add_command(схема: str, исполнитель: function, чит_команда: bool)
Схема имеет следующий синтаксис:
название позиционные параметры {именованные параметры}
Название может содержать:
- латинницу
- цифры (кроме первого символа)
.,_,-
Позиционные параметры разделяются пробелами и имеют следующий синтаксис:
название:тип (вариант 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, true
)
- В args передаются готовые значения позиционных аргументов.
- В kwargs передается таблица значений именованных аргументов.
Проверку и приведение типов интерпретатор команд производит автоматически.
Остальные методы
console.set_cheat(name: String, cheat: Boolean) -> cheatIsChanged: Boolean
console.is_cheat(name: String) -> Boolean
Сеттер и геттер статуса "чит" команды
console.log(...) -- Выводит информацию во внутриигровую консоль
console.chat(...) -- Выводит информацию во внутриигровой чат
console.get_commands_list() -> Table<String> -- Возвращает таблицу со списком команд
console.get_command_info(name: String) -> Table -- Возвращает информацию о команде
console.execute(command: str) -- Выполняет команду