13#include <unordered_map>
18class InventorySaveSession;
35 std::string
getId()
const {
return id_; }
37 void setId(
const std::string &
id) { id_ =
id; }
40 std::string
getKind()
const {
return kind_; }
47 void setSlotCount(
int slotCount);
72 void clearAcceptTags();
74 void addAcceptTag(
const std::string &
tag);
76 int getAcceptTagCount()
const;
78 std::string getAcceptTag(
int index)
const;
81 void clearRejectTags();
83 void addRejectTag(
const std::string &
tag);
85 int getRejectTagCount()
const;
87 std::string getRejectTag(
int index)
const;
90 void setExtra(
const std::string &
key,
const std::string &
value);
92 std::string getExtra(
const std::string &
key,
const std::string &fallback = {})
const;
95 bool canAddItem(
const std::string &
itemId,
int quantity);
97 std::string canAddItemReason(
const std::string &
itemId,
int quantity);
99 int addItem(
const std::string &
itemId,
int quantity);
101 int removeItem(
const std::string &
itemId,
int quantity);
103 int removeAt(
int slot,
int quantity);
105 bool swapSlots(
int slotA,
int slotB);
107 bool moveSlot(
int fromSlot,
int toSlot);
109 bool splitStack(
int slot,
int quantity,
int toSlot);
111 int countItem(
const std::string &
itemId)
const;
113 int findItem(
const std::string &
itemId)
const;
115 int findItemByTag(
const std::string &
tag)
const;
117 float getUsedWeight()
const;
119 float getUsedVolume()
const;
121 int getUsedSlotCount()
const;
127 bool isSlotEmpty(
int slot)
const;
129 std::string getSlotItemId(
int slot)
const;
131 int getSlotQuantity(
int slot)
const;
133 int getSlotInstanceId(
int slot)
const;
135 float getSlotDurability(
int slot)
const;
137 void setSlotDurability(
int slot,
float durability);
139 std::string getSlotProp(
int slot,
const std::string &
key,
const std::string &fallback = {})
const;
141 void setSlotProp(
int slot,
const std::string &
key,
const std::string &
value);
143 bool slotHasTag(
int slot,
const std::string &
tag)
const;
145 void addSlotTag(
int slot,
const std::string &
tag);
149 const std::vector<ItemStack> &
slots()
const {
return slots_; }
151 std::vector<ItemStack> &
slots() {
return slots_; }
153 const std::vector<std::string> &
acceptTags()
const {
return acceptTags_; }
155 const std::vector<std::string> &
rejectTags()
const {
return rejectTags_; }
162 std::string kind_ =
"backpack";
163 float maxWeight_ = 0.f;
164 float maxVolume_ = 0.f;
165 std::string acceptRule_ =
"default";
166 std::string capacityPolicy_ =
"slotsAndWeight";
167 std::string stackRule_ =
"sameItem";
168 std::vector<std::string> acceptTags_;
169 std::vector<std::string> rejectTags_;
170 std::vector<ItemStack> slots_;
171 std::unordered_map<std::string, std::string> extra_;
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
std::string getId() const
容器 id(变更事件定位用)。
float getMaxVolume() const
Returns the max volume.
const std::vector< ItemStack > & slots() const
Slots.
const std::vector< std::string > & rejectTags() const
Reject tags.
std::vector< ItemStack > & slots()
Slots.
float getMaxWeight() const
重量 / 体积上限(容量策略用)。
const std::vector< std::string > & acceptTags() const
Accept tags.
std::string getStackRule() const
Returns the stack rule.
void setCapacityPolicy(const std::string &name)
Sets the capacity policy.
void setKind(const std::string &kind)
Sets the kind.
std::string getKind() const
容器种类(bag / chest / shop 等)。
void setAcceptRule(const std::string &name)
Sets the accept rule.
void setId(const std::string &id)
Sets the id.
int getSlotCount() const
格数。
std::string getAcceptRule() const
接受规则 / 容量策略 / 堆叠规则名。
void setMaxVolume(float v)
Sets the max volume.
void setMaxWeight(float w)
Sets the max weight.
std::string getCapacityPolicy() const
Returns the capacity policy.
Bag & operator=(const Bag &)=delete
void setStackRule(const std::string &name)
Sets the stack rule.
Coordinates persistent inventory owners without duplicating their live state.
EVENGINE_API_FOUNDATION public API.
运行时容器:固定格数的背包 / 箱子 / 商店栏等。 行为由 InventorySystem 提供;本类暴露便于脚本绑定的薄封装方法。