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段不同的文本内容。每段文本都有对应的语言、概率和表情设置。
NPC文本的唯一标识符,在gossip_menu表中被引用。
示例值: 1, 100, 1001, 50000
分别存储男性和女性角色看到的文本内容。如果只设置了text0_0,则所有角色都会看到相同的文本。
示例文本:
text0_0: "欢迎来到暴风城,勇敢的战士!"
text0_1: "欢迎来到暴风城,美丽的女士!"
引用broadcast_text表中的ID,用于获取标准化的文本内容。如果设置了此字段,会优先使用broadcast_text中的内容。
文本使用的语言ID,对应Languages.dbc中的定义。
常见语言ID:
此段文本被选中显示的概率,范围0.0-1.0。当有多段文本时,系统会根据概率随机选择显示哪段。
概率示例:
此段文本对应的表情动作序列,最多可以设置6个表情动作。
常见表情ID:
npc_text表支持为同一个ID设置最多8段不同的文本(text0到text7),系统会根据概率随机选择显示哪段文本,增加对话的多样性。
合理设置各段文本的概率:
-- 示例:设置3段文本,概率分别为50%、30%、20%
Probability0 = 0.5 -- 主要文本
Probability1 = 0.3 -- 次要文本
Probability2 = 0.2 -- 偶尔显示的文本
INSERT INTO npc_text (ID, text0_0, lang0, Probability0, em0_0, em0_1)
VALUES (1001, '欢迎来到我的商店,$N!看看有什么需要的吗?', 0, 1.0, 2, 1);
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);
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;
SELECT nt.ID, nt.BroadcastTextId0, bt.MaleText
FROM npc_text nt
JOIN broadcast_text bt ON nt.BroadcastTextId0 = bt.ID
WHERE nt.BroadcastTextId0 > 0;
npc_text的ID在gossip_menu表中被引用:
-- 创建对话菜单,引用npc_text
INSERT INTO gossip_menu (MenuId, TextId)
VALUES (12345, 1001);
NPC的默认对话菜单在creature_template中设置:
-- 为NPC设置默认对话菜单
UPDATE creature_template
SET gossip_menu_id = 12345
WHERE entry = 1234;
检查以下几点:
设置多段文本并调整概率:
如果设置了BroadcastTextId,系统会优先使用broadcast_text中的内容,忽略text0_0和text0_1字段。