📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| CreatureID | MEDIUMINT UNSIGNED | 0 | 生物模板ID (主键1) |
| GroupID | TINYINT UNSIGNED | 0 | 文本组ID (主键2) |
| ID | TINYINT UNSIGNED | 0 | 文本ID (主键3) |
| Text | LONGTEXT | NULL | 文本内容 |
| Type | TINYINT UNSIGNED | 0 | 文本类型 |
| Language | TINYINT UNSIGNED | 0 | 语言类型 |
| Probability | FLOAT | 0 | 触发概率(0-100) |
| Emote | MEDIUMINT UNSIGNED | 0 | 表情动作ID |
| Duration | INT UNSIGNED | 0 | 持续时间(毫秒) |
| Sound | INT UNSIGNED | 0 | 声音文件ID |
| BroadcastTextID | INT UNSIGNED | 0 | 广播文本ID |
| TextRange | TINYINT UNSIGNED | 0 | 文本范围 |
| comment | VARCHAR(255) | '' | 注释说明 |
🔑 核心字段详解
🆔 CreatureID - 生物模板ID
详细说明:对应creature_template.entry,指定说话的生物。
取值范围:对应creature_template.entry
- 复合主键的一部分
- 同一生物可有多组不同文本
📁 GroupID - 文本组ID
详细说明:区分同一生物在不同情况下的话语。
取值范围:0 - 255
- 0 - 进入战斗时
- 1 - 死亡时
- 2 - 击杀玩家时
- 3 - 血量低于30%时
- 4 - 血量低于15%时
- 5 - 使用技能时
- 6 - 召唤小怪时
- 7 - 脱离战斗时
📝 ID - 文本ID
详细说明:同一组内的不同文本编号,系统随机选择。
取值范围:0 - 255
- 同一组可有多个文本
- 根据Probability随机触发
- 增加对话多样性
💬 Text - 文本内容
详细说明:NPC说出的具体文本内容。
- 支持玩家名称占位符 %s
- 支持换行符 \n
- 可包含颜色代码
- NULL表示使用BroadcastTextID
📢 Type - 文本类型
详细说明:决定文本如何在游戏中呈现。
- 0 - SAY(普通说话,范围25码)
- 1 - YELL(大喊,范围300码)
- 2 - TEXT_EMOTE(文字表情)
- 3 - BOSS_EMOTE(BOSS表情,全屏)
- 4 - WHISPER(悄悄话,单人)
- 5 - BOSS_WHISPER(BOSS悄悄话)
- 6 - ZONE_YELL(区域大喊)
🌍 Language - 语言类型
详细说明:文本使用的语言,影响不同种族理解能力。
- 0 - UNIVERSAL(通用语,所有人可理解)
- 1 - ORCISH(兽人语)
- 2 - DARNASSIAN(达纳苏斯语)
- 3 - TAURAHE(牛头人语)
- 6 - DWARVISH(矮人语)
- 7 - COMMON(通用语-联盟)
- 8 - DEMONIC(恶魔语)
🎲 Probability - 触发概率
详细说明:文本被选中的概率。
取值范围:0.0 - 100.0
- 100 - 100%触发
- 50 - 50%触发
- 同组内概率独立计算
🎭 Emote - 表情动作ID
详细说明:说话时播放的表情动作。
- 0 - 无动作
- 1 - 说话(TALK)
- 5 - 感叹(EXCLAIM)
- 6 - 疑问(QUESTION)
- 15 - 愤怒(RUDE)
- 18 - 攻击(ATTACK)
- 25 - 指向(POINT)
- 53 - 大笑(LAUGH)
🔊 Sound - 声音文件ID
详细说明:播放的声音文件ID,对应客户端音频资源。
- 0 - 无声音
- 角色配音、战斗喊声
- 技能音效、环境音效
📡 TextRange - 文本范围
详细说明:扩展文本的可见范围。
- 0 - 默认范围(由Type决定)
- 1 - 区域范围
- 2 - 地图范围
- 3 - 世界范围
💡 实际案例
战斗台词 BOSS进入战斗喊话
CreatureID=100001, GroupID=0(进入战斗), Type=1(YELL)
-- BOSS进入战斗喊话
INSERT INTO creature_text VALUES(
100001, 0, 0, '你们这些蠢货竟敢挑战我!', 1, 0, 100, 15, 0, 0, 0, 0, '进入战斗'
);死亡台词 BOSS死亡喊话
CreatureID=100001, GroupID=1(死亡), Type=1(YELL)
-- BOSS死亡喊话
INSERT INTO creature_text VALUES(
100001, 1, 0, '这不可能...我...我是无敌的...', 1, 0, 100, 0, 0, 0, 0, 0, '死亡'
);击杀台词 BOSS击杀玩家喊话
CreatureID=100001, GroupID=2(击杀玩家), Type=1(YELL), 占位符%s
-- BOSS击杀玩家喊话
INSERT INTO creature_text VALUES(
100001, 2, 0, '%s,你的愚蠢让你付出了生命的代价!', 1, 0, 100, 53, 0, 0, 0, 0, '击杀玩家'
);多台词 同一组多条随机台词
CreatureID=100002, GroupID=0, ID=0/1/2三条随机台词
-- 进入战斗随机台词1
INSERT INTO creature_text VALUES(
100002, 0, 0, '谁敢闯入我的领地!', 1, 0, 33, 15, 0, 0, 0, 0, ''
);
-- 进入战斗随机台词2
INSERT INTO creature_text VALUES(
100002, 0, 1, '你们注定要死在这里!', 1, 0, 33, 15, 0, 0, 0, 0, ''
);
-- 进入战斗随机台词3
INSERT INTO creature_text VALUES(
100002, 0, 2, '准备好面对你们的末日吧!', 1, 0, 34, 15, 0, 0, 0, 0, ''
);表情动作 配合表情动作的文本
CreatureID=100003, Type=2(TEXT_EMOTE), Emote=25(指向)
-- 文字表情配合动作
INSERT INTO creature_text VALUES(
100003, 0, 0, '指向北方的道路。', 2, 0, 100, 25, 0, 0, 0, 0, 'NPC指路'
);BOSS提示 BOSS重要技能全屏提示
CreatureID=100004, GroupID=5(技能), Type=3(BOSS_EMOTE)
-- BOSS技能全屏提示
INSERT INTO creature_text VALUES(
100004, 5, 0, '|cFFFF0000BOSS开始释放毁灭之怒!|r', 3, 0, 100, 0, 0, 12345, 0, 0, '技能提示'
);⚡ 快速参考
文本类型Type
| 0 | SAY(25码) |
| 1 | YELL(300码) |
| 2 | TEXT_EMOTE |
| 3 | BOSS_EMOTE |
| 4 | WHISPER |
| 6 | ZONE_YELL |
文本组GroupID
| 0 | 进入战斗 |
| 1 | 死亡 |
| 2 | 击杀玩家 |
| 3 | 血量30% |
| 4 | 血量15% |
| 5 | 使用技能 |
表情动作Emote
| 1 | 说话 |
| 5 | 感叹 |
| 15 | 愤怒 |
| 25 | 指向 |
| 53 | 大笑 |
语言Language
| 0 | 通用语 |
| 1 | 兽人语 |
| 7 | 通用语(联盟) |
| 8 | 恶魔语 |
🔗 相关表格
- creature_template - 生物模板表
- smart_scripts - SmartAI脚本(可触发文本)
❓ 常见问题
Q1: 如何让BOSS在特定阶段说话?
使用SmartAI脚本,在特定事件触发时调用文本组。
Q2: %s占位符是什么意思?
%s会被替换为触发事件的玩家名称。
Q3: 同一组多条文本如何选择?
根据Probability概率随机选择一条。
Q4: 如何添加声音效果?
设置Sound字段为客户端声音文件ID。