item_instance 表
物品实例表 · 存储每个物品的具体属性和状态
📖 官方文档来源表概述
item_instance 表存储游戏中每个物品实例的全部属性数据。与 character_inventory 表不同,本表存储的是物品本身的属性,而非物品的位置:
- 📦 物品类型
- ✨ 附魔数据
- 🔧 耐久度
- 🎲 随机属性
- ⏱️ 持续时间
- 🛠️ 制造者信息
💡 核心概念:每个物品在数据库中是一个实例,由
guid 唯一标识。itemEntry 指向 World 数据库中的 item_template.entry 来获取物品的模板定义。
🎯 关联关系:
guid → character_inventory.item(物品位置),owner_guid → characters.guid(拥有者),itemEntry → World数据库 item_template.entry(物品模板)。
完整表结构
📦 基本字段
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | INT UNSIGNED | 0 | 物品全局唯一ID,主键 |
| itemEntry | INT UNSIGNED | 0 | 物品条目ID(关联 World 库 item_template.entry) |
| owner_guid | INT UNSIGNED | 0 | 当前拥有者角色GUID |
| count | INT UNSIGNED | 1 | 物品堆叠数量 |
| duration | INT | 0 | 物品剩余存在时间(秒),0=永久 |
| charges | TINYTEXT | NULL | 物品使用次数/充能数据(序列化) |
| flags | INT UNSIGNED | 0 | 物品标记(灵魂绑定、可退款、包裹等) |
| durability | SMALLINT UNSIGNED | 0 | 当前耐久度 |
| playedTime | INT UNSIGNED | 0 | 物品已装备游戏时间 |
🛠️ 创建者字段
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| creatorGuid | INT UNSIGNED | 0 | 制造者角色GUID(谁制造了这个物品) |
| giftCreatorGuid | INT UNSIGNED | 0 | 礼物创建者GUID(用于礼品包装物品) |
✨ 附魔与属性
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| enchantments | TEXT | - | 附魔数据(序列化存储,包含所有附魔槽位) |
| randomPropertyId | SMALLINT | 0 | 随机属性ID(如"...的雄鹰"等) |
| spells | TEXT | NULL | 物品附带技能数据 |
| stats | TEXT | NULL | 物品属性/统计信息 |
| damages | TEXT | NULL | 物品伤害数据 |
🔧 自定义/扩展字段
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| text | TEXT | NULL | 物品自定义文本 |
| name | VARCHAR(250) | NULL | 物品自定义名称(覆盖模板名称) |
| leveldata | BIGINT | NULL | 物品等级相关数据 |
| delay | INT | NULL | 武器攻击延迟 |
| mapdata | BIGINT | NULL | 地图相关数据 |
| unbind | TINYINT | NULL | 解绑标记(是否可解除绑定) |
| tempindex | INT | NULL | 临时索引 |
| exFlags | BIGINT | 0 | 扩展标记(如提取装备附魔后指定位置,0=不限制) |
| randSpell | VARCHAR(255) | NULL | 随机技能数据 |
快速参考
核心字段
| guid | 主键(全局唯一) |
| itemEntry | 物品模板ID |
| owner_guid | 拥有者角色 |
| count | 堆叠数量 |
| duration | 剩余时间 |
| flags | 物品标记 |
创建者信息
| creatorGuid | 制造者 |
| giftCreatorGuid | 赠礼者 |
| owner_guid | 当前拥有者 |
附魔/属性
| enchantments | 附魔数据 |
| randomPropertyId | 随机后缀 |
| durability | 耐久度 |
| charges | 使用次数 |
关联表
| character_inventory | 通过 guid → item |
| characters | 通过 owner_guid → guid |
| item_template (World) | 通过 itemEntry → entry |
实际案例
查询 查看角色拥有的所有物品详细信息
SELECT ii.guid, ii.itemEntry, ii.count, ii.durability,
ii.flags, ci.bag, ci.slot
FROM item_instance ii
JOIN character_inventory ci ON ii.guid = ci.item
WHERE ii.owner_guid = 1
ORDER BY ci.bag, ci.slot;查询 查找拥有附魔物品的角色
-- 查找所有拥有附魔物品的角色(enchantments不为空字符串)
SELECT DISTINCT c.name, c.level, COUNT(ii.guid) AS enchanted_items
FROM item_instance ii
JOIN characters c ON ii.owner_guid = c.guid
WHERE ii.enchantments != ''
AND ii.enchantments IS NOT NULL
GROUP BY c.guid, c.name, c.level
ORDER BY enchanted_items DESC
LIMIT 20;查询 查看角色制造的所有物品(谁在用我做的装备)
-- 查找由某角色制造、但被其他角色拥有的物品
SELECT ii.guid, ii.itemEntry, ii.count,
maker.name AS crafted_by,
owner.name AS owned_by
FROM item_instance ii
JOIN characters maker ON ii.creatorGuid = maker.guid
JOIN characters owner ON ii.owner_guid = owner.guid
WHERE ii.creatorGuid = 1
AND ii.owner_guid != 1;清理 查找并清理过期物品
-- 查找持续时间不为0且可能已过期的物品
SELECT ii.guid, ii.itemEntry, ii.owner_guid, ii.duration,
c.name AS owner_name
FROM item_instance ii
JOIN characters c ON ii.owner_guid = c.guid
WHERE ii.duration > 0;
-- 删除过期物品(请谨慎操作!)
-- 建议先运行查询确认后,再决定是否删除统计 物品拥有量TOP排行
-- 统计各物品条目的实例数量(跨所有角色)
SELECT itemEntry, COUNT(*) AS instance_count,
COUNT(DISTINCT owner_guid) AS owner_count
FROM item_instance
GROUP BY itemEntry
ORDER BY instance_count DESC
LIMIT 20;维护 清理无主物品(孤儿物品)
-- 查找 owner_guid 不存在于 characters 表中的物品
SELECT ii.guid, ii.itemEntry, ii.owner_guid
FROM item_instance ii
LEFT JOIN characters c ON ii.owner_guid = c.guid
WHERE c.guid IS NULL;
-- 建议:同时检查 character_inventory 表中是否还有引用常见问题
Q1: item_instance 和 character_inventory 怎么配合工作?
item_instance 存储物品的属性(是什么、几个、耐久多少),character_inventory 存储物品的位置(在哪个角色的哪个槽位)。两者通过 item_instance.guid = character_inventory.item 关联。
Q2: duration 字段为0代表什么?
duration=0 表示物品是永久的,不会过期。正数表示物品剩余的秒数,到期后物品会被系统删除。
Q3: enchantments 字段的格式是什么?
enchantments 以序列化文本格式存储,包含每个附魔槽位的附魔ID、持续时间、充能等数据。格式由服务端代码解析,不建议直接手动编辑。
Q4: randomPropertyId 的作用?
这是魔兽世界中随机后缀物品(如"...的雄鹰"、"...的野猪")的随机属性ID。0表示该物品没有随机属性。
Q5: creatorGuid 和 giftCreatorGuid 的区别?
creatorGuid 记录制造该物品的玩家,giftCreatorGuid 用于礼品包装系统,记录送礼者的GUID。这两个字段为0表示没有相关的制造者或赠礼者信息。
Q6: exFlags 的作用是什么?
这是一个扩展标记字段,常用于提取装备附魔后指定位置。0=不限制提取位置,可用于自定义附魔提取逻辑。