Инвентарь
Обзор
All Out предоставляет API инвентаря игрока, которое позволяет создавать предметы, выдавать их игрокам, а также позволяет игрокам сортировать, использовать и выбрасывать предметы в вашей игре.
Есть три основных понятия:
Определения предметов (
Item_Definition): что представляет собой предмет является (название/иконка/стекование + ваши собственные поля)Экземпляры предметов (
Item_Instance): реальный стек в мире/в инвентареИнвентари (
Inventory): контейнер слотов, который хранит экземпляры предметов
У каждого игрока есть встроенный инвентарь в player.default_inventory.
Сохранение
Если вы хотите, чтобы инвентари игроков автоматически сохранялись между игровыми сессиями, включите Auto Save Player Inventory флажок в Edit → 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 полями.
hide_bag_button = true запрещает игроку открывать рюкзак. Если рюкзак уже открыт, он закроется, поэтому используйте это только тогда, когда у игроков есть другой способ получить доступ к важным предметам.
Проверка, есть ли у игрока уже предмет
Обычный шаблон — выдавать предмет только если у игрока его ещё нет:
Используйте зарегистрированный 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).
Последнее обновление