137 lines
5.3 KiB
Markdown
137 lines
5.3 KiB
Markdown
# Консоль
|
|
|
|
Для работы с командным интерпретатором предоставляется библиотека **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<String> -- Возвращает таблицу со списком команд
|
|
console.get_command_info(name: String) -> Table -- Возвращает информацию о команде
|
|
console.execute(command: str) -- Выполняет команду
|
|
```
|
|
|
|
|
|
|