creature_text表

概述

creature_text表是AzerothCore中存储生物文本和语音的表格。它定义了NPC在特定情况下说出的话语、表情、声音效果等,为游戏世界增添生动的对话和氛围。

表格作用

表格结构

字段名 数据类型 默认值 说明
CreatureID MEDIUMINT UNSIGNED 0 生物模板ID,对应creature_template.entry
详细说明:生物模板的ID,指定哪个NPC会说这些话。这是复合主键的一部分。
取值范围:1 - 16777215
应用对象:
  • BOSS - 战斗台词、技能喊话
  • 任务NPC - 任务相关对话
  • 商人NPC - 交易时的话语
  • 守卫NPC - 巡逻时的喊话
  • 剧情NPC - 特殊事件的台词
GroupID TINYINT UNSIGNED 0 文本组ID
详细说明:文本组的ID,用于区分同一NPC在不同情况下的话语。这是复合主键的一部分。
取值范围:0 - 255
常用分组:
  • 0 - 进入战斗时
  • 1 - 死亡时
  • 2 - 击杀玩家时
  • 3 - 血量50%时
  • 4 - 血量25%时
  • 5 - 使用技能时
  • 6 - 召唤小怪时
  • 7 - 脱离战斗时
ID TINYINT UNSIGNED 0 文本ID
详细说明:同一组内的文本ID,用于区分同一情况下的不同话语。这是复合主键的一部分。
取值范围:0 - 255
随机选择:
  • 同一组内可以有多个不同的文本
  • 系统会根据概率随机选择其中一个
  • 增加对话的多样性和趣味性
  • 避免重复听到相同的话语
Text LONGTEXT NULL 文本内容
详细说明:NPC说出的具体文本内容,支持多语言和特殊格式。
文本格式:
  • 支持UTF-8编码的所有字符
  • 可以包含玩家名称占位符 %s
  • 支持颜色代码和格式化
  • 可以使用换行符 \n

内容建议:
  • 符合角色性格和背景
  • 长度适中,不要过长
  • 避免现代用语和网络用语
  • 考虑游戏的世界观设定
Type TINYINT UNSIGNED 0 文本类型
详细说明:文本的显示类型,决定文本如何在游戏中呈现给玩家。
类型定义:
  • 0 - CHAT_TYPE_SAY:普通说话,附近玩家可见
  • 1 - CHAT_TYPE_YELL:大喊,更大范围的玩家可见
  • 2 - CHAT_TYPE_TEXT_EMOTE:文字表情,如"XXX笑了"
  • 3 - CHAT_TYPE_BOSS_EMOTE:BOSS表情,全屏显示
  • 4 - CHAT_TYPE_WHISPER:悄悄话,只有目标玩家可见
  • 5 - CHAT_TYPE_BOSS_WHISPER:BOSS悄悄话
  • 6 - CHAT_TYPE_ZONE_YELL:区域大喊,整个区域可见
  • 12 - CHAT_TYPE_MONSTER_SAY:怪物说话(等同于0)
  • 13 - CHAT_TYPE_MONSTER_PARTY:怪物队伍频道
  • 14 - CHAT_TYPE_MONSTER_YELL:怪物大喊(等同于1)
  • 15 - CHAT_TYPE_MONSTER_WHISPER:怪物悄悄话(等同于4)
  • 16 - CHAT_TYPE_MONSTER_EMOTE:怪物表情(等同于2)

使用场景:
  • SAY (0/12):日常对话、战斗台词、NPC互动
  • YELL (1/14):重要公告、BOSS技能、警告信息
  • TEXT_EMOTE (2/16):动作描述、氛围营造、情感表达
  • BOSS_EMOTE (3):BOSS重要技能提示、阶段转换
  • WHISPER (4/15):私密信息、个人提示、任务指引
  • BOSS_WHISPER (5):BOSS对特定玩家的警告
  • ZONE_YELL (6):区域性事件、世界BOSS出现
  • MONSTER_PARTY (13):怪物之间的交流

显示效果:
  • SAY/MONSTER_SAY:在聊天框显示,带有NPC名称
  • YELL/MONSTER_YELL:在聊天框显示,通常为红色或橙色
  • TEXT_EMOTE/MONSTER_EMOTE:以第三人称形式显示,如"XXX做了某动作"
  • BOSS_EMOTE:在屏幕中央显示大字提示
  • WHISPER/MONSTER_WHISPER:只对目标玩家显示
  • BOSS_WHISPER:对目标玩家显示特殊格式的警告

