gossip_menu 表
gossip_menu 表是 AzerothCore 中对话系统的核心表格之一。它定义了 NPC 与玩家对话时显示的文本内容。每个对话菜单都有一个唯一的 MenuID,并关联到 npc_text 表中具体的文本内容。
表概述
gossip_menu 表将对话菜单 ID 与文本 ID 关联起来。当玩家与 NPC 互动时,服务器通过 creature_template 中的 gossip_menu_id 查找对应的菜单,然后在本表中找到要显示的文本 ID,再从 npc_text 表中获取实际的对话文本。
该表使用复合主键 (MenuID, TextID),这意味着同一个菜单可以包含多段不同的文本。
MenuID
int unsigned, 主键
对话菜单的唯一标识符
int unsigned, 主键
对话菜单的唯一标识符
TextID
int unsigned, 主键
指向 npc_text 表的文本 ID
int unsigned, 主键
指向 npc_text 表的文本 ID
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| MenuID | int UNSIGNED | 0 | 对话菜单的唯一 ID,在 creature_template.gossip_menu_id 中引用 |
| TextID | int UNSIGNED | 0 | 对应的文本 ID,指向 npc_text 表 |
主键: (MenuID, TextID) | 引擎: InnoDB | 字符集: utf8mb4
重要字段详解
MenuID (对话菜单 ID)
对话菜单的唯一标识符。在 creature_template 表中的 gossip_menu_id 字段中被引用。每个 NPC 通过设置 gossip_menu_id 来指定其对话内容。
- 建议使用连续的 ID 便于管理
- 为不同类型的 NPC 预留不同范围的 ID
- 同一个 MenuID 可以关联多个 TextID,实现多段对话
TextID (文本 ID)
指向 npc_text 表中的具体文本内容。npc_text 表存储了 NPC 对话时显示的实际文本,支持多段随机文本和性别区分。
- 欢迎语 - NPC 的基本问候文本
- 任务对话 - 与任务相关的对话内容
- 商店介绍 - 商人的商品介绍
- 背景故事 - NPC 的背景信息
实战案例
案例1:为 NPC 创建基础对话菜单
为新手村 NPC 创建一个简单的欢迎对话:
-- 在 npc_text 中创建对话文本
INSERT INTO npc_text (ID, text0_0, lang0, Probability0)
VALUES (50001, '欢迎来到艾泽拉斯,冒险者!有什么我可以帮你的吗?', 0, 1.0);
-- 在 gossip_menu 中关联菜单和文本
INSERT INTO gossip_menu (MenuID, TextID)
VALUES (1000, 50001);
-- 在 creature_template 中为 NPC 设置默认对话菜单
UPDATE creature_template SET gossip_menu_id = 1000 WHERE entry = 12345;
案例2:同一菜单关联多个文本(多段对话)
让同一个菜单在不同条件下显示不同文本:
INSERT INTO gossip_menu (MenuID, TextID) VALUES
(2000, 60001), -- 默认对话
(2000, 60002), -- 替代对话1
(2000, 60003); -- 替代对话2
案例3:删除对话菜单
DELETE FROM gossip_menu WHERE MenuID = 1000;
常见问题
Q: 如何查看某个菜单的所有文本?
SELECT gm.*, nt.text0_0
FROM gossip_menu gm
LEFT JOIN npc_text nt ON gm.TextID = nt.ID
WHERE gm.MenuID = 菜单ID;
Q: 修改对话菜单后需要重启服务器吗?
不需要完全重启,使用 GM 命令重载即可:
.reload gossip_menu
Q: NPC 不显示对话怎么办?
- creature_template 表中的 gossip_menu_id 是否已设置
- MenuID 在 gossip_menu 表中是否存在
- TextID 对应的 npc_text 是否存在
- NPC 的 npcflag 是否包含对话标志
相关表格
- npc_text - 存储实际的对话文本内容
- gossip_menu_option - 定义对话菜单中的可选选项
- creature_template - NPC 模板,通过 gossip_menu_id 引用本表
- conditions - 控制对话显示的条件系统