文件概述

ItemBagFamily.dbc 定义了所有容器(背包/袋子)的类型分类。每种背包类型使用位掩码标识 (BagFamily),物品通过 item_template.BagFamily 字段设置可以放入的背包类型。这是一个使用位运算的多选系统,一个物品可以同时放入多种背包。

数据库对应表:world.itembagfamily_dbc

关联关系:itembagfamily_dbc.ID → item_template.BagFamily (位运算) → 限制物品只能放入特定背包。

列结构

序号字段名类型说明
1IDint背包家族唯一ID (主键)。0=无 1=箭袋 2=弹药袋 3=灵魂袋 4=皮革箭袋 5=附魔材料袋 6=草药包 7=附魔包(附魔包) 8=工程学材料包 9=钥匙袋 10=珠宝袋 11=矿石包 12=灵魂袋 13=药水包 14=附魔材料袋 等等
2-17Name_Lang_*varchar(100)背包族类名称多语言文本(16种语言)
18Name_Lang_Maskint名称语言掩码

重要字段详解

常见背包家族类型
ID名称用途位值 (1 << ID)
0无/通用通用背包,无限制0
1箭袋存放箭矢2
2弹药袋存放子弹4
3灵魂袋存放灵魂碎片8
5附魔材料袋存放附魔材料32
6草药包存放草药64
8工程学材料包存放工程学材料256
9钥匙袋存放钥匙512
10珠宝袋存放宝石1024
11矿石包存放矿石2048
13药水包存放药水8192
BagFamily 位运算原理
item_template.BagFamily 使用位掩码来指定物品可放入哪些背包:
  • 每个背包族类的位值 = 2^ID(如:箭袋ID=1,位值=2;弹药袋ID=2,位值=4;灵魂袋ID=3,位值=8)
  • 要允许物品放入多个背包:将各位值相加。如 2+4=6 表示可放入箭袋和弹药袋
  • 要允许放入所有专业背包:32+64+256+1024+2048+8192 = 11616
  • 设为0:物品不限制背包类型,可放入普通背包
  • 在SQL中使用位运算:SELECT * FROM item_template WHERE (BagFamily & 4) = 4; 查可放入弹药袋的物品
专业背包与普通背包
  • 专业背包:有特定的 BagFamily 限制(如附魔材料袋只能放附魔材料)
  • 普通背包:BagFamily=0,可以放入任何类型的物品
  • 背包本身也是物品(item_template.class=1),通过 BagFamily 定义可放入的内容类型
  • 容器(背包)的 BagFamily 定义其类型,物品的 BagFamily 定义其可放入的背包类型

使用技巧

查询所有可放入箭袋的物品:
SELECT it.entry, it.name, it.BagFamily
FROM item_template it
WHERE (it.BagFamily & 2) = 2;  -- 2 = 箭袋位值 (1 << 1)
创建一个新的矿石专用背包:
-- 矿石包的 BagFamily 位值为 2048 (1 << 11)
-- 创建背包物品,设置 BagFamily=2048
INSERT INTO item_template (entry, class, subclass, name, BagFamily, ...)
VALUES (99999, 1, 0, '大矿石包', 2048, ...);
-- 矿石物品的 BagFamily 会包含位值 2048