📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | INT UNSIGNED | 自增 | 生物实例GUID (主键) |
| id | MEDIUMINT UNSIGNED | 0 | 生物模板ID,对应creature_template.entry |
| map | SMALLINT UNSIGNED | 0 | 地图ID |
| zoneId | SMALLINT UNSIGNED | 0 | 区域ID |
| areaId | SMALLINT UNSIGNED | 0 | 子区域ID |
| spawnMask | TINYINT UNSIGNED | 1 | 刷新掩码,控制副本难度刷新 |
| phaseMask | INT UNSIGNED | 1 | 相位掩码,控制可见相位 |
| modelid | MEDIUMINT UNSIGNED | 0 | 模型ID,0则使用模板默认 |
| equipment_id | MEDIUMINT | 0 | 装备ID,0则使用模板默认 |
| position_x | FLOAT | 0 | X坐标 |
| position_y | FLOAT | 0 | Y坐标 |
| position_z | FLOAT | 0 | Z坐标 |
| orientation | FLOAT | 0 | 朝向(弧度) |
| spawntimesecs | INT UNSIGNED | 120 | 重生时间(秒) |
| wander_distance | FLOAT | 0 | 游荡距离 |
| currentwaypoint | MEDIUMINT UNSIGNED | 0 | 当前路径点 |
| curhealth | INT UNSIGNED | 1 | 当前生命值 |
| curmana | INT UNSIGNED | 0 | 当前法力值 |
| MovementType | TINYINT UNSIGNED | 0 | 移动类型 |
| npcflag | INT UNSIGNED | 0 | NPC标志(覆盖模板) |
| unit_flags | INT UNSIGNED | 0 | 单位标志(覆盖模板) |
| dynamicflags | INT UNSIGNED | 0 | 动态标志(覆盖模板) |
| ScriptName | VARCHAR(64) | '' | 脚本名称(覆盖模板) |
| VerifiedBuild | SMALLINT | 0 | 验证版本 |
🔑 核心字段详解
🆔 guid - 生物实例GUID
详细说明:生物实例的唯一标识符,自动递增。每个生物实例都有独立的GUID。
取值范围:1 - 4294967295
- 主键,必须唯一
- 用于在游戏中唯一标识一个生物实例
- 与creature_template.entry不同,GUID是实例ID
📋 id - 生物模板ID
详细说明:关联到creature_template表的entry字段,决定生物的基本属性。
取值范围:对应creature_template.entry
- 必须对应creature_template中存在的entry
- 同一模板可以有多个刷新实例
- 决定生物的名称、等级、阵营等
🗺️ map - 地图ID
详细说明:生物所在的地图ID,对应Map.dbc。
- 0 - 东部王国
- 1 - 卡利姆多
- 530 - 外域
- 571 - 诺森德
- 33 - 影牙城堡
- 34 - 死亡矿井
- 36 - 黑石深渊
🎭 spawnMask - 刷新掩码
详细说明:控制生物在哪些副本难度下刷新,位掩码值。
- 1 - 普通10人
- 2 - 普通25人
- 4 - 英雄10人
- 8 - 英雄25人
- 15 (1+2+4+8) - 所有难度
👁️ phaseMask - 相位掩码
详细说明:控制生物在哪些相位中可见。
- 1 - 默认相位(所有玩家可见)
- 2 - 相位1
- 4 - 相位2
- 255 - 所有相位可见
📍 position_x/y/z - 坐标位置
详细说明:生物在地图上的确切位置坐标。
- position_x: X轴坐标
- position_y: Y轴坐标
- position_z: Z轴坐标(高度)
- 可通过游戏GM命令获取: .gps
🔄 orientation - 朝向
详细说明:生物的朝向角度,以弧度表示(0-2π)。
- 0 - 朝北
- π/2 (1.57) - 朝东
- π (3.14) - 朝南
- 3π/2 (4.71) - 朝西
⏱️ spawntimesecs - 重生时间
详细说明:生物死亡后的重生时间,以秒为单位。
- 120 - 2分钟(普通怪物)
- 300 - 5分钟
- 3600 - 1小时(稀有怪物)
- 86400 - 1天(世界BOSS)
- 0 - 不重生
🚶 MovementType - 移动类型
详细说明:控制生物的移动行为。
- 0 - 静止不动
- 1 - 随机游荡(配合wander_distance)
- 2 - 路径移动(配合waypoint_data)
🎯 wander_distance - 游荡距离
详细说明:当MovementType=1时,定义随机游荡的最大距离。
- 0 - 不游荡
- 5 - 5码范围内游荡
- 10 - 10码范围内游荡
💡 实际案例
普通怪物 在艾尔文森林刷新狗头人
id=1260(狗头人矿工), map=0(东部王国), MovementType=1(随机游荡)
-- 刷新狗头人矿工
INSERT INTO creature VALUES(
0, 1260, 0, 0, 0, 1, 1, 0, 0,
-9449.06, 64.8392, 56.3581, 1.57, 300, 5, 0, 1, 0,
1, 0, 0, 0, 0, '', 0
);NPC 在暴风城刷新银行NPC
id=100000(自定义NPC), map=0, phaseMask=1, MovementType=0(静止)
-- 刷新银行NPC
INSERT INTO creature VALUES(
0, 100000, 0, 0, 0, 1, 1, 0, 0,
-8925.47, 560.23, 93.85, 3.14, 120, 0, 0, 1, 0,
0, 0, 0, 0, 0, '', 0
);副本BOSS 在影牙城堡刷新BOSS
id=100003(自定义BOSS), map=33(影牙城堡), spawnMask=15(所有难度)
-- 刷新副本BOSS
INSERT INTO creature VALUES(
0, 100003, 33, 0, 0, 15, 1, 0, 0,
-234.56, 78.90, 12.34, 0, 86400, 0, 0, 1, 0,
0, 0, 0, 0, 0, 'boss_shadowlord', 0
);路径移动 创建巡逻怪物
MovementType=2(路径移动), 需配合waypoint_data表
-- 刷新巡逻怪物
INSERT INTO creature VALUES(
0, 100010, 0, 0, 0, 1, 1, 0, 0,
-9000.0, 500.0, 50.0, 0, 300, 0, 1, 1, 0,
2, 0, 0, 0, 0, '', 0
);相位 创建相位任务怪物
phaseMask=2(只在相位1可见), 需配合条件或任务
-- 刷新相位怪物
INSERT INTO creature VALUES(
0, 100020, 0, 0, 0, 1, 2, 0, 0,
-8500.0, 600.0, 45.0, 1.57, 300, 5, 0, 1, 0,
1, 0, 0, 0, 0, '', 0
);⚡ 快速参考
常用地图ID
| 0 | 东部王国 |
| 1 | 卡利姆多 |
| 530 | 外域 |
| 571 | 诺森德 |
| 33 | 影牙城堡 |
刷新掩码
| 1 | 普通10人 |
| 2 | 普通25人 |
| 4 | 英雄10人 |
| 8 | 英雄25人 |
| 15 | 所有难度 |
移动类型
| 0 | 静止 |
| 1 | 随机游荡 |
| 2 | 路径移动 |
朝向(弧度)
| 0 | 朝北 |
| 1.57 | 朝东 |
| 3.14 | 朝南 |
| 4.71 | 朝西 |
🔗 相关表格
- creature_template - 生物模板表
- creature_addon - 生物实例附加数据
- creature_template_addon - 生物模板附加数据
- waypoint_data - 路径点数据
- creature_loot_template - 生物掉落表
❓ 常见问题
Q1: 如何获取坐标位置?
在游戏中使用GM命令
.gps 可获取当前位置坐标。Q2: 添加生物后需要重启服务器吗?
不需要重启,使用命令
.reload creature 重新加载即可。Q3: 如何让生物不重生?
设置 spawntimesecs = 0 即可。
Q4: guid字段填什么?
填0即可,数据库会自动分配新的GUID。