生物表存储了游戏世界中所有生物的实例信息,包括NPC、怪物、宠物等。每个生物实例都有一个唯一的GUID,并且关联到creature_template表中的一个模板。
字段名 | 类型 | 属性 | 描述 |
---|---|---|---|
guid | int(10) unsigned | 主键,自增 | 生物GUID,唯一标识符 |
id | mediumint(8) unsigned | 不为空,默认0 | 生物模板ID,对应creature_template表中的entry字段 |
map | smallint(5) unsigned | 不为空,默认0 | 地图ID |
zoneId | smallint(5) unsigned | 不为空,默认0 | 区域ID |
areaId | smallint(5) unsigned | 不为空,默认0 | 子区域ID |
spawnMask | tinyint(3) unsigned | 不为空,默认1 | 刷新掩码,控制在哪些副本难度下刷新 |
phaseMask | int(10) unsigned | 不为空,默认1 | 相位掩码,控制在哪些相位中可见 |
modelid | mediumint(8) unsigned | 不为空,默认0 | 模型ID,如果为0则使用模板中的随机模型 |
equipment_id | mediumint(9) | 不为空,默认0 | 装备ID,如果为0则使用模板中的默认装备 |
position_x | float | 不为空,默认0 | X坐标 |
position_y | float | 不为空,默认0 | Y坐标 |
position_z | float | 不为空,默认0 | Z坐标 |
orientation | float | 不为空,默认0 | 朝向(弧度,0-2π) |
spawntimesecs | int(10) unsigned | 不为空,默认120 | 重生时间(秒) |
wander_distance | float | 不为空,默认0 | 游荡距离,为0时不游荡 |
currentwaypoint | mediumint(8) unsigned | 不为空,默认0 | 当前路径点 |
curhealth | int(10) unsigned | 不为空,默认1 | 当前生命值 |
curmana | int(10) unsigned | 不为空,默认0 | 当前法力值 |
MovementType | tinyint(3) unsigned | 不为空,默认0 | 移动类型(0=静止,1=随机移动,2=路径移动) |
npcflag | int(10) unsigned | 不为空,默认0 | NPC标志,覆盖模板中的值 |
unit_flags | int(10) unsigned | 不为空,默认0 | 单位标志,覆盖模板中的值 |
dynamicflags | int(10) unsigned | 不为空,默认0 | 动态标志,覆盖模板中的值 |
ScriptName | varchar(64) | 不为空,默认'' | 脚本名称,覆盖模板中的值 |
VerifiedBuild | smallint(5) | 不为空,默认0 | 验证版本 |
生物的唯一标识符,是自动递增的整数。这个字段是表的主键,用于在游戏中唯一标识一个生物实例。
示例值: 1, 42, 1337
生物的模板ID,对应creature_template表中的entry字段。这个字段决定了生物的基本属性,如名称、等级、技能等。
示例值: 1260(狗头人矿工), 7427(熔火恶犬)
生物所在的地图ID,对应于maps.dbc文件中的记录。
示例值:
生物所在的区域ID和子区域ID,对应于AreaTable.dbc文件中的记录。这些字段通常由服务器自动填充,不需要手动设置。
刷新掩码,控制生物在哪些副本难度下刷新。这是一个位掩码值,可以组合多个标志。
示例值:
相位掩码,控制生物在哪些相位中可见。相位是一种允许在同一地图上为不同玩家显示不同内容的机制。这是一个位掩码值,可以组合多个标志。
示例值:
生物的坐标位置,定义了生物在地图上的确切位置。
示例值: position_x: -9449.06, position_y: 64.8392, position_z: 56.3581
生物的朝向,以弧度表示(0到2π)。0表示朝北,π/2表示朝东,π表示朝南,3π/2表示朝西。
示例值: 0.0(朝北), 1.57(朝东), 3.14(朝南), 4.71(朝西)
生物死亡后的重生时间,以秒为单位。如果设置为0,生物将不会重生。
示例值:
这两个字段一起控制生物的移动行为。wander_distance定义了生物随机移动的最大距离,MovementType定义了移动类型。
示例值:
生物的当前生命值和法力值。如果设置为0,将使用模板中定义的默认值。
示例值: curhealth: 1000, curmana: 500
以下SQL语句将在艾尔文森林添加一个狗头人矿工:
INSERT INTO creature (id, map, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, MovementType)
VALUES (1260, 0, -9449.06, 64.8392, 56.3581, 1.57, 300, 5, 1);
以下SQL语句将修改GUID为42的生物的位置:
UPDATE creature
SET position_x = -9460.12, position_y = 70.5432, position_z = 56.8765, orientation = 3.14
WHERE guid = 42;
以下SQL语句将修改GUID为42的生物的重生时间为1小时:
UPDATE creature
SET spawntimesecs = 3600
WHERE guid = 42;
以下SQL语句将删除GUID为42的生物:
DELETE FROM creature
WHERE guid = 42;
使用以下SQL语句查询特定地图和坐标范围内的所有生物:
SELECT c.guid, ct.name, c.position_x, c.position_y, c.position_z
FROM creature c
JOIN creature_template ct ON c.id = ct.entry
WHERE c.map = 0
AND c.position_x BETWEEN -9500 AND -9400
AND c.position_y BETWEEN 50 AND 100;
将spawntimesecs设置为0:
UPDATE creature
SET spawntimesecs = 0
WHERE guid = 42;
将spawnMask设置为15(1+2+4+8):
UPDATE creature
SET spawnMask = 15
WHERE guid = 42;
不需要完全重启服务器,但需要重新加载生物数据:
.reload creature
.reload all creature
来重新加载所有与生物相关的数据注意: 重新加载数据只会影响新生成的生物,已经存在的生物实例不会受到影响,除非它们死亡并重生。
可能的原因包括:
可以使用以下命令在游戏中临时生成生物来测试:
.npc add 生物ID