范围差异:
  • SAY/MONSTER_SAY:范围约25码
  • YELL/MONSTER_YELL:范围约300码
  • ZONE_YELL:整个区域范围
  • BOSS类型:可能覆盖整个地图或副本
  • WHISPER类型:只对目标玩家可见
  • EMOTE类型:根据具体类型有不同范围

推荐用法:
  • 普通NPC对话推荐使用 0 (SAY)
  • BOSS战斗台词推荐使用 1 (YELL)
  • 重要BOSS技能提示使用 3 (BOSS_EMOTE)
  • 个人任务提示使用 4 (WHISPER)
  • 动作描述使用 2 (TEXT_EMOTE)
Language TINYINT UNSIGNED 0 语言类型
详细说明:文本使用的语言类型,影响不同种族玩家的理解能力。
语言类型:
  • 0 - UNIVERSAL:通用语,所有玩家都能理解
  • 1 - ORCISH:兽人语
  • 2 - DARNASSIAN:达纳苏斯语
  • 3 - TAURAHE:牛头人语
  • 6 - DWARVISH:矮人语
  • 7 - COMMON:通用语(联盟)
  • 8 - DEMONIC:恶魔语
  • 9 - TITAN:泰坦语

使用建议:
  • 重要信息使用UNIVERSAL
  • 种族NPC使用对应种族语言
  • 恶魔使用DEMONIC增加神秘感
Probability FLOAT 0 触发概率 (0-100)
详细说明:文本被选中的概率,用于控制不同文本的出现频率。
取值范围:0.0 - 100.0
概率计算:
  • 100.0表示100%触发
  • 50.0表示50%触发
  • 0.0表示永不触发
  • 同组内所有文本的概率独立计算

设计策略:
  • 重要台词设置高概率
  • 幽默台词设置低概率
  • 平衡不同文本的出现频率
Emote MEDIUMINT UNSIGNED 0 表情动作ID
详细说明:说话时播放的表情动作,增加视觉效果和表现力。
常用表情:
  • 0 - 无动作
  • 1 - 说话
  • 5 - 感叹
  • 6 - 疑问
  • 15 - 愤怒
  • 18 - 攻击
  • 25 - 指向
  • 53 - 大笑

配合效果:
  • 文本内容与动作相匹配
  • 增强角色的表现力
  • 提升玩家的沉浸感
Duration INT UNSIGNED 0 持续时间(毫秒)
详细说明:文本显示的持续时间,以毫秒为单位。
时间设置:
  • 0 - 使用默认时间
  • 3000 - 3秒
  • 5000 - 5秒
  • 10000 - 10秒

设计原则:
  • 短文本使用较短时间
  • 重要信息使用较长时间
  • 考虑玩家的阅读速度
Sound INT UNSIGNED 0 声音文件ID
详细说明:播放的声音文件ID,对应客户端的音频资源。
声音类型:
  • 角色配音
  • 战斗喊声
  • 技能音效
  • 环境音效

使用建议:
  • 0表示无声音
  • 重要台词配置声音
  • 确保音频文件存在
  • 音量和音质要合适
BroadcastTextId MEDIUMINT UNSIGNED 0 广播文本ID
详细说明:对应broadcast_text表的ID,用于多语言支持和文本管理。
功能特点:
  • 支持多语言本地化
  • 统一的文本管理
  • 可以包含声音和表情信息
  • 便于文本的批量修改

优先级:
  • 如果设置了BroadcastTextId,优先使用broadcast_text中的内容
  • Text字段作为备用或自定义文本
TextRange TINYINT UNSIGNED 0 文本范围类型
详细说明:文本的传播范围类型,决定多远的玩家能看到这个文本。
范围类型:
  • 0 - 正常范围
  • 1 - 区域范围
  • 2 - 地图范围
  • 3 - 世界范围

应用场景:
  • 正常范围:日常对话
  • 区域范围:重要事件
  • 地图范围:世界BOSS
  • 世界范围:服务器公告
Language TINYINT UNSIGNED 0 语言类型
详细说明:文本使用的语言类型,影响不同种族玩家的理解能力。
语言类型:
  • 0 - UNIVERSAL:通用语,所有玩家都能理解
  • 1 - ORCISH:兽人语
  • 2 - DARNASSIAN:达纳苏斯语
  • 3 - TAURAHE:牛头人语
  • 6 - DWARVISH:矮人语
  • 7 - COMMON:通用语(联盟)
  • 8 - DEMONIC:恶魔语
  • 9 - TITAN:泰坦语

使用建议:
  • 重要信息使用UNIVERSAL
  • 种族NPC使用对应种族语言
  • 恶魔使用DEMONIC增加神秘感
