creature_text表是AzerothCore中存储生物文本和语音的表格。它定义了NPC在特定情况下说出的话语、表情、声音效果等,为游戏世界增添生动的对话和氛围。
字段名 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
CreatureID | MEDIUMINT UNSIGNED | 0 | 生物模板ID,对应creature_template.entry |
详细说明:生物模板的ID,指定哪个NPC会说这些话。这是复合主键的一部分。
取值范围:1 - 16777215 应用对象:
|
|||
GroupID | TINYINT UNSIGNED | 0 | 文本组ID |
详细说明:文本组的ID,用于区分同一NPC在不同情况下的话语。这是复合主键的一部分。
取值范围:0 - 255 常用分组:
|
|||
ID | TINYINT UNSIGNED | 0 | 文本ID |
详细说明:同一组内的文本ID,用于区分同一情况下的不同话语。这是复合主键的一部分。
取值范围:0 - 255 随机选择:
|
|||
Text | LONGTEXT | NULL | 文本内容 |
详细说明:NPC说出的具体文本内容,支持多语言和特殊格式。
文本格式:
内容建议:
|
|||
Type | TINYINT UNSIGNED | 0 | 文本类型 |
详细说明:文本的显示类型,决定文本如何在游戏中呈现给玩家。
类型定义:
使用场景:
显示效果:
范围差异:
推荐用法:
|
|||
Language | TINYINT UNSIGNED | 0 | 语言类型 |
详细说明:文本使用的语言类型,影响不同种族玩家的理解能力。
语言类型:
使用建议:
|
|||
Probability | FLOAT | 0 | 触发概率 (0-100) |
详细说明:文本被选中的概率,用于控制不同文本的出现频率。
取值范围:0.0 - 100.0 概率计算:
设计策略:
|
|||
Emote | MEDIUMINT UNSIGNED | 0 | 表情动作ID |
详细说明:说话时播放的表情动作,增加视觉效果和表现力。
常用表情:
配合效果:
|
|||
Duration | INT UNSIGNED | 0 | 持续时间(毫秒) |
详细说明:文本显示的持续时间,以毫秒为单位。
时间设置:
设计原则:
|
|||
Sound | INT UNSIGNED | 0 | 声音文件ID |
详细说明:播放的声音文件ID,对应客户端的音频资源。
声音类型:
使用建议:
|
|||
BroadcastTextId | MEDIUMINT UNSIGNED | 0 | 广播文本ID |
详细说明:对应broadcast_text表的ID,用于多语言支持和文本管理。
功能特点:
优先级:
|
|||
TextRange | TINYINT UNSIGNED | 0 | 文本范围类型 |
详细说明:文本的传播范围类型,决定多远的玩家能看到这个文本。
范围类型:
应用场景:
|
|||
Language | TINYINT UNSIGNED | 0 | 语言类型 |
详细说明:文本使用的语言类型,影响不同种族玩家的理解能力。
语言类型:
使用建议:
|
|||
Probability | FLOAT | 0 | 触发概率 (0-100) |
详细说明:文本被选中的概率,用于控制不同文本的出现频率。
取值范围:0.0 - 100.0 概率计算:
设计策略:
|
|||
Emote | MEDIUMINT UNSIGNED | 0 | 表情动作ID |
详细说明:说话时播放的表情动作,增加视觉效果和表现力。
常用表情:
配合效果:
|
|||
Duration | INT UNSIGNED | 0 | 持续时间(毫秒) |
详细说明:文本显示的持续时间,以毫秒为单位。
时间设置:
设计原则:
|
|||
Sound | INT UNSIGNED | 0 | 声音文件ID |
详细说明:播放的声音文件ID,对应客户端的音频资源。
声音类型:
使用建议:
|
|||
BroadcastTextId | MEDIUMINT UNSIGNED | 0 | 广播文本ID |
详细说明:对应broadcast_text表的ID,用于多语言支持和文本管理。
功能特点:
优先级:
|
|||
TextRange | TINYINT UNSIGNED | 0 | 文本范围类型 |
详细说明:文本的传播范围类型,决定多远的玩家能看到这个文本。
范围类型:
应用场景:
|
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);
-- 进入战斗时说话 (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');
// 在战斗开始时说话
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字段来控制。同一组内可以设置多个不同概率的文本,实现随机效果。