VoxelEngine/doc/ru/console.md
2025-11-21 20:59:57 +03:00

5.3 KiB
Raw Permalink Blame History

Консоль

Для работы с командным интерпретатором предоставляется библиотека console.

При отправке команды через стандартную консоль (макет core:console):

  1. проверяется правило allow-cheats
  2. автоматически устанавливаются переменные player, pos.x|y|z, entity.id, entity.selected.
  3. вызывается обработчик команд - 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) -- Выполняет команду