gossip_menu表

概述

gossip_menu表是AzerothCore中控制NPC对话菜单的核心表格。它定义了NPC与玩家对话时显示的文本内容,是游戏对话系统的基础组件。每个对话菜单都有一个唯一的ID,并关联到具体的文本内容。

表格作用

表格结构

字段名 数据类型 默认值 说明
MenuID SMALLINT UNSIGNED 0 对话菜单的唯一ID
TextID MEDIUMINT UNSIGNED 0 对话文本ID,对应npc_text表
ConditionID MEDIUMINT UNSIGNED 0 显示条件ID,对应conditions表
VerifiedBuild SMALLINT 1 验证版本号

字段详细说明

MenuID (对话菜单ID)

对话菜单的唯一标识符。这个ID在creature_template表的gossip_menu_id字段中被引用。

使用建议:

TextID (文本ID)

指向npc_text表中的文本内容。npc_text表包含了实际的对话文本。

常见用途:

ConditionID (条件ID)

设置显示该对话文本需要满足的条件。对应conditions表中的条件设置。

常见条件:

使用示例

创建基础对话菜单

为NPC创建一个简单的欢迎对话:

INSERT INTO gossip_menu (MenuID, TextID, ConditionID)
VALUES (1000, 1, 0);

创建条件对话菜单

根据任务状态显示不同的对话内容:

-- 任务未接取时的对话
INSERT INTO gossip_menu (MenuID, TextID, ConditionID)
VALUES (1001, 100, 1);

-- 任务进行中的对话
INSERT INTO gossip_menu (MenuID, TextID, ConditionID)
VALUES (1001, 101, 2);

-- 任务完成后的对话
INSERT INTO gossip_menu (MenuID, TextID, ConditionID)
VALUES (1001, 102, 3);

删除对话菜单

移除特定的对话菜单:

DELETE FROM gossip_menu
WHERE MenuID = 1000;

常见问题

如何查看某个菜单的所有文本选项?

SELECT gm.*, nt.text0_0
FROM gossip_menu gm
LEFT JOIN npc_text nt ON gm.TextID = nt.ID
WHERE gm.MenuID = 菜单ID;

如何查找使用特定文本的所有菜单?

SELECT * FROM gossip_menu
WHERE TextID = 文本ID;

修改对话菜单后需要重启服务器吗?

不需要完全重启服务器,但需要重新加载对话数据:

.reload gossip_menu

为什么NPC没有显示对话?

可能的原因包括:

相关表格

gossip_menu表经常与以下表格配合使用: