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.

持久化

如果你希望玩家物品栏在不同游戏会话之间自动保存,请启用 自动保存玩家物品栏 编辑器中的 编辑 → 游戏配置 部分。

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 在你的 Player 的 ao_late_update 方法中。没有它,物品栏系统仍会在后台运行,但玩家看不到!

Items.draw_hotbar 它会为你处理整个快捷栏 + 背包切换 UI。它返回一个 Draw_Hotbar_Result 包含 selected_item, selected_item_index, inventory_open,以及 dropped_item 字段。

检查玩家是否已经拥有某个物品

一种常见做法是:只有在玩家还没有该物品时才发放它:

使用该定义注册的 ID:

在创建某种特定物品之前,你还可以检查剩余空间有多少:

自定义物品栏

你可以创建不绑定到玩家的物品栏,用于例如:

  • 箱子 / 储物容器

  • 鱼群/怪物队伍

要访问物品:

原子性物品移动

当多次物品移动必须要么全部成功要么全部失败时,请使用事务:

每个物品实例在事务中只能出现一次。务必先调用 can_move_all_itemsmove_all_items 如果完整事务已无法放入,则会触发断言。移动可能会合并堆叠并销毁被移动的实例,因此事务结束后不要继续使用物品引用。

掉落物品

如果你希望玩家将物品丢到世界中(并让其他玩家拾取),请使用掉落物品系统:

生成一个掉落物品

掉落动画 + 吸附到导航网格

处理来自快捷栏 UI 的拖放

如果你使用 Items.draw_hotbar,玩家可以把物品从 UI 中拖出以丢弃它。 Dropped_Item.handle_dropped_item 会将其从物品栏中移除,并生成一个掉落物实体。

掉落物会随着时间自动消失(并显示警告条)。按住与物品交互按钮会重置其消失计时器。

你可以使用 dropped.set_exclusive(player).

最后更新于