npc_text - NPC文本表

NPC文本表存储了NPC与玩家对话时显示的默认文本内容。这些文本通常在玩家与NPC进行基本对话时显示,为游戏世界提供背景信息和氛围。

表结构

字段名 类型 属性 默认值 描述
ID int(10) unsigned 不为空 主键 0 文本的唯一标识符
text0_0 longtext 可为空 NULL 男性角色看到的第一段文本
text0_1 longtext 可为空 NULL 女性角色看到的第一段文本
BroadcastTextId0 int(10) unsigned 不为空 0 第一段文本的广播文本ID
lang0 tinyint(3) unsigned 不为空 0 第一段文本的语言ID
Probability0 float 不为空 0 第一段文本的显示概率
em0_0 smallint(5) unsigned 不为空 0 第一段文本的第一个表情ID
em0_1 smallint(5) unsigned 不为空 0 第一段文本的第二个表情ID
em0_2 smallint(5) unsigned 不为空 0 第一段文本的第三个表情ID
em0_3 smallint(5) unsigned 不为空 0 第一段文本的第四个表情ID
em0_4 smallint(5) unsigned 不为空 0 第一段文本的第五个表情ID
em0_5 smallint(5) unsigned 不为空 0 第一段文本的第六个表情ID

注意: 此表还包含text1_0到text7_1、BroadcastTextId1到BroadcastTextId7等字段,用于存储最多8段不同的文本内容。每段文本都有对应的语言、概率和表情设置。

字段详解

ID

NPC文本的唯一标识符,在gossip_menu表中被引用。

示例值: 1, 100, 1001, 50000

text0_0 / text0_1

分别存储男性和女性角色看到的文本内容。如果只设置了text0_0,则所有角色都会看到相同的文本。

示例文本:

text0_0: "欢迎来到暴风城,勇敢的战士!"
text0_1: "欢迎来到暴风城,美丽的女士!"

BroadcastTextId0

引用broadcast_text表中的ID,用于获取标准化的文本内容。如果设置了此字段,会优先使用broadcast_text中的内容。

lang0

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

常见语言ID:

Probability0

此段文本被选中显示的概率,范围0.0-1.0。当有多段文本时,系统会根据概率随机选择显示哪段。

概率示例:

em0_0 到 em0_5

此段文本对应的表情动作序列,最多可以设置6个表情动作。

常见表情ID:

多段文本系统

文本变化

npc_text表支持为同一个ID设置最多8段不同的文本(text0到text7),系统会根据概率随机选择显示哪段文本,增加对话的多样性。

概率分配

合理设置各段文本的概率:

-- 示例:设置3段文本,概率分别为50%、30%、20%
Probability0 = 0.5  -- 主要文本
Probability1 = 0.3  -- 次要文本
Probability2 = 0.2  -- 偶尔显示的文本

创建示例

简单的NPC文本

INSERT INTO npc_text (ID, text0_0, lang0, Probability0, em0_0, em0_1)
VALUES (1001, '欢迎来到我的商店,$N!看看有什么需要的吗?', 0, 1.0, 2, 1);

性别区分的NPC文本

INSERT INTO npc_text (ID, text0_0, text0_1, lang0, Probability0, em0_0)
VALUES (1002,
        '欢迎,勇敢的战士!',
        '欢迎,美丽的女士!',
        0, 1.0, 2);

多段随机文本

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);

查询示例

查找特定ID的所有文本

SELECT ID, text0_0, text1_0, text2_0, Probability0, Probability1, Probability2
FROM npc_text
WHERE ID = 1003;

查找包含特定关键词的文本

SELECT ID, text0_0
FROM npc_text
WHERE text0_0 LIKE '%欢迎%'
ORDER BY ID;

查找使用broadcast_text的记录

SELECT nt.ID, nt.BroadcastTextId0, bt.MaleText
FROM npc_text nt
JOIN broadcast_text bt ON nt.BroadcastTextId0 = bt.ID
WHERE nt.BroadcastTextId0 > 0;

与对话系统的关联

在gossip_menu中引用

npc_text的ID在gossip_menu表中被引用:

-- 创建对话菜单,引用npc_text
INSERT INTO gossip_menu (MenuId, TextId)
VALUES (12345, 1001);

在creature_template中设置

NPC的默认对话菜单在creature_template中设置:

-- 为NPC设置默认对话菜单
UPDATE creature_template
SET gossip_menu_id = 12345
WHERE entry = 1234;

相关表

常见问题

文本不显示怎么办?

检查以下几点:

如何实现文本的随机变化?

设置多段文本并调整概率:

broadcast_text和直接文本哪个优先?

如果设置了BroadcastTextId,系统会优先使用broadcast_text中的内容,忽略text0_0和text0_1字段。

注意事项