110 lines
4.0 KiB
Markdown
110 lines
4.0 KiB
Markdown
# Консоль
|
||
|
||
Для работы с командным интерпретатором предоставляется библиотека **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 передается таблица значений именованных аргументов.
|
||
|
||
Проверку и приведение типов интерпретатор команд производит автоматически.
|