11#include <unordered_map>
30 std::string
getId()
const {
return id_; }
31 void setId(
const std::string &
id) { id_ =
id; }
34 std::string
getKind()
const {
return kind_; }
68 void setExtra(
const std::string &key,
const std::string &
value);
69 std::string
getExtra(
const std::string &key,
const std::string &fallback = {})
const;
72 bool canAddItem(
const std::string &itemId,
int quantity);
74 int addItem(
const std::string &itemId,
int quantity);
75 int removeItem(
const std::string &itemId,
int quantity);
76 int removeAt(
int slot,
int quantity);
78 bool moveSlot(
int fromSlot,
int toSlot);
79 bool splitStack(
int slot,
int quantity,
int toSlot);
80 int countItem(
const std::string &itemId)
const;
81 int findItem(
const std::string &itemId)
const;
95 std::string
getSlotProp(
int slot,
const std::string &key,
const std::string &fallback = {})
const;
96 void setSlotProp(
int slot,
const std::string &key,
const std::string &
value);
97 bool slotHasTag(
int slot,
const std::string &tag)
const;
98 void addSlotTag(
int slot,
const std::string &tag);
101 const std::vector<ItemStack> &
slots()
const {
return slots_; }
102 std::vector<ItemStack> &
slots() {
return slots_; }
103 const std::vector<std::string> &
acceptTags()
const {
return acceptTags_; }
104 const std::vector<std::string> &
rejectTags()
const {
return rejectTags_; }
110 std::string kind_ =
"backpack";
111 float maxWeight_ = 0.f;
112 float maxVolume_ = 0.f;
113 std::string acceptRule_ =
"default";
114 std::string capacityPolicy_ =
"slotsAndWeight";
115 std::string stackRule_ =
"sameItem";
116 std::vector<std::string> acceptTags_;
117 std::vector<std::string> rejectTags_;
118 std::vector<ItemStack> slots_;
119 std::unordered_map<std::string, std::string> extra_;
int getSlotInstanceId(int slot) const
std::string getId() const
容器 id(变更事件定位用)。
float getUsedWeight() const
void setSlotCount(int slotCount)
调整格数:扩容追加空槽;缩容会丢弃被裁掉的槽(不自动转移)。
float getMaxVolume() const
const std::vector< ItemStack > & slots() const
const std::vector< std::string > & rejectTags() const
std::string canAddItemReason(const std::string &itemId, int quantity)
std::string getAcceptTag(int index) const
bool canAddItem(const std::string &itemId, int quantity)
便捷操作(转发 InventorySystem):增删 / 移动 / 查询。
void setSlotDurability(int slot, float durability)
std::string getSlotProp(int slot, const std::string &key, const std::string &fallback={}) const
std::vector< ItemStack > & slots()
int addItem(const std::string &itemId, int quantity)
int getRejectTagCount() const
void addSlotTag(int slot, const std::string &tag)
bool slotHasTag(int slot, const std::string &tag) const
float getMaxWeight() const
重量 / 体积上限(容量策略用)。
bool splitStack(int slot, int quantity, int toSlot)
int removeItem(const std::string &itemId, int quantity)
const std::vector< std::string > & acceptTags() const
std::string getStackRule() const
void setCapacityPolicy(const std::string &name)
int findItem(const std::string &itemId) const
void addRejectTag(const std::string &tag)
void setKind(const std::string &kind)
std::string getKind() const
容器种类(bag / chest / shop 等)。
void setAcceptRule(const std::string &name)
std::string getSlotItemId(int slot) const
void setId(const std::string &id)
bool moveSlot(int fromSlot, int toSlot)
int getSlotCount() const
格数。
int countItem(const std::string &itemId) const
float getUsedVolume() const
int getAcceptTagCount() const
bool swapSlots(int slotA, int slotB)
std::string getExtra(const std::string &key, const std::string &fallback={}) const
std::string getAcceptRule() const
接受规则 / 容量策略 / 堆叠规则名。
int getSlotQuantity(int slot) const
void setExtra(const std::string &key, const std::string &value)
容器级额外属性(键值)。
int removeAt(int slot, int quantity)
void setMaxVolume(float v)
bool isSlotEmpty(int slot) const
float getSlotDurability(int slot) const
void setSlotProp(int slot, const std::string &key, const std::string &value)
void setMaxWeight(float w)
void clearAcceptTags()
可接受 / 拒绝的标签过滤。
int findItemByTag(const std::string &tag) const
std::string getCapacityPolicy() const
Bag & operator=(const Bag &)=delete
void addAcceptTag(const std::string &tag)
int getUsedSlotCount() const
std::string getRejectTag(int index) const
void setStackRule(const std::string &name)
运行时容器:固定格数的背包 / 箱子 / 商店栏等。 行为由 InventorySystem 提供;本类暴露便于脚本绑定的薄封装方法。