载入中...
搜索中...
未找到
Equipment.h
浏览该文件的文档.
1#pragma once
2
3// 具名装备栏:与 Bag 松耦合,穿脱只搬运物品;属性加成由游戏侧 hook/脚本处理。
4
6
7#include <string>
8#include <unordered_map>
9#include <vector>
10
11namespace eve::inventory {
12
13class Bag;
14
16public:
17 EquipmentSet() = default;
18 ~EquipmentSet() = default;
19
20 EquipmentSet(const EquipmentSet &) = delete;
22
23 void destroy();
24
25 std::string getId() const { return id_; }
26 void setId(const std::string &id) { id_ = id; }
27
29 void defineSlot(const std::string &slotName);
30 void clearSlotAllowedTags(const std::string &slotName);
31 void addSlotAllowedTag(const std::string &slotName, const std::string &tag);
32 bool hasSlot(const std::string &slotName) const;
33 int getSlotCount() const;
34 std::string getSlotName(int index) const;
35
36 bool isSlotEmpty(const std::string &slotName) const;
37 std::string getSlotItemId(const std::string &slotName) const;
38 int getSlotQuantity(const std::string &slotName) const;
39 int getSlotInstanceId(const std::string &slotName) const;
40
41 bool canEquipFromBag(Bag *bag, int bagSlot, const std::string &equipSlot,
42 std::string *reason = nullptr) const;
43 bool equipFromBag(const std::string &equipSlot, Bag *bag, int bagSlot);
44 bool unequipToBag(const std::string &equipSlot, Bag *bag);
46 bool clearSlot(const std::string &slotName);
47
48 const ItemStack *stackAt(const std::string &slotName) const;
49 ItemStack *stackAt(const std::string &slotName);
50 const std::vector<std::string> *allowedTags(const std::string &slotName) const;
51
52private:
53 friend class InventorySystem;
54
55 struct Slot {
56 ItemStack stack;
57 std::vector<std::string> allowedTags;
58 };
59
60 std::string id_;
61 std::unordered_map<std::string, Slot> slots_;
62 std::vector<std::string> order_;
63};
64
65} // namespace eve::inventory
std::string id
格子型物品容器(脚本可直接操作)。
Definition Bag.h:17
const std::vector< std::string > * allowedTags(const std::string &slotName) const
Definition Equipment.cpp:78
EquipmentSet & operator=(const EquipmentSet &)=delete
void clearSlotAllowedTags(const std::string &slotName)
Definition Equipment.cpp:20
void setId(const std::string &id)
Definition Equipment.h:26
bool hasSlot(const std::string &slotName) const
Definition Equipment.cpp:33
int getSlotInstanceId(const std::string &slotName) const
Definition Equipment.cpp:62
void addSlotAllowedTag(const std::string &slotName, const std::string &tag)
Definition Equipment.cpp:26
void defineSlot(const std::string &slotName)
声明一个装备槽;已存在则保留当前物品,仅更新允许标签。
Definition Equipment.cpp:12
std::string getSlotName(int index) const
Definition Equipment.cpp:39
bool clearSlot(const std::string &slotName)
直接清空槽位(物品丢弃,不回背包)。
bool equipFromBag(const std::string &equipSlot, Bag *bag, int bagSlot)
bool isSlotEmpty(const std::string &slotName) const
Definition Equipment.cpp:44
std::string getSlotItemId(const std::string &slotName) const
Definition Equipment.cpp:50
const ItemStack * stackAt(const std::string &slotName) const
Definition Equipment.cpp:68
int getSlotQuantity(const std::string &slotName) const
Definition Equipment.cpp:56
std::string getId() const
Definition Equipment.h:25
EquipmentSet(const EquipmentSet &)=delete
bool unequipToBag(const std::string &equipSlot, Bag *bag)
bool canEquipFromBag(Bag *bag, int bagSlot, const std::string &equipSlot, std::string *reason=nullptr) const
Definition Equipment.cpp:83
运行时容器:固定格数的背包 / 箱子 / 商店栏等。 行为由 InventorySystem 提供;本类暴露便于脚本绑定的薄封装方法。
Definition Bag.cpp:6
容器中的一格堆叠(空槽:itemId 为空或 quantity <= 0)。
Definition ItemTypes.h:30