item_instance 表

物品实例表 · 存储每个物品的具体属性和状态

📖 官方文档来源

📖表概述

item_instance 表存储游戏中每个物品实例的全部属性数据。与 character_inventory 表不同,本表存储的是物品本身的属性,而非物品的位置:

💡 核心概念:每个物品在数据库中是一个实例,由 guid 唯一标识。itemEntry 指向 World 数据库中的 item_template.entry 来获取物品的模板定义。
🎯 关联关系:guidcharacter_inventory.item(物品位置),owner_guidcharacters.guid(拥有者),itemEntry → World数据库 item_template.entry(物品模板)。

📋完整表结构

📦 基本字段

字段名类型默认值说明
guidINT UNSIGNED0物品全局唯一ID,主键
itemEntryINT UNSIGNED0物品条目ID(关联 World 库 item_template.entry)
owner_guidINT UNSIGNED0当前拥有者角色GUID
countINT UNSIGNED1物品堆叠数量
durationINT0物品剩余存在时间(秒),0=永久
chargesTINYTEXTNULL物品使用次数/充能数据(序列化)
flagsINT UNSIGNED0物品标记(灵魂绑定、可退款、包裹等)
durabilitySMALLINT UNSIGNED0当前耐久度
playedTimeINT UNSIGNED0物品已装备游戏时间

🛠️ 创建者字段

字段名类型默认值说明
creatorGuidINT UNSIGNED0制造者角色GUID(谁制造了这个物品)
giftCreatorGuidINT UNSIGNED0礼物创建者GUID(用于礼品包装物品)

✨ 附魔与属性

字段名类型默认值说明
enchantmentsTEXT-附魔数据(序列化存储,包含所有附魔槽位)
randomPropertyIdSMALLINT0随机属性ID(如"...的雄鹰"等)
spellsTEXTNULL物品附带技能数据
statsTEXTNULL物品属性/统计信息
damagesTEXTNULL物品伤害数据

🔧 自定义/扩展字段

字段名类型默认值说明
textTEXTNULL物品自定义文本
nameVARCHAR(250)NULL物品自定义名称(覆盖模板名称)
leveldataBIGINTNULL物品等级相关数据
delayINTNULL武器攻击延迟
mapdataBIGINTNULL地图相关数据
unbindTINYINTNULL解绑标记(是否可解除绑定)
tempindexINTNULL临时索引
exFlagsBIGINT0扩展标记(如提取装备附魔后指定位置,0=不限制)
randSpellVARCHAR(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=不限制提取位置,可用于自定义附魔提取逻辑。