3.14 pickpocketing_loot_template - 偷窃掉落模板表

偷窃掉落模板表存储了盗贼使用偷窃技能对生物进行偷窃时可能获得的物品信息。这个表定义了物品的掉落几率、数量范围和掉落条件等属性。

表结构

pickpocketing_loot_template表的结构与其他掉落模板表(如creature_loot_template、skinning_loot_template等)完全相同。

字段名 类型 属性 描述
Entry mediumint(8) unsigned 主键,不为空,默认0 生物模板ID,对应creature_template表中的entry字段
Item mediumint(8) unsigned 主键,不为空,默认0 物品ID,对应item_template表中的entry字段
Reference mediumint(8) unsigned 不为空,默认0 引用ID,如果不为0,则引用另一个掉落模板
Chance float 不为空,默认100 掉落几率(百分比)
QuestRequired tinyint(1) unsigned 不为空,默认0 是否需要任务(0=否,1=是)
LootMode smallint(5) unsigned 不为空,默认1 掉落模式
GroupId tinyint(3) unsigned 不为空,默认0 组ID,同一组中只会掉落一个物品
MinCount tinyint(3) unsigned 不为空,默认1 最小数量
MaxCount tinyint(3) unsigned 不为空,默认1 最大数量
Comment varchar(255) 不为空,默认'' 注释

偷窃系统

偷窃是盗贼职业的特殊技能,允许盗贼从某些生物身上偷取物品,而不需要杀死它们。偷窃系统的工作原理如下:

  1. 盗贼需要学习偷窃技能
  2. 盗贼潜行接近目标生物
  3. 盗贼对目标生物使用偷窃技能
  4. 系统检查盗贼的偷窃技能等级是否足够高(基于生物等级)
  5. 如果技能等级足够,系统会查询pickpocketing_loot_template表,根据生物的entry生成掉落物品
  6. 盗贼获得偷窃掉落的物品

注意: 生物是否可偷窃由creature_template表中的pickpocketloot字段决定。如果pickpocketloot大于0,则该生物可以偷窃,且pickpocketloot的值作为pickpocketing_loot_template表中的Entry。

使用示例

添加基础偷窃掉落

以下SQL语句将为人类守卫(ID=1)添加基础偷窃掉落:

INSERT INTO pickpocketing_loot_template (Entry, Item, Chance, MinCount, MaxCount, Comment)
VALUES
(1, 1, 60, 1, 5, '铜币'),
(1, 5, 30, 1, 3, '银币'),
(1, 43, 10, 1, 1, '破损的皮甲');

注意: 还需要确保creature_template表中对应生物的pickpocketloot字段设置为1:

UPDATE creature_template SET pickpocketloot = 1 WHERE entry = 人类守卫的ID;

添加基于等级的偷窃掉落

以下SQL语句将为不同等级的人型生物添加不同的偷窃掉落:

-- 低级人型生物(ID=100)
INSERT INTO pickpocketing_loot_template (Entry, Item, Chance, MinCount, MaxCount, Comment)
VALUES
(100, 1, 80, 1, 10, '铜币'),
(100, 5, 20, 1, 5, '银币');

-- 中级人型生物(ID=101)
INSERT INTO pickpocketing_loot_template (Entry, Item, Chance, MinCount, MaxCount, Comment)
VALUES
(101, 5, 70, 1, 15, '银币'),
(101, 6, 30, 1, 3, '金币');

-- 高级人型生物(ID=102)
INSERT INTO pickpocketing_loot_template (Entry, Item, Chance, MinCount, MaxCount, Comment)
VALUES
(102, 5, 40, 5, 20, '银币'),
(102, 6, 50, 1, 5, '金币'),
(102, 7909, 10, 1, 1, '绿宝石');

添加特殊物品偷窃掉落

以下SQL语句将为特定生物(ID=200)添加特殊物品偷窃掉落:

INSERT INTO pickpocketing_loot_template (Entry, Item, Chance, MinCount, MaxCount, Comment)
VALUES
(200, 5, 50, 1, 20, '银币'),
(200, 6, 30, 1, 5, '金币'),
(200, 8952, 15, 1, 1, '烟草'),
(200, 16885, 5, 1, 1, '重型锁箱');

添加任务物品偷窃掉落

以下SQL语句将为特定生物(ID=300)添加一个任务物品偷窃掉落,只有有相关任务的盗贼才能看到和拾取:

INSERT INTO pickpocketing_loot_template (Entry, Item, Chance, QuestRequired, MinCount, MaxCount, Comment)
VALUES (300, 7907, 100, 1, 1, 1, '军官徽章');

添加引用掉落

以下SQL语句将为特定生物(ID=400)添加引用掉落,引用ID为10003的掉落模板:

INSERT INTO pickpocketing_loot_template (Entry, Item, Reference, Chance, Comment)
VALUES (400, 10003, 10003, 5, '稀有偷窃物品组');

常见问题

如何查找特定生物的偷窃掉落?

使用以下SQL语句查询特定生物的偷窃掉落:

SELECT ct.entry, ct.name, ct.pickpocketloot, pl.Item, it.name, pl.Chance, pl.MinCount, pl.MaxCount
FROM creature_template ct
JOIN pickpocketing_loot_template pl ON ct.pickpocketloot = pl.Entry
JOIN item_template it ON pl.Item = it.entry
WHERE ct.entry = 生物ID;

如何查找特定物品在哪些生物上可以偷窃获得?

使用以下SQL语句查询特定物品在哪些生物上可以偷窃获得:

SELECT ct.entry, ct.name, pl.Chance, pl.MinCount, pl.MaxCount
FROM pickpocketing_loot_template pl
JOIN creature_template ct ON pl.Entry = ct.pickpocketloot
WHERE pl.Item = 物品ID AND ct.pickpocketloot > 0;

修改偷窃掉落后需要重启服务器吗?

不需要完全重启服务器,但需要重新加载掉落模板数据:

.reload all_loot

或者只重新加载偷窃掉落模板:

.reload pickpocketing_loot_template

为什么我无法偷窃某些生物?

可能的原因包括:

如何设置偷窃所需的技能等级?

偷窃所需的技能等级通常基于生物的等级,遵循以下规则:

这个规则是由游戏核心代码控制的,不能通过数据库直接修改。

相关表