creature_queststarter表是AzerothCore中定义哪些NPC可以开始(发放)特定任务的关联表。它建立了生物模板与任务之间的开始关系,控制玩家可以从哪些NPC处接受新任务。
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
id | MEDIUMINT UNSIGNED | 0 | 生物模板ID,对应creature_template.entry |
详细说明:生物模板的ID,指定哪个NPC可以发放任务。这是复合主键的一部分。
取值范围:1 - 16777215 关联关系:
NPC要求:
|
|||
quest | MEDIUMINT UNSIGNED | 0 | 任务ID,对应quest_template.ID |
详细说明:任务的ID,指定哪个任务可以从此NPC处开始。这是复合主键的一部分。
取值范围:1 - 16777215 关联关系:
任务类型支持:
任务显示条件:
|
INSERT INTO creature_queststarter (id, quest) VALUES (12345, 1001);
INSERT INTO creature_queststarter (id, quest) VALUES
(12345, 1001),
(12345, 1002),
(12345, 1003),
(12346, 1001);
SELECT cq.quest, qt.LogTitle, qt.MinLevel, qt.QuestLevel
FROM creature_queststarter cq
JOIN quest_template qt ON cq.quest = qt.ID
WHERE cq.id = 12345
ORDER BY qt.MinLevel;
SELECT cq.id, ct.name, ct.subname, ct.minlevel, ct.maxlevel
FROM creature_queststarter cq
JOIN creature_template ct ON cq.id = ct.entry
WHERE cq.quest = 1001;
SELECT qt.ID, qt.LogTitle, qt.MinLevel
FROM quest_template qt
LEFT JOIN creature_queststarter cq ON qt.ID = cq.quest
WHERE cq.quest IS NULL
ORDER BY qt.ID;
-- NPC必须设置任务给予者标志
UPDATE creature_template
SET npcflag = npcflag | 2
WHERE entry = 12345;
-- 设置合适的子名称
UPDATE creature_template
SET subname = '任务发放者'
WHERE entry = 12345;
-- 为NPC配置对话菜单
UPDATE creature_template
SET gossip_menu_id = 50001
WHERE entry = 12345;
-- 设置友好阵营,确保玩家可以交互
UPDATE creature_template
SET faction = 35 -- 友好阵营
WHERE entry = 12345;
-- 任务1 -> 任务2 -> 任务3
-- 任务1由NPC A发放
INSERT INTO creature_queststarter (id, quest) VALUES (12345, 1001);
-- 任务2由NPC B发放,需要完成任务1
INSERT INTO creature_queststarter (id, quest) VALUES (12346, 1002);
-- 在quest_template中设置: UPDATE quest_template SET PrevQuestId = 1001 WHERE ID = 1002;
-- 任务3由NPC C发放,需要完成任务2
INSERT INTO creature_queststarter (id, quest) VALUES (12347, 1003);
-- 在quest_template中设置: UPDATE quest_template SET PrevQuestId = 1002 WHERE ID = 1003;
-- 主线任务完成后,可以选择不同的分支
-- 主线任务
INSERT INTO creature_queststarter (id, quest) VALUES (12345, 1001);
-- 分支A
INSERT INTO creature_queststarter (id, quest) VALUES (12346, 1002);
-- 分支B
INSERT INTO creature_queststarter (id, quest) VALUES (12347, 1003);
-- 两个分支都需要完成主线任务
-- UPDATE quest_template SET PrevQuestId = 1001 WHERE ID IN (1002, 1003);
检查以下配置:
在quest_template表中设置任务类型:
UPDATE quest_template
SET Flags = Flags | 4096 -- QUEST_FLAGS_DAILY
WHERE ID = 任务ID;
-- 限制只有战士和圣骑士可以接受
UPDATE quest_template
SET RequiredClasses = 3 -- 1(战士) + 2(圣骑士) = 3
WHERE ID = 任务ID;
-- 检查引用不存在NPC的记录
SELECT cq.* FROM creature_queststarter cq
LEFT JOIN creature_template ct ON cq.id = ct.entry
WHERE ct.entry IS NULL;
-- 检查引用不存在任务的记录
SELECT cq.* FROM creature_queststarter cq
LEFT JOIN quest_template qt ON cq.quest = qt.ID
WHERE qt.ID IS NULL;
SELECT cq.id, ct.name, ct.subname, COUNT(cq.quest) as quest_count
FROM creature_queststarter cq
JOIN creature_template ct ON cq.id = ct.entry
GROUP BY cq.id, ct.name, ct.subname
ORDER BY quest_count DESC;
-- 查找前置任务不存在的任务
SELECT qt.ID, qt.LogTitle, qt.PrevQuestId
FROM quest_template qt
LEFT JOIN quest_template prev ON qt.PrevQuestId = prev.ID
WHERE qt.PrevQuestId > 0 AND prev.ID IS NULL;