diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 9025f798..d8db4557 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -10,14 +10,17 @@ - [Сущности и компоненты](scripting/ecs.md) - [Библиотеки](#) - [block](scripting/builtins/libblock.md) - - [item](scripting/builtins/libitem.md) - - [entities](scripting/builtins/libentities.md) - [cameras](scripting/builtins/libcameras.md) + - [entities](scripting/builtins/libentities.md) + - [hud](scripting/builtins/libhud.md) + - [inventory](scripting/builtins/libinventory.md) + - [item](scripting/builtins/libitem.md) - [mat4](scripting/builtins/libmat4.md) - [pack](scripting/builtins/libpack.md) - [player](scripting/builtins/libplayer.md) - [quat](scripting/builtins/libquat.md) - [vec2, vec3, vec4](scripting/builtins/libvecn.md) + - [world](scripting/builtins/libworld.md) - [Модуль core:bit_converter](scripting/modules/core_bit_converter.md) - [Модуль core:data_buffer](scripting/modules/core_data_buffer.md) - [Модули core:vector2, core:vector3](scripting/modules/core_vector2_vector3.md) @@ -38,71 +41,6 @@ require "контентпак:имя_модуля" -- загружает lua модуль из папки modules (расширение не указывается) ``` -## Библиотека *world* - -```python -world.get_list() -> массив таблиц { - name: str, - icon: str -} -``` - -Возвращает информацию о мирах: название и предпросмотр (автоматически загружаемая текстура). - -```python -world.get_day_time() -> number -``` - -Возвращает текущее игровое время от 0.0 до 1.0, где 0.0 и 1.0 - полночь, 0.5 - полдень. - -```python -world.set_day_time(time: number) -``` - -Устанавливает указанное игровое время. - -```python -world.set_day_time_speed(value: number) -``` - -Устанавливает указанную скорость для игрового времени. - -```python -world.get_day_time_speed() -> number -``` - -Возвращает скорость для игрового времени. - -```python -world.get_total_time() -> number -``` - -Возвращает общее суммарное время, прошедшее в мире - -```python -world.get_seed() -> int -``` - -Возвращает зерно мира. - -```python -world.exists() -> bool -``` - -Проверяет существование мира по имени. - -```python -world.is_day() -> bool -``` - -Проверяет является ли текущее время днём. От 0.2(8 утра) до 0.8(8 вечера) - -```python -world.is_night() -> bool -``` - -Проверяет является ли текущее время ночью. От 0.8(8 вечера) до 0.2(8 утра) - ## Библиотека *gui* Библиотека содержит функции для доступа к свойствам UI элементов. Вместо gui следует использовать объектную обертку, предоставляющую доступ к свойствам через мета-методы __index, __newindex: @@ -142,148 +80,6 @@ get_locales_info() -> таблица таблиц где Возвращает информацию о всех загруженных локалях (res/texts/\*). -## Библиотека *inventory* - -Библиотека функций для работы с инвентарем. - -```python -inventory.get(invid: int, slot: int) -> int, int -``` - -Принимает id инвентаря и индекс слота. Возвращает id предмета и его количество. id = 0 (core:empty) обозначает, что слот пуст. - -```python -inventory.set(invid: int, slot: int, itemid: int, count: int) -``` - -Устанавливает содержимое слота. - -```python -inventory.size(invid: int) -> int -``` - -Возращает размер инвентаря (число слотов). Если указанного инвентаря не существует, бросает исключение. - -```python -inventory.add(invid: int, itemid: int, count: int) -> int -``` - -Добавляет предмет в инвентарь. Если не удалось вместить все количество, возвращает остаток. - -```python -inventory.get_block(x: int, y: int, z: int) -> int -``` - -Функция возвращает id инвентаря указанного блока. Если блок не может иметь инвентарь - возвращает 0. - -```python -inventory.bind_block(invid: int, x: int, y: int, z: int) -``` - -Привязывает указанный инвентарь к блоку. - -```python -inventory.unbind_block(x: int, y: int, z: int) -``` - -Отвязывает инвентарь от блока. - -> [!WARNING] -> Инвентари, не привязанные ни к одному из блоков, удаляются при выходе из мира. - -```python -inventory.clone(invid: int) -> int -``` - -Создает копию инвентаря и возвращает id копии. Если копируемого инвентаря не существует, возвращает 0. - -```python -inventory.move(invA: int, slotA: int, invB: int, slotB: int) -``` - -Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB. -invA и invB могут указывать на один инвентарь. -slotB будет выбран автоматически, если не указывать явно. - -## Библиотека hud - -```python -hud.open_inventory() -``` - -Открывает инвентарь - -```python -hud.close_inventory() -``` - -Закрывает инвентарь - -```python -hud.open_block(x: int, y: int, z: int) -> int, str -``` - -Открывает инвентарь и UI блока. Если блок не имеет макета UI - бросается исключение. - -Возвращает id инвентаря блока (при *"inventory-size"=0* создаётся виртуальный инвентарь, который удаляется после закрытия), и id макета UI. - -```python -hud.show_overlay(layoutid: str, playerinv: bool) -``` - -Показывает элемент в режиме оверлея. Также показывает инвентарь игрока, если playerinv - **true** - -> [!NOTE] -> Одновременно может быть открыт только один блок - -```python -hud.open_permanent(layoutid: str) -``` - -Добавляет постоянный элемент на экран. Элемент не удаляется при закрытии инвентаря. Чтобы не перекрывать затенение в режиме инвентаря нужно установить z-index элемента меньшим чем -1. В случае тега inventory, произойдет привязка слотов к инвентарю игрока. - -```python -hud.close(layoutid: str) -``` - -Удаляет элемент с экрана. - -```python -hud.get_block_inventory() -> int -``` - -Дает ID инвентаря открытого блока или 0. - -```python -hud.get_player() -> int -``` - -Дает ID игрока, к которому привязан пользовательский интерфейс. - -```python -hud.pause() -``` - -Открывает меню паузы. - -```python -hud.resume() -``` - -Закрывает меню паузы. - -```python -hud.is_paused() -> bool -``` - -Возвращает true если открыто меню паузы. - -```python -hud.is_inventory_open() -> bool -``` - -Возвращает true если открыт инвентарь или оверлей. - ## Библиотека time ```python diff --git a/doc/ru/scripting/builtins/libhud.md b/doc/ru/scripting/builtins/libhud.md new file mode 100644 index 00000000..cba34dee --- /dev/null +++ b/doc/ru/scripting/builtins/libhud.md @@ -0,0 +1,52 @@ +# Библиотека hud + +```lua +-- Открывает инвентарь. +hud.open_inventory() + +-- Закрывает инвентарь. +hud.close_inventory() + +-- Открывает инвентарь и UI блока. +-- Если блок не имеет макета UI - бросается исключение. +-- Возвращает id инвентаря блока +-- (при *"inventory-size"=0* создаётся виртуальный инвентарь, +-- который удаляется после закрытия), и id макета UI. +hud.open_block(x: int, y: int, z: int) -> int, str +``` + +> [!NOTE] +> Одновременно может быть открыт только один блок + +```lua +-- Показывает элемент в режиме оверлея. +-- Также показывает инвентарь игрока, если playerinv - **true**. +hud.show_overlay(layoutid: str, playerinv: bool) + +-- Добавляет постоянный элемент на экран. Элемент не удаляется при +-- закрытии инвентаря. Чтобы не перекрывать затенение в режиме +-- инвентаря нужно установить z-index элемента меньшим чем -1. +-- В случае тега inventory, произойдет привязка слотов к инвентарю игрока. +hud.open_permanent(layoutid: str) + +-- Удаляет элемент с экрана. +hud.close(layoutid: str) + +-- Дает ID инвентаря открытого блока или 0. +hud.get_block_inventory() -> int + +-- Дает ID игрока, к которому привязан пользовательский интерфейс. +hud.get_player() -> int + +-- Открывает меню паузы. +hud.pause() + +-- Закрывает меню паузы. +hud.resume() + +-- Возвращает true если открыто меню паузы. +hud.is_paused() -> bool + +-- Возвращает true если открыт инвентарь или оверлей. +hud.is_inventory_open() -> bool +``` diff --git a/doc/ru/scripting/builtins/libinventory.md b/doc/ru/scripting/builtins/libinventory.md new file mode 100644 index 00000000..4d937358 --- /dev/null +++ b/doc/ru/scripting/builtins/libinventory.md @@ -0,0 +1,66 @@ +# Библиотека *inventory* + +Библиотека функций для работы с инвентарем. + +```lua +-- Возвращает id предмета и его количество. id = 0 (core:empty) обозначает, что слот пуст. +inventory.get( + -- id инвентаря + invid: int, + -- индекс слота + slot: int +) -> int, int + +-- Устанавливает содержимое слота. +inventory.set( + -- id инвентаря + invid: int, + -- индекс слота + slot: int, + -- id предмета + itemid: int, + -- количество предмета + count: int +) + +-- Возращает размер инвентаря (число слотов). +-- Если указанного инвентаря не существует, бросает исключение. +inventory.size(invid: int) -> int + +-- Добавляет предмет в инвентарь. +-- Если не удалось вместить все количество, возвращает остаток. +inventory.add( + -- id инвентаря + invid: int, + -- id предмета + itemid: int, + -- количество предмета + count: int +) -> int + +-- Функция возвращает id инвентаря блока. +-- Если блок не может иметь инвентарь - возвращает 0. +inventory.get_block(x: int, y: int, z: int) -> int + +-- Привязывает указанный инвентарь к блоку. +inventory.bind_block(invid: int, x: int, y: int, z: int) + +-- Отвязывает инвентарь от блока. +inventory.unbind_block(x: int, y: int, z: int) +``` + +> [!WARNING] +> Инвентари, не привязанные ни к одному из блоков, удаляются при выходе из мира. + +```lua +-- Создает копию инвентаря и возвращает id копии. +-- Если копируемого инвентаря не существует, возвращает 0. +inventory.clone(invid: int) -> int + +-- Перемещает предмет из slotA инвентаря invA в slotB инвентаря invB. +-- invA и invB могут указывать на один инвентарь. +-- slotB будет выбран автоматически, если не указывать явно. +inventory.move(invA: int, slotA: int, invB: int, slotB: int) +``` + + diff --git a/doc/ru/scripting/builtins/libworld.md b/doc/ru/scripting/builtins/libworld.md new file mode 100644 index 00000000..2c95e578 --- /dev/null +++ b/doc/ru/scripting/builtins/libworld.md @@ -0,0 +1,38 @@ +# Библиотека *world* + +```lua +-- Возвращает информацию о мирах. +world.get_list() -> массив таблиц { + -- название мира + name: str, + -- предпросмотр (автоматически загружаемая текстура) + icon: str +} + +-- Возвращает текущее игровое время от 0.0 до 1.0, где 0.0 и 1.0 - полночь, 0.5 - полдень. +world.get_day_time() -> number + +-- Устанавливает указанное игровое время. +world.set_day_time(time: number) + +-- Устанавливает указанную скорость смены времени суток. +world.set_day_time_speed(value: number) + +-- Возвращает скорость скорость смены времени суток. +world.get_day_time_speed() -> number + +-- Возвращает суммарное время, прошедшее в мире. +world.get_total_time() -> number + +-- Возвращает зерно мира. +world.get_seed() -> int + +-- Проверяет существование мира по имени. +world.exists() -> bool + +-- Проверяет является ли текущее время днём. От 0.333(8 утра) до 0.833(8 вечера). +world.is_day() -> bool + +-- Проверяет является ли текущее время ночью. От 0.833(8 вечера) до 0.333(8 утра). +world.is_night() -> bool +``` diff --git a/src/logic/scripting/lua/libs/libworld.cpp b/src/logic/scripting/lua/libs/libworld.cpp index 168edb28..d9ee3412 100644 --- a/src/logic/scripting/lua/libs/libworld.cpp +++ b/src/logic/scripting/lua/libs/libworld.cpp @@ -77,12 +77,12 @@ static int l_world_exists(lua::State* L) { static int l_world_is_day(lua::State* L) { auto daytime = level->getWorld()->getInfo().daytime; - return lua::pushboolean(L, daytime >= 0.2 && daytime <= 0.8); + return lua::pushboolean(L, daytime >= 0.333 && daytime <= 0.833); } static int l_world_is_night(lua::State* L) { auto daytime = level->getWorld()->getInfo().daytime; - return lua::pushboolean(L, daytime < 0.2 || daytime > 0.8); + return lua::pushboolean(L, daytime < 0.333 || daytime > 0.833); } const luaL_Reg worldlib[] = {