表概述

npc_text 表是 AzerothCore 对话系统的文本存储核心。它支持最多 8 段文本变体,系统会根据概率(Probability)随机选择一段文本显示给玩家,增加对话的多样性。每段文本还可以为男性和女性角色设置不同的文本内容。

每个文本段还包含语言设置(lang)、广播文本引用(BroadcastTextID)以及最多 6 个表情动作(em0_0 到 em0_5),让 NPC 在对话时做出相应的肢体动作。

ID
int unsigned, 主键
文本唯一标识符
text0_0/1
longtext
第0段文本(男/女)
Probability0
float
第0段文本的显示概率
em0_0~5
smallint unsigned
对话时的表情动作序列

表结构

字段名数据类型默认值说明
IDint UNSIGNED0文本唯一标识符,主键
text0_0longtextNULL第0段文本 - 男性角色看到的内容
text0_1longtextNULL第0段文本 - 女性角色看到的内容
BroadcastTextID0int0第0段文本对应的广播文本 ID
lang0tinyint UNSIGNED0第0段文本的语言 ID
Probability0float0第0段文本被选中的概率 (0.0-1.0)
em0_0smallint UNSIGNED0第0段文本的第1个表情动作
em0_1smallint UNSIGNED0第0段文本的第2个表情动作
em0_2smallint UNSIGNED0第0段文本的第3个表情动作
em0_3smallint UNSIGNED0第0段文本的第4个表情动作
em0_4smallint UNSIGNED0第0段文本的第5个表情动作
em0_5smallint UNSIGNED0第0段文本的第6个表情动作
... text1_0 到 text7_5 字段组(共 8 组,结构同上)...
VerifiedBuildintNULL验证的客户端版本号

主键: ID | 引擎: InnoDB | 字符集: utf8mb4

注意:本表包含 8 组文本字段(text0 ~ text7),每组都包含 textX_0、textX_1、BroadcastTextIDX、langX、ProbabilityX 以及 6 个 emX_0~5 表情字段。总共 8 × 12 = 96 个数据字段。

重要字段详解

ID (文本 ID)

NPC 文本的唯一标识符,在 gossip_menu 表的 TextID 字段中被引用。建议使用连续编号便于管理。

textX_0 与 textX_1 (性别文本)

textX_0 存储男性角色看到的文本,textX_1 存储女性角色看到的文本。如果只设置了 textX_0,则所有角色都看到相同的文本。如果 textX_1 也为空,则使用 textX_0 的内容。

BroadcastTextIDX (广播文本引用)

引用 broadcast_text 表中的 ID。如果设置了此字段(>0),系统会优先使用 broadcast_text 中的标准文本内容,忽略 textX_0 和 textX_1 的本地文本。这是暴雪官方数据的主要文本存储方式。

langX (语言)

文本使用的语言 ID,对应 Languages.dbc 中的定义:

  • 0 通用语(联盟通用语)
  • 1 兽人语
  • 2 达纳苏斯语
  • 3 牛头人语
  • 6 矮人语
  • 7 通用语(部落通用语)
  • 8 萨拉斯语
  • 10 龙语
ProbabilityX (显示概率)

该段文本被选中的概率,范围 0.0-1.0。当有多段文本时,系统根据概率随机选择:

  • 1.0 100% 显示此文本
  • 0.5 50% 概率显示
  • 0.1 10% 概率显示

所有文本段的概率之和不应超过 1.0。系统会从概率总和 >0 的文本段中加权随机选择。

emX_0 ~ emX_5 (表情动作)

对话时 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); -- 点头

常见问题

Q: 文本不显示怎么办?
  • ID 是否在 gossip_menu 表中被正确引用
  • text0_0 和 text0_1 是否都为空
  • Probability0 是否大于 0
  • BroadcastTextID 引用的广播文本是否存在
Q: BroadcastTextID 和直接文本哪个优先?

如果设置了 BroadcastTextID(>0),系统会优先使用 broadcast_text 中的内容,忽略 textX_0 和 textX_1 字段。这是 3.3.5 版本的主要文本方式。

Q: 修改后如何重新加载?
.reload npc_text

相关表格