📋 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| id | MEDIUMINT UNSIGNED | 0 | 生物模板ID,对应creature_template.entry |
| quest | MEDIUMINT UNSIGNED | 0 | 任务ID,对应quest_template.ID |
🔍 核心字段详解
id - 生物模板ID
字段说明:指定哪个NPC可以发放任务,这是复合主键的一部分
取值范围:1 - 16777215
关联关系:必须对应creature_template表中存在的entry
取值范围:1 - 16777215
关联关系:必须对应creature_template表中存在的entry
NPC要求:
- creature_template.npcflag必须包含2 (UNIT_NPC_FLAG_QUESTGIVER)
- 通常需要配置gossip_menu_id用于对话
- 建议设置合适的subname标识其功能
- 需要合适的阵营设置以确保玩家可以交互
quest - 任务ID
字段说明:指定哪个任务可以从此NPC处开始,这是复合主键的一部分
取值范围:1 - 16777215
关联关系:必须对应quest_template表中存在的ID
取值范围:1 - 16777215
关联关系:必须对应quest_template表中存在的ID
任务类型支持:
- 普通任务 - 一次性接受的任务
- 日常任务 - 每日可重复接受的任务
- 周常任务 - 每周可重复接受的任务
- 团队任务 - 需要团队协作的任务
- PvP任务 - 玩家对战相关任务
- 专业任务 - 与专业技能相关的任务
- 护送任务 - 需要护送NPC的特殊任务
💡 实际案例
基础 为NPC添加单个任务发放
NPC 12345可以发放任务 1001
INSERT INTO creature_queststarter VALUES(12345, 1001);批量 为NPC添加多个任务发放
NPC 12345可以发放任务 1001、1002、1003
INSERT INTO creature_queststarter VALUES
(12345, 1001),
(12345, 1002),
(12345, 1003);共享 多个NPC发放同一任务
任务 1001可以从NPC 12345或12346处接受
INSERT INTO creature_queststarter VALUES
(12345, 1001),
(12346, 1001);任务链 创建线性任务链
任务1完成后才能接任务2,任务2完成后才能接任务3
-- 任务1由NPC A发放
INSERT INTO creature_queststarter VALUES(12345, 1001);
-- 任务2由NPC B发放,需要完成任务1(在quest_template设置PrevQuestId=1001)
INSERT INTO creature_queststarter VALUES(12346, 1002);
-- 任务3由NPC C发放,需要完成任务2(在quest_template设置PrevQuestId=1002)
INSERT INTO creature_queststarter VALUES(12347, 1003);⚙️ 配置要求
NPC基础配置
-- NPC必须设置任务给予者标志
UPDATE creature_template SET npcflag = npcflag | 2 WHERE entry = 12345;
-- 设置合适的子名称
UPDATE creature_template SET subname = '任务发放者' WHERE entry = 12345;
-- 配置对话菜单
UPDATE creature_template SET gossip_menu_id = 50001 WHERE entry = 12345;
-- 设置友好阵营
UPDATE creature_template SET faction = 35 WHERE entry = 12345;任务显示条件
玩家必须满足以下条件才能看到任务:
- 玩家等级 >= quest_template.MinLevel
- 玩家职业符合quest_template.RequiredClasses
- 玩家阵营符合quest_template.AllowableRaces
- 前置任务已完成(quest_template.PrevQuestId)
- 任务未被标记为已完成
❓ 常见问题
为什么NPC不显示任务标识?
检查以下配置:
- creature_template.npcflag是否包含2 (任务给予者标志)
- creature_queststarter表中是否有对应记录
- 玩家是否满足任务的接受条件
- 任务是否已经被玩家完成或正在进行中
- NPC的阵营是否允许玩家交互
如何设置日常任务?
在quest_template表中设置任务类型:
UPDATE quest_template SET Flags = Flags | 4096 WHERE ID = 任务ID;如何限制任务只对特定职业开放?
-- 限制只有战士(1)和圣骑士(2)可以接受
UPDATE quest_template SET RequiredClasses = 3 WHERE ID = 任务ID;⚡ 快速参考
关键字段
| id | 生物模板ID |
| quest | 任务ID |
NPC标志要求
| npcflag | 必须包含2 |
| gossip_menu_id | 建议配置 |
| faction | 建议友好(35) |
任务类型
| 普通 | 一次性任务 |
| 日常 | Flags=4096 |
| 周常 | Flags=8192 |
🔗 相关表格
- creature_template - 生物模板,定义NPC属性
- creature_questender - 任务结束者关系
- quest_template - 任务模板定义
- gossip_menu - NPC对话菜单
- conditions - 任务条件系统