Probability FLOAT 0 触发概率 (0-100)
详细说明:文本被选中的概率,用于控制不同文本的出现频率。
取值范围:0.0 - 100.0
概率计算:
  • 100.0表示100%触发
  • 50.0表示50%触发
  • 0.0表示永不触发
  • 同组内所有文本的概率独立计算

设计策略:
  • 重要台词设置高概率
  • 幽默台词设置低概率
  • 平衡不同文本的出现频率
Emote MEDIUMINT UNSIGNED 0 表情动作ID
详细说明:说话时播放的表情动作,增加视觉效果和表现力。
常用表情:
  • 0 - 无动作
  • 1 - 说话
  • 5 - 感叹
  • 6 - 疑问
  • 15 - 愤怒
  • 18 - 攻击
  • 25 - 指向
  • 53 - 大笑

配合效果:
  • 文本内容与动作相匹配
  • 增强角色的表现力
  • 提升玩家的沉浸感
Duration INT UNSIGNED 0 持续时间(毫秒)
详细说明:文本显示的持续时间,以毫秒为单位。
时间设置:
  • 0 - 使用默认时间
  • 3000 - 3秒
  • 5000 - 5秒
  • 10000 - 10秒

设计原则:
  • 短文本使用较短时间
  • 重要信息使用较长时间
  • 考虑玩家的阅读速度
Sound INT UNSIGNED 0 声音文件ID
详细说明:播放的声音文件ID,对应客户端的音频资源。
声音类型:
  • 角色配音
  • 战斗喊声
  • 技能音效
  • 环境音效

使用建议:
  • 0表示无声音
  • 重要台词配置声音
  • 确保音频文件存在
  • 音量和音质要合适
BroadcastTextId MEDIUMINT UNSIGNED 0 广播文本ID
详细说明:对应broadcast_text表的ID,用于多语言支持和文本管理。
功能特点:
  • 支持多语言本地化
  • 统一的文本管理
  • 可以包含声音和表情信息
  • 便于文本的批量修改

优先级:
  • 如果设置了BroadcastTextId,优先使用broadcast_text中的内容
  • Text字段作为备用或自定义文本
TextRange TINYINT UNSIGNED 0 文本范围类型
详细说明:文本的传播范围类型,决定多远的玩家能看到这个文本。
范围类型:
  • 0 - 正常范围
  • 1 - 区域范围
  • 2 - 地图范围
  • 3 - 世界范围

应用场景:
  • 正常范围:日常对话
  • 区域范围:重要事件
  • 地图范围:世界BOSS
  • 世界范围:服务器公告

使用示例

为BOSS添加战斗台词

INSERT INTO creature_text
(CreatureID, GroupID, ID, Text, Type, Language, Probability, Emote, Duration, Sound)
VALUES
(12345, 0, 0, '你们胆敢挑战我?!', 1, 0, 100.0, 15, 5000, 8825),
(12345, 1, 0, '这...不可能...', 0, 0, 100.0, 18, 3000, 8826);

添加随机对话

INSERT INTO creature_text
(CreatureID, GroupID, ID, Text, Type, Language, Probability, Emote)
VALUES
(12346, 0, 0, '欢迎来到我的商店!', 0, 0, 80.0, 3),
(12346, 0, 1, '今天有什么特别的需要吗?', 0, 0, 60.0, 6),
(12346, 0, 2, '我这里有最好的装备!', 0, 0, 40.0, 25);

脚本调用

在SmartAI中使用

-- 进入战斗时说话 (GroupID 0)
INSERT INTO smart_scripts
(entryorguid, source_type, id, event_type, action_type, action_param1, target_type, comment)
VALUES (12345, 0, 1, 4, 1, 0, 1, 'Boss - On Aggro - Say Text Group 0');

-- 死亡时说话 (GroupID 1)
INSERT INTO smart_scripts
(entryorguid, source_type, id, event_type, action_type, action_param1, target_type, comment)
VALUES (12345, 0, 2, 6, 1, 1, 1, 'Boss - On Death - Say Text Group 1');

在C++脚本中使用

// 在战斗开始时说话
void EnterCombat(Unit* /*who*/) override
{
    Talk(0); // 调用GroupID为0的文本组
}

// 在血量50%时说话
void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
    if (HealthBelowPct(50) && !phase2)
    {
        Talk(3); // 调用GroupID为3的文本组
        phase2 = true;
    }
}

常见问题

文本不显示怎么办?

如何设置多语言支持?

使用BroadcastTextId字段,在broadcast_text表中配置多语言文本。

声音不播放怎么办?

如何控制文本出现频率?

通过调整Probability字段来控制。同一组内可以设置多个不同概率的文本,实现随机效果。

声音不播放怎么办?

相关表格