# Консоль Для работы с командным интерпретатором предоставляется библиотека **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) ``` Схема имеет следующий синтаксис: ``` название позиционные параметры {именованные параметры} ``` Название может содержать: - латинницу - цифры (кроме первого символа) - `.`, `_`, `-` Позиционные параметры разделяются пробелами и имеют следующий синтаксис: ``` название:тип (вариант 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 ) ``` - В args передаются готовые значения позиционных аргументов. - В kwargs передается таблица значений именованных аргументов. Проверку и приведение типов интерпретатор команд производит автоматически.