📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| SpawnId | INT UNSIGNED | 0 | 生物刷新ID (主键) |
| Ground | TINYINT UNSIGNED | NULL | 地面移动方式 |
| Swim | TINYINT UNSIGNED | NULL | 游泳能力 |
| Flight | TINYINT UNSIGNED | NULL | 飞行能力 |
| Rooted | TINYINT UNSIGNED | NULL | 是否固定不动 |
| Chase | TINYINT UNSIGNED | NULL | 追逐移动方式 |
| Random | TINYINT UNSIGNED | NULL | 随机移动方式 |
| InteractionPauseTimer | INT UNSIGNED | NULL | 交互暂停时间 |
🔑 核心字段详解
🆔 SpawnId - 生物刷新ID
详细说明:对应creature.guid,指定覆盖移动配置的生物实例。
取值范围:对应creature.guid
- 表的主键
- 针对单个生物实例
- 覆盖creature_template_movement的配置
- 优先级高于模板配置
🏃 Ground - 地面移动方式
详细说明:覆盖生物在地面上的移动方式。
取值范围:0 - 2
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | None | 无地面移动能力 |
| 1 | Run | 可以奔跑 |
| 2 | Hover | 悬浮移动 |
🏊 Swim - 游泳能力
详细说明:覆盖生物是否可以在水中游泳。
取值范围:0 - 1
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | None | 不能游泳 |
| 1 | Swim | 可以游泳 |
🦅 Flight - 飞行能力
详细说明:覆盖生物的飞行能力类型。
取值范围:0 - 2
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | None | 不能飞行 |
| 1 | DisableGravity | 禁用重力(推荐) |
| 2 | CanFly | 可以自由飞行(已弃用) |
🌱 Rooted - 固定不动
详细说明:覆盖生物是否被固定在原地。
取值范围:0 - 1
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | None | 可以移动 |
| 1 | Rooted | 固定不动 |
重要配置:
- 死亡不倒地:Ground=1, Swim=0, Flight=0, Rooted=1
- 死亡会倒地:Ground=0, Swim=0, Flight=1, Rooted=1
🎯 Chase - 追逐移动方式
详细说明:覆盖生物追逐目标时的移动方式。
取值范围:0 - 2
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | Run | 总是奔跑追逐 |
| 1 | CanWalk | 可以行走追逐 |
| 2 | AlwaysWalk | 总是行走追逐 |
🎲 Random - 随机移动方式
详细说明:覆盖生物随机巡逻时的移动方式。
取值范围:0 - 2
| 值 | 状态 | 说明 |
|---|---|---|
| 0 | Walk | 总是行走巡逻 |
| 1 | CanRun | 可以奔跑巡逻 |
| 2 | AlwaysRun | 总是奔跑巡逻 |
⏸️ InteractionPauseTimer - 交互暂停时间
详细说明:覆盖与玩家交互后暂停移动的时间。
取值范围:0 - 4294967295 (毫秒)
- 单位:毫秒(ms)
- 0 - 不暂停
- 3000 - 暂停3秒
- 5000 - 暂停5秒
💡 实际案例
覆盖固定 让特定生物实例固定不动
SpawnId=123456, 覆盖为固定不动
INSERT INTO creature_movement_override VALUES(
123456, 1, 0, 0, 1, NULL, NULL, 0
);覆盖飞行 让特定生物实例可以飞行
SpawnId=123457, 覆盖为悬浮飞行
INSERT INTO creature_movement_override VALUES(
123457, 0, 1, 1, 0, 0, 0, 3000
);覆盖游泳 让特定生物实例不能游泳
SpawnId=123458, 覆盖为不能游泳
INSERT INTO creature_movement_override VALUES(
123458, 1, 0, 0, 0, 0, 0, 5000
);覆盖暂停 设置特定NPC的交互暂停时间
SpawnId=123459, 交互后暂停10秒
INSERT INTO creature_movement_override VALUES(
123459, 1, 1, 0, 0, 0, 0, 10000
);查询 查询生物实例的移动覆盖
查询SpawnId=123456的移动覆盖配置
SELECT cmo.SpawnId, c.guid, c.id1, ct.name,
cmo.Ground, cmo.Swim, cmo.Flight, cmo.Rooted,
cmo.Chase, cmo.Random, cmo.InteractionPauseTimer
FROM creature_movement_override cmo
JOIN creature c ON cmo.SpawnId = c.guid
JOIN creature_template ct ON c.id1 = ct.entry
WHERE cmo.SpawnId = 123456;⚡ 快速参考
覆盖优先级
| 模板配置 | creature_template_movement |
| 实例覆盖 | creature_movement_override |
| 优先级 | 覆盖 > 模板 |
地面移动
| 0 | 无地面移动 |
| 1 | 奔跑 |
| 2 | 悬浮 |
游泳能力
| 0 | 不能游泳 |
| 1 | 可以游泳 |
飞行能力
| 0 | 不能飞行 |
| 1 | 禁用重力 |
| 2 | 自由飞行 |
🔗 相关表格
- creature - 生物刷新表
- creature_template_movement - 生物模板移动表
- creature_template - 生物模板表
❓ 常见问题
Q1: 与creature_template_movement的区别?
creature_template_movement针对模板(所有同类生物),creature_movement_override针对单个实例(特定刷新的生物)。
Q2: 何时使用覆盖表?
当需要特定位置的生物有不同于模板的移动行为时使用,如某个NPC需要固定而其他同类NPC可以移动。
Q3: 覆盖表的优先级?
creature_movement_override优先级高于creature_template_movement,会覆盖模板配置。
Q4: NULL值的作用?
NULL表示不覆盖该字段,使用模板的默认配置。只有非NULL值才会覆盖模板配置。