For the complete documentation index, see llms.txt. This page is also available as Markdown.

Инвентарь

Обзор

All Out предоставляет API инвентаря игрока, которое позволяет создавать предметы, выдавать их игрокам, а также позволяет игрокам сортировать, использовать и выбрасывать предметы в вашей игре.

Есть три основных понятия:

  • Определения предметов (Item_Definition): что представляет собой предмет является (название/иконка/стекование + ваши собственные поля)

  • Экземпляры предметов (Item_Instance): реальный стек в мире/в инвентаре

  • Инвентари (Inventory): контейнер слотов, который хранит экземпляры предметов

У каждого игрока есть встроенный инвентарь в player.default_inventory.

Сохранение

Если вы хотите, чтобы инвентари игроков автоматически сохранялись между игровыми сессиями, включите Auto Save Player Inventory флажок в Edit → Game Config разделе редактора.

Player inventory settings in Game Config

Вы также можете настроить эти параметры программно в CSL. Вызовите Scene.set_auto_save_player_inventory(true) и Scene.set_player_inventory_capacity(32) во время инициализации сцены (например, в ao_before_scene_load) до того, как к игре присоединятся какие-либо игроки.

Справочник API инвентаря

Быстрый старт (регистрация + выдача предмета)

Зарегистрируйте определения предметов один раз в ao_before_scene_load, затем создавайте экземпляры и перемещайте их в инвентарь игрока.

Отображение хотбара

Чтобы показать стандартный UI хотбара инвентаря на экране, вызовите Items.draw_hotbar внутри метода ao_late_update вашего Player. Без этого система инвентаря будет работать за кулисами, но игрок её не увидит!

Items.draw_hotbar полностью обрабатывает для вас весь UI хотбара + переключение рюкзака. Оно возвращает Draw_Hotbar_Result с selected_item, selected_item_index, inventory_open, а dropped_item полями.

Проверка, есть ли у игрока уже предмет

Обычный шаблон — выдавать предмет только если у игрока его ещё нет:

Используйте зарегистрированный ID определения:

Вы также можете проверить, сколько места осталось для конкретного типа предмета, прежде чем создавать его:

Пользовательские инвентари

Вы можете создавать инвентари, не привязанные к игроку, для таких вещей, как:

  • Сундуки / контейнеры для хранения

  • Команды рыб/мобов

Чтобы получить доступ к предметам:

Атомарное перемещение предметов

Используйте транзакцию, когда несколько перемещений предметов должны либо все выполниться, либо все провалиться:

Каждый экземпляр предмета может появляться в транзакции только один раз. Всегда сначала вызывайте can_move_all_items ; move_all_items вызывает assert, если вся транзакция больше не помещается. Перемещение может объединить стек и уничтожить перемещаемый экземпляр, поэтому не продолжайте использовать ссылки на предмет после транзакции.

Выброшенные предметы

Если вы хотите, чтобы игроки выбрасывали предметы в мир (и чтобы другие игроки могли подбирать их), используйте систему выброшенных предметов:

Создание выброшенного предмета

Анимация выброса + привязка к navmesh

Обработка drag-and-drop из UI хотбара

Если вы используете Items.draw_hotbar, игроки могут перетаскивать предмет из UI, чтобы выбросить его. Dropped_Item.handle_dropped_item удаляет его из инвентаря и создаёт сущность выброшенного предмета.

Выброшенные предметы автоматически исчезают со временем (с предупреждающей полосой). Удержание кнопки взаимодействия на предмете сбрасывает таймер его исчезновения.

Вы можете сделать выброшенный предмет эксклюзивным (видимым/подбираемым только одним игроком), используя dropped.set_exclusive(player).

Последнее обновление