📖 表说明

游戏事件NPC商贩表定义了事件期间NPC出售的物品。这个表用于在特定事件期间添加或修改NPC的售卖物品列表。

数据来源: 本文档基于AzerothCore官方Wiki和官方数据表借鉴.sql编写。

📊 表结构

字段名数据类型描述
eventEntrytinyint事件ID(主键)
guidint UNSIGNEDNPC GUID(主键)
slotsmallint物品槽位
itemint UNSIGNED物品ID(主键)
maxcountint UNSIGNED最大数量
incrtimeint UNSIGNED补充时间
ExtendedCostint 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表定义事件期间的额外售卖物品。事件激活时,两张表的物品都会显示给玩家。