broadcast_text 表
broadcast_text表存储游戏中NPC对话、喊话和系统广播的文本内容,是游戏对话系统的核心数据表。
表概述
broadcast_text表存储了游戏世界中所有NPC对话、喊话、表情动作和音效的关联数据。每条记录对应一个独立的对话条目,包含男女角色文本、关联表情动作、音效ID和语言类型。
主键为 ID,被creature_text、gossip_menu_option、quest_template等多个表引用。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | INT UNSIGNED | 0 | 广播文本唯一ID |
| LanguageID | INT | NULL | 语言ID,决定文本显示的语言 |
| MaleText | LONGTEXT | NULL | 男性角色显示的文本 |
| FemaleText | LONGTEXT | NULL | 女性角色显示的文本 |
| EmoteID1 | INT | NULL | 第一个表情动作ID |
| EmoteID2 | INT | NULL | 第二个表情动作ID |
| EmoteID3 | INT | NULL | 第三个表情动作ID |
| EmoteDelay1 | INT | NULL | 第一个表情的延迟时间(毫秒) |
| EmoteDelay2 | INT | NULL | 第二个表情的延迟时间(毫秒) |
| EmoteDelay3 | INT | NULL | 第三个表情的延迟时间(毫秒) |
| SoundEntriesId | INT | NULL | 关联音效ID |
| EmotesID | INT | NULL | 表情预设组ID |
| Flags | INT | NULL | 控制标志位 |
| VerifiedBuild | SMALLINT | 0 | 验证版本号 |
重要字段详解
MaleText / FemaleText (男女文本)
分别定义男性和女性NPC说话时显示的文本内容。常见用法:
- 两个字段都填写相同内容 → NPC不分性别说相同的话
- 只填写MaleText → 男性NPC有对话,女性NPC无对话
- 分别填写不同内容 → NPC根据性别说不同的台词
文本支持颜色代码和换行符等格式化标记。
LanguageID (语言类型)
定义对话的显示语言:
- 0 - 通用语(联盟)
- 1 - 兽人语(部落)
- 2 - 达纳苏斯语
- 3 - 牛头人语
- 7 - 通用语(双方)
EmoteID1-3 / EmoteDelay1-3 (表情系统)
定义NPC说话时伴随的表情动作。支持最多3个表情:
- EmoteID - 表情动作编号(如1=挥手,11=大笑)
- EmoteDelay - 表情播放的延迟(毫秒),相对对话开始时间
实战案例
查询某生物的对话文本:
SELECT ct.text, bt.MaleText, bt.LanguageID
FROM creature_text ct
JOIN broadcast_text bt ON ct.BroadcastTextId = bt.ID
WHERE ct.CreatureID = 12345
ORDER BY ct.GroupID, ct.ID;
搜索包含特定关键词的对话:
SELECT ID, MaleText
FROM broadcast_text
WHERE MaleText LIKE '%为了联盟%'
LIMIT 20;
添加一条带表情的新对话:
INSERT INTO broadcast_text (ID, LanguageID, MaleText, FemaleText, EmoteID1, EmoteDelay1, SoundEntriesId)
VALUES (99999, 0, '欢迎来到艾泽拉斯,冒险者!', '欢迎来到艾泽拉斯,冒险者!', 2, 1000, 0);
常见问题
Q: NPC说了话但没有显示文本,如何排查?
按以下步骤:
- 检查creature_text中的BroadcastTextId是否正确指向broadcast_text.ID
- 检查broadcast_text中的MaleText/FemaleText是否有内容
- 检查LanguageID是否正确设置
- 检查玩家语言技能是否支持该语言
Q: MaleText和FemaleText有什么实际区别?
当玩家角色是男性时显示MaleText,女性时显示FemaleText。大多数情况下两个字段内容相同。只有少数特殊NPC会根据玩家性别说不同的话。