npc_vendor表

概述

npc_vendor表是AzerothCore中控制NPC商人销售物品的核心表格。它定义了哪些NPC可以销售哪些物品,以及这些物品的价格、库存数量、补货时间等商业属性。这个表格是游戏经济系统的重要组成部分。

表格作用

表格结构

字段名 数据类型 默认值 说明
entry MEDIUMINT UNSIGNED 0 NPC的模板ID,对应creature_template.entry
slot SMALLINT 0 物品在商人界面中的位置槽位
item MEDIUMINT 0 销售的物品ID,对应item_template.entry
maxcount TINYINT UNSIGNED 0 物品的最大库存数量,0表示无限库存
incrtime INT UNSIGNED 0 库存补货时间间隔(秒),0表示不补货
ExtendedCost MEDIUMINT UNSIGNED 0 扩展货币成本ID,对应ItemExtendedCost.dbc
ConditionID MEDIUMINT UNSIGNED 0 购买条件ID,对应conditions表
PlayerConditionID INT UNSIGNED 0 玩家条件ID,用于更复杂的条件判断
IgnoreFiltering TINYINT UNSIGNED 0 是否忽略过滤条件,1=忽略,0=不忽略
VerifiedBuild SMALLINT 1 验证版本号

字段详细说明

entry (NPC模板ID)

指定哪个NPC模板可以销售物品。这个值必须对应creature_template表中存在的entry值。

常见值:

slot (商品槽位)

控制物品在商人购买界面中的显示顺序。数值越小,显示位置越靠前。

使用建议:

item (物品ID)

指定商人销售的具体物品。必须对应item_template表中存在的entry值。

maxcount (最大库存)

限制商人同时拥有的物品数量。当库存售完后,需要等待补货时间才能再次购买。

常见设置:

incrtime (补货时间)

当库存售完后,多长时间补充一个物品(以秒为单位)。

常见设置:

ExtendedCost (扩展货币成本)

指定使用特殊货币(如荣誉点数、竞技场点数、徽章等)购买物品的成本。对应ItemExtendedCost.dbc文件中的ID。

ConditionID (条件ID)

设置购买物品需要满足的条件,如等级、任务完成状态、声望等级等。对应conditions表中的条件设置。

使用示例

添加基础商品

为暴风城武器商人添加一把基础剑:

INSERT INTO npc_vendor (entry, slot, item, maxcount, incrtime, ExtendedCost, ConditionID)
VALUES (1241, 0, 25, 0, 0, 0, 0);

添加限量商品

添加每天只能购买1个的稀有配方:

INSERT INTO npc_vendor (entry, slot, item, maxcount, incrtime, ExtendedCost, ConditionID)
VALUES (1241, 1, 12345, 1, 86400, 0, 0);

添加需要特殊货币的商品

添加需要荣誉点数购买的PVP装备:

INSERT INTO npc_vendor (entry, slot, item, maxcount, incrtime, ExtendedCost, ConditionID)
VALUES (15126, 0, 16345, 0, 0, 1, 0);

删除商品

从商人那里移除特定物品:

DELETE FROM npc_vendor
WHERE entry = 1241 AND item = 25;

常见问题

如何查看某个NPC销售的所有物品?

SELECT nv.*, it.name
FROM npc_vendor nv
LEFT JOIN item_template it ON nv.item = it.entry
WHERE nv.entry = NPC_ID
ORDER BY nv.slot;

如何查找销售特定物品的所有NPC?

SELECT nv.*, ct.name
FROM npc_vendor nv
LEFT JOIN creature_template ct ON nv.entry = ct.entry
WHERE nv.item = 物品ID;

修改商人数据后需要重启服务器吗?

不需要完全重启服务器,但需要重新加载商人数据:

.reload npc_vendor

如何设置物品的购买价格?

物品价格在item_template表中设置,不在npc_vendor表中:

UPDATE item_template
SET BuyPrice = 新价格
WHERE entry = 物品ID;

为什么我添加的商品没有出现在商人那里?

可能的原因包括:

相关表格

npc_vendor表经常与以下表格配合使用: