📖 表说明
游戏事件NPC商贩表定义了事件期间NPC出售的物品。这个表用于在特定事件期间添加或修改NPC的售卖物品列表。
数据来源: 本文档基于AzerothCore官方Wiki和官方数据表借鉴.sql编写。
📊 表结构
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| eventEntry | tinyint | 事件ID(主键) |
| guid | int UNSIGNED | NPC GUID(主键) |
| slot | smallint | 物品槽位 |
| item | int UNSIGNED | 物品ID(主键) |
| maxcount | int UNSIGNED | 最大数量 |
| incrtime | int UNSIGNED | 补充时间 |
| ExtendedCost | int UNSIGNED | 扩展花费 |
主键: eventEntry + guid + item(联合主键)
🔍 重要字段详解
eventEntry (事件ID)
关联的游戏事件ID,对应game_event表的eventEntry字段。此字段是联合主键的组成部分。
事件ID决定了这些商人物品在哪个节日/活动期间生效。常见事件ID:
- 1 - 仲夏火焰节
- 2 - 冬幕节
- 7 - 暗月马戏团
- 12 - 美酒节
maxcount / incrtime (库存管理)
控制事件商人物品的库存限制和刷新机制:
- maxcount = 0 - 无限库存,永远不会卖完
- maxcount > 0, incrtime = 0 - 有限库存,不自动刷新(需要事件重启才重置)
- maxcount > 0, incrtime > 0 - 有限库存,按incrtime秒数定时刷新补充
例如:maxcount=5, incrtime=3600 表示库存5个,每小时刷新一次。
ExtendedCost (扩展价格)
定义物品使用的扩展价格ID,对应ItemExtendedCost.dbc。非0值时物品不会使用默认金币价格,而是使用自定义货币购买。
常见用途:节日期间需要节日代币购买的物品,如火焰花需要燃烧之花购买。
💡 实战案例
查询冬幕节事件中某NPC出售的所有物品:
SELECT genv.slot, genv.item, it.name, genv.maxcount, genv.incrtime, genv.ExtendedCost
FROM game_event_npc_vendor genv
JOIN item_template it ON genv.item = it.entry
WHERE genv.eventEntry = 2 AND genv.guid = 50001
ORDER BY genv.slot;
为火焰节NPC添加节日限定出售物品:
INSERT INTO game_event_npc_vendor (eventEntry, guid, slot, item, maxcount, incrtime, ExtendedCost)
VALUES (1, 50001, 0, 23246, 5, 3600, 0);
❓ 常见问题
Q: 事件结束后NPC还会出售这些物品吗?
不会。游戏事件系统在事件结束时自动移除这些事件专属的出售物品。事件结束后NPC恢复其正常(非事件)售卖列表。
Q: 同一个NPC在事件和非事件期间可以有不同的售卖列表吗?
可以。npc_vendor表定义NPC的常规售卖列表,game_event_npc_vendor表定义事件期间的额外售卖物品。事件激活时,两张表的物品都会显示给玩家。