# Консоль Для работы с командным интерпретатором предоставляется библиотека **console**. При отправке команды через стандартную консоль (макет core:console): 1. проверяется правило `allow-cheats` 2. автоматически устанавливаются переменные `player`, `pos.x|y|z`, `entity.id`, `entity.selected`. 3. вызывается обработчик команд - console.submit или по-умолчанию. Обработчик по-умолчанию вызывает console.execute, передавая результат в вызов console.log. ## Создание команд Для создания команды консоли используется следующая функция: ```python console.add_command(схема: str, исполнитель: function, чит_команда: bool) ``` Схема имеет следующий синтаксис: ``` название позиционные параметры {именованные параметры} ``` Название может содержать: - латинницу - цифры (кроме первого символа) - `.`, `_`, `-` Позиционные параметры разделяются пробелами и имеют следующий синтаксис: ``` название:тип (вариант 1) название:тип=по-умолчанию (вариант 2) название:тип~центральное-значение (вариант 3) название:тип=по-умолчанию~центральное-значение (вариант 4) ``` Доступные типы: - **int** - целое число - **num** - дробное число - **str** - строка - **sel** - селектор (id объекта представленный целым числом) - **enum** - перечисление На вариантах 3 и 4 показан оператор `~` позволяющий использовать относительные значения. *Центральное значение* - значение, относительно которого будет указываться пользовательское. Например позиция игрока. Относительный оператор работает только с числами (num или int) В качестве центральных значений могут указываться переменные, назначаемые через **console.set**. Пример: ```python x:num~pos.x ``` Переменные можно указывать и в качестве значений по-умолчанию, при использовании префикса `$`: ```python t:int=$time ``` Перечисления указывазываются в формате: ```python mode:[replace|destruct|none] ``` Либо через переменную: ```python mode:enum $modes ``` Селекторы указываются с префиксом `@`. На данный момент являются заглушкой, по причине отсутствия объектной модели. Следует делать опциональными и использовать переменные: ```python obj:sel=$obj.id # obj.id - id игрока ``` Именованные аргументы указываются в специальном блоке, ограниченном фигурными скобками `{ }` по той же схеме. Пример: ```python eval name:str="World" {greeting:str='Hello'} ``` ## Примеры схем команд Схемы стандартных команд можно найти в файле `res/script/stdcmd.lua`. Пример - команда **tp**: ```python tp obj:sel=$obj.id x:num~pos.x y:num~pos.y z:num~pos.z ``` Полный lua код создания команды: ```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 передается таблица значений именованных аргументов. Проверку и приведение типов интерпретатор команд производит автоматически. ## Остальные методы ```lua console.set_cheat(name: String, cheat: Boolean) -> cheatIsChanged: Boolean console.is_cheat(name: String) -> Boolean ``` Сеттер и геттер статуса "чит" команды ```lua console.log(...) -- Выводит информацию во внутриигровую консоль console.chat(...) -- Выводит информацию во внутриигровой чат console.get_commands_list() -> Table -- Возвращает таблицу со списком команд console.get_command_info(name: String) -> Table -- Возвращает информацию о команде console.execute(command: str) -- Выполняет команду ```