From 5e4dab1b6b887550e03638ec1b3604ff3890874c Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 4 Jun 2024 10:49:46 +0300 Subject: [PATCH] =?UTF-8?q?added=20doc/ru/=D0=9A=D0=BE=D0=BD=D1=81=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/ru/Консоль.md | 109 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 doc/ru/Консоль.md diff --git a/doc/ru/Консоль.md b/doc/ru/Консоль.md new file mode 100644 index 00000000..a279be61 --- /dev/null +++ b/doc/ru/Консоль.md @@ -0,0 +1,109 @@ +# Консоль + +Для работы с командным интерпретатором предоставляется библиотека **console** + +## Создание команд + +Для создания команды консоли используется следующая функция: + +```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 передается таблица значений именованных аргументов. + +Проверку и приведение типов интерпретатор команд производит автоматически.