npc_trainer表

概述

npc_trainer表是AzerothCore中控制NPC训练师教授技能和法术的核心表格。它定义了哪些NPC可以教授哪些技能,以及学习这些技能的条件和费用。这个表格是游戏技能学习系统的重要组成部分。

表格作用

表格结构

字段名 数据类型 默认值 说明
ID MEDIUMINT UNSIGNED 0 NPC的模板ID,对应creature_template.entry
SpellID MEDIUMINT UNSIGNED 0 教授的法术ID,对应spell表或DBC中的法术
MoneyCost INT UNSIGNED 0 学习该法术所需的金币费用(铜币)
ReqSkillLine SMALLINT UNSIGNED 0 需要的技能线ID,对应SkillLine.dbc
ReqSkillRank SMALLINT UNSIGNED 0 需要的技能等级
ReqAbility1 MEDIUMINT UNSIGNED 0 前置技能1的法术ID
ReqAbility2 MEDIUMINT UNSIGNED 0 前置技能2的法术ID
ReqAbility3 MEDIUMINT UNSIGNED 0 前置技能3的法术ID
ReqLevel TINYINT UNSIGNED 0 学习该技能需要的最低等级
VerifiedBuild SMALLINT 1 验证版本号

字段详细说明

ID (NPC模板ID)

指定哪个NPC模板可以作为训练师。这个值必须对应creature_template表中存在的entry值。

常见值:

SpellID (法术ID)

指定训练师教授的具体法术或技能。必须对应有效的法术ID。

技能类型:

MoneyCost (金币费用)

学习该法术所需的金币费用,以铜币为单位。

费用参考:

ReqSkillLine (技能线ID)

指定学习该技能需要的技能线。对应SkillLine.dbc文件中的ID。

常见技能线:

ReqSkillRank (技能等级)

学习该技能需要的前置技能等级。

技能等级:

ReqAbility1/2/3 (前置技能)

学习该技能前必须先掌握的其他技能。可以设置最多3个前置技能。

ReqLevel (等级要求)

学习该技能需要的最低角色等级。

使用示例

添加职业技能训练

为法师训练师添加火球术技能:

INSERT INTO npc_trainer (ID, SpellID, MoneyCost, ReqSkillLine, ReqSkillRank, ReqLevel)
VALUES (1317, 133, 100, 0, 0, 1);

添加专业技能训练

为锻造训练师添加高级锻造配方:

INSERT INTO npc_trainer (ID, SpellID, MoneyCost, ReqSkillLine, ReqSkillRank, ReqLevel)
VALUES (5164, 9785, 50000, 164, 200, 35);

添加有前置技能要求的训练

添加需要掌握基础技能才能学习的高级技能:

INSERT INTO npc_trainer (ID, SpellID, MoneyCost, ReqAbility1, ReqLevel)
VALUES (1317, 2136, 1000, 133, 6);

删除训练技能

从训练师那里移除特定技能:

DELETE FROM npc_trainer
WHERE ID = 1317 AND SpellID = 133;

常见问题

如何查看某个NPC教授的所有技能?

SELECT nt.*, st.name
FROM npc_trainer nt
LEFT JOIN spell_template st ON nt.SpellID = st.ID
WHERE nt.ID = NPC_ID
ORDER BY nt.ReqLevel, nt.MoneyCost;

如何查找教授特定技能的所有NPC?

SELECT nt.*, ct.name
FROM npc_trainer nt
LEFT JOIN creature_template ct ON nt.ID = ct.entry
WHERE nt.SpellID = 法术ID;

修改训练师数据后需要重启服务器吗?

不需要完全重启服务器,但需要重新加载训练师数据:

.reload npc_trainer

如何设置职业限制?

职业限制通常在creature_template表的npcflag字段中设置,或者通过conditions表来实现复杂的条件判断。

为什么玩家无法学习某个技能?

可能的原因包括:

相关表格

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