creature_questender表

概述

creature_questender表是AzerothCore中定义哪些NPC可以结束(完成)特定任务的关联表。它建立了生物模板与任务之间的结束关系,控制玩家可以在哪些NPC处提交完成的任务。

表格作用

表格结构

字段名 数据类型 默认值 说明
id MEDIUMINT UNSIGNED 0 生物模板ID,对应creature_template.entry
详细说明:生物模板的ID,指定哪个NPC可以结束任务。这是复合主键的一部分。
取值范围:1 - 16777215
关联关系:
  • 必须对应creature_template表中存在的entry
  • 该NPC必须设置了UNIT_NPC_FLAG_QUESTGIVER标志
  • 一个NPC可以结束多个不同的任务
  • 一个任务可以在多个不同的NPC处结束

NPC要求:
  • creature_template.npcflag必须包含2 (UNIT_NPC_FLAG_QUESTGIVER)
  • 通常需要配置gossip_menu_id用于对话
  • 建议设置合适的subname标识其功能
quest MEDIUMINT UNSIGNED 0 任务ID,对应quest_template.ID
详细说明:任务的ID,指定哪个任务可以在此NPC处结束。这是复合主键的一部分。
取值范围:1 - 16777215
关联关系:
  • 必须对应quest_template表中存在的ID
  • 任务必须是可完成的状态
  • 支持主线任务、支线任务、日常任务等所有类型

任务类型支持:
  • 普通任务 - 一次性完成的任务
  • 日常任务 - 每日可重复的任务
  • 周常任务 - 每周可重复的任务
  • 团队任务 - 需要团队协作的任务
  • PvP任务 - 玩家对战相关任务
  • 专业任务 - 与专业技能相关的任务

任务状态要求:
  • 任务必须处于可完成状态
  • 玩家必须满足所有完成条件
  • 背包空间足够接收奖励物品

使用示例

为NPC添加任务结束功能

INSERT INTO creature_questender (id, quest) VALUES (12345, 1001);

批量添加多个任务结束关系

INSERT INTO creature_questender (id, quest) VALUES 
(12345, 1001),
(12345, 1002),
(12345, 1003),
(12346, 1001);

查询特定NPC可以结束的所有任务

SELECT cq.quest, qt.LogTitle 
FROM creature_questender cq
JOIN quest_template qt ON cq.quest = qt.ID
WHERE cq.id = 12345;

查询特定任务可以在哪些NPC处结束

SELECT cq.id, ct.name, ct.subname 
FROM creature_questender cq
JOIN creature_template ct ON cq.id = ct.entry
WHERE cq.quest = 1001;

查找没有结束者的任务

SELECT qt.ID, qt.LogTitle 
FROM quest_template qt
LEFT JOIN creature_questender cq ON qt.ID = cq.quest
WHERE cq.quest IS NULL;

任务结束流程

1. 玩家完成任务目标

2. 寻找任务结束者

3. 提交任务

配置要求

NPC配置要求

-- NPC必须设置任务给予者标志
UPDATE creature_template 
SET npcflag = npcflag | 2 
WHERE entry = 12345;

对话菜单配置

-- 为NPC配置对话菜单
UPDATE creature_template 
SET gossip_menu_id = 50001 
WHERE entry = 12345;

常见问题

为什么NPC不显示任务完成标识?

检查以下配置:

一个任务可以有多个结束者吗?

可以。一个任务可以在多个不同的NPC处结束,这在某些特殊任务中很有用。

如何设置任务链?

通过quest_template表的NextQuestId字段设置后续任务,结合creature_questender和creature_queststarter表控制任务流程。

删除记录会有什么影响?

删除记录后,玩家将无法在对应NPC处完成任务,可能导致任务无法提交。

数据维护

检查孤立的任务结束关系

-- 检查引用不存在NPC的记录
SELECT cq.* FROM creature_questender cq
LEFT JOIN creature_template ct ON cq.id = ct.entry
WHERE ct.entry IS NULL;

-- 检查引用不存在任务的记录
SELECT cq.* FROM creature_questender cq
LEFT JOIN quest_template qt ON cq.quest = qt.ID
WHERE qt.ID IS NULL;

统计NPC的任务数量

SELECT cq.id, ct.name, COUNT(cq.quest) as quest_count
FROM creature_questender cq
JOIN creature_template ct ON cq.id = ct.entry
GROUP BY cq.id, ct.name
ORDER BY quest_count DESC;

相关表格