npc_text 表
npc_text 表(NPC 文本表)存储了 NPC 与玩家对话时显示的默认文本内容。这些文本通常在玩家与 NPC 进行基本对话时显示,为游戏世界提供丰富的背景信息和氛围。该表支持最多 8 段不同的文本变体(text0 到 text7),每段文本还可按性别区分显示。
表概述
npc_text 表是 AzerothCore 对话系统的文本存储核心。它支持最多 8 段文本变体,系统会根据概率(Probability)随机选择一段文本显示给玩家,增加对话的多样性。每段文本还可以为男性和女性角色设置不同的文本内容。
每个文本段还包含语言设置(lang)、广播文本引用(BroadcastTextID)以及最多 6 个表情动作(em0_0 到 em0_5),让 NPC 在对话时做出相应的肢体动作。
int unsigned, 主键
文本唯一标识符
longtext
第0段文本(男/女)
float
第0段文本的显示概率
smallint unsigned
对话时的表情动作序列
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | int UNSIGNED | 0 | 文本唯一标识符,主键 |
| text0_0 | longtext | NULL | 第0段文本 - 男性角色看到的内容 |
| text0_1 | longtext | NULL | 第0段文本 - 女性角色看到的内容 |
| BroadcastTextID0 | int | 0 | 第0段文本对应的广播文本 ID |
| lang0 | tinyint UNSIGNED | 0 | 第0段文本的语言 ID |
| Probability0 | float | 0 | 第0段文本被选中的概率 (0.0-1.0) |
| em0_0 | smallint UNSIGNED | 0 | 第0段文本的第1个表情动作 |
| em0_1 | smallint UNSIGNED | 0 | 第0段文本的第2个表情动作 |
| em0_2 | smallint UNSIGNED | 0 | 第0段文本的第3个表情动作 |
| em0_3 | smallint UNSIGNED | 0 | 第0段文本的第4个表情动作 |
| em0_4 | smallint UNSIGNED | 0 | 第0段文本的第5个表情动作 |
| em0_5 | smallint UNSIGNED | 0 | 第0段文本的第6个表情动作 |
| ... text1_0 到 text7_5 字段组(共 8 组,结构同上)... | |||
| VerifiedBuild | int | NULL | 验证的客户端版本号 |
主键: ID | 引擎: InnoDB | 字符集: utf8mb4
注意:本表包含 8 组文本字段(text0 ~ text7),每组都包含 textX_0、textX_1、BroadcastTextIDX、langX、ProbabilityX 以及 6 个 emX_0~5 表情字段。总共 8 × 12 = 96 个数据字段。
重要字段详解
NPC 文本的唯一标识符,在 gossip_menu 表的 TextID 字段中被引用。建议使用连续编号便于管理。
textX_0 存储男性角色看到的文本,textX_1 存储女性角色看到的文本。如果只设置了 textX_0,则所有角色都看到相同的文本。如果 textX_1 也为空,则使用 textX_0 的内容。
引用 broadcast_text 表中的 ID。如果设置了此字段(>0),系统会优先使用 broadcast_text 中的标准文本内容,忽略 textX_0 和 textX_1 的本地文本。这是暴雪官方数据的主要文本存储方式。
文本使用的语言 ID,对应 Languages.dbc 中的定义:
- 0 通用语(联盟通用语)
- 1 兽人语
- 2 达纳苏斯语
- 3 牛头人语
- 6 矮人语
- 7 通用语(部落通用语)
- 8 萨拉斯语
- 10 龙语
该段文本被选中的概率,范围 0.0-1.0。当有多段文本时,系统根据概率随机选择:
- 1.0 100% 显示此文本
- 0.5 50% 概率显示
- 0.1 10% 概率显示
所有文本段的概率之和不应超过 1.0。系统会从概率总和 >0 的文本段中加权随机选择。
对话时 NPC 做出的表情动作序列,最多 6 个。常用表情 ID:
- 1 说话 (ONESHOT_TALK)
- 2 鞠躬 (ONESHOT_BOW)
- 3 挥手 (ONESHOT_WAVE)
- 4 欢呼 (ONESHOT_CHEER)
- 5 大声欢呼 (ONESHOT_EXCLAMATION)
- 6 疑问 (ONESHOT_QUESTION)
- 25 点头 (ONESHOT_POINT)
- 66 敬礼 (ONESHOT_SALUTE)
实战案例
案例1:创建简单的 NPC 对话
INSERT INTO npc_text (ID, text0_0, lang0, Probability0, em0_0, em0_1)
VALUES (1001, '欢迎来到我的商店,勇敢的冒险者!看看有什么需要的吗?', 0, 1.0, 2, 1);
案例2:性别区分的 NPC 对话
INSERT INTO npc_text (ID, text0_0, text0_1, lang0, Probability0, em0_0)
VALUES (1002,
'欢迎,勇敢的战士!', -- 男性玩家看到的文本
'欢迎,美丽的女士!', -- 女性玩家看到的文本
0, 1.0, 2);
案例3:多段随机文本
INSERT INTO npc_text (ID,
text0_0, Probability0, em0_0,
text1_0, Probability1, em1_0,
text2_0, Probability2, em2_0)
VALUES (1003,
'今天天气真不错!', 0.4, 1,
'最近生意很忙呢!', 0.4, 1,
'你看起来很疲惫,要休息一下吗?', 0.2, 6);
案例4:带丰富表情的对话
INSERT INTO npc_text (ID, text0_0, lang0, Probability0,
em0_0, em0_1, em0_2, em0_3)
VALUES (1004,
'欢迎来到暴风城!这里是联盟的中心。',
0, 1.0,
66, -- 敬礼
2, -- 鞠躬
1, -- 说话
25); -- 点头
常见问题
- ID 是否在 gossip_menu 表中被正确引用
- text0_0 和 text0_1 是否都为空
- Probability0 是否大于 0
- BroadcastTextID 引用的广播文本是否存在
如果设置了 BroadcastTextID(>0),系统会优先使用 broadcast_text 中的内容,忽略 textX_0 和 textX_1 字段。这是 3.3.5 版本的主要文本方式。
.reload npc_text
相关表格
- gossip_menu - 通过 TextID 引用本表
- gossip_menu_option - 对话菜单选项
- npc_text_locale - NPC 文本本地化表
- broadcast_text - 广播文本表
- creature_template - NPC 模板定义