npc_trainer 表
npc_trainer表定义NPC训练师可教授的技能列表,包括学习费用、前置技能要求和等级限制。
表概述
npc_trainer表管理所有NPC训练师可教授的技能。每个训练师可以有多个可教授技能,每个技能通过(ID, SpellID)组合唯一标识。
主键为 (ID, SpellID),其中ID对应creature_template.entry(训练师NPC的生物ID),SpellID为可学习的技能/法术ID。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | INT UNSIGNED | 0 | 训练师NPC的生物entry ID |
| SpellID | INT | 0 | 可学习的技能/法术ID |
| MoneyCost | INT UNSIGNED | 0 | 学习该技能需要的金币(铜币单位) |
| ReqSkillLine | SMALLINT UNSIGNED | 0 | 前置技能线ID |
| ReqSkillRank | SMALLINT UNSIGNED | 0 | 前置技能等级要求 |
| ReqLevel | TINYINT UNSIGNED | 0 | 学习所需的最低玩家等级 |
| ReqSpell | INT UNSIGNED | 0 | 前置法术要求 |
重要字段详解
ID (训练师NPC ID)
对应creature_template表中的entry值,标识哪个NPC是这个训练师。同一ID可有多条记录,代表该训练师可以教授多个技能。
常见职业训练师:
- 战士训练师:如暴风城的吴平(ID: 5480)
- 法师训练师:如暴风城的艾玛·费尔斯通(ID: 5497)
- 专业技能训练师:附魔、采矿、草药学等
MoneyCost (学习费用,铜币)
学习该技能需要的费用,以铜币为单位。10000 = 1银币,1000000 = 1金币。
转换公式:金币 = MoneyCost / 10000 / 100
ReqSkillLine / ReqSkillRank (前置技能要求)
定义学习该技能的前置专业等级要求:
- ReqSkillLine:需要的前置技能线ID(如锻造=164,工程学=202)
- ReqSkillRank:需要达到的技能等级(如锻造75才能学习)
实战案例
查询某训练师可教授的全部技能:
SELECT nt.ID, nt.SpellID, nt.MoneyCost, nt.ReqLevel, nt.ReqSkillLine, nt.ReqSkillRank
FROM npc_trainer nt
WHERE nt.ID = 3521 -- 卫兵贾斯珀的entry
ORDER BY nt.SpellID;
查询需要前置技能的所有可学技能:
SELECT nt.ID, nt.SpellID, nt.ReqSkillLine, nt.ReqSkillRank
FROM npc_trainer nt
WHERE nt.ReqSkillLine > 0
ORDER BY nt.ReqSkillLine, nt.ReqSkillRank;
为训练师添加新技能(需要10级,花费1金币):
INSERT INTO npc_trainer (ID, SpellID, MoneyCost, ReqSkillLine, ReqSkillRank, ReqLevel, ReqSpell)
VALUES (3521, 10001, 1000000, 0, 0, 10, 0);
常见问题
Q: 训练师不显示技能列表,如何排查?
检查以下几点:
- npc_trainer表中是否有该NPC ID的记录
- SpellID在spell_dbc中是否存在
- 玩家是否满足ReqLevel、ReqSkillLine等条件
- creature_template.npcflag是否包含训练师标志(0x10)
Q: 如何设置技能免费学习?
将对应记录的MoneyCost设为0即可。