游戏对象表存储了游戏世界中所有游戏对象实例的位置和状态信息。每个游戏对象实例都基于gameobject_template表中的模板创建,并在游戏世界中有特定的位置和状态。
字段名 | 类型 | 属性 | 描述 |
---|---|---|---|
guid | int(10) unsigned | 主键,不为空 | 游戏对象实例的全局唯一标识符 |
id | mediumint(8) unsigned | 不为空,默认0 | 游戏对象模板ID,对应gameobject_template表的entry |
map | smallint(5) unsigned | 不为空,默认0 | 地图ID,对应Map.dbc的ID |
zoneId | smallint(5) unsigned | 不为空,默认0 | 区域ID |
areaId | smallint(5) unsigned | 不为空,默认0 | 子区域ID |
spawnMask | tinyint(3) unsigned | 不为空,默认1 | 刷新掩码,控制在哪些副本难度下刷新 |
phaseMask | int(10) unsigned | 不为空,默认1 | 相位掩码,控制在哪些相位中可见 |
position_x | float | 不为空,默认0 | X坐标 |
position_y | float | 不为空,默认0 | Y坐标 |
position_z | float | 不为空,默认0 | Z坐标 |
orientation | float | 不为空,默认0 | 朝向角度(0-6.28弧度) |
rotation0 | float | 不为空,默认0 | 旋转四元数X分量 |
rotation1 | float | 不为空,默认0 | 旋转四元数Y分量 |
rotation2 | float | 不为空,默认0 | 旋转四元数Z分量 |
rotation3 | float | 不为空,默认0 | 旋转四元数W分量 |
spawntimesecs | int(11) | 不为空,默认0 | 重生时间(秒) |
animprogress | tinyint(3) unsigned | 不为空,默认0 | 动画进度 |
state | tinyint(3) unsigned | 不为空,默认0 | 状态 |
ScriptName | varchar(64) | 不为空,默认'' | 脚本名称 |
VerifiedBuild | smallint(5) | 不为空,默认0 | 验证版本 |
以下SQL语句将在暴风城添加一个邮箱:
INSERT INTO gameobject (id, map, position_x, position_y, position_z, orientation, spawntimesecs, state)
VALUES (142102, 0, -8833.37, 628.62, 94.00, 1.06, 300, 1);
以下SQL语句将修改GUID为42的游戏对象的位置:
UPDATE gameobject
SET position_x = -8840.12, position_y = 630.54, position_z = 94.25, orientation = 2.35
WHERE guid = 42;
以下SQL语句将修改GUID为42的游戏对象的重生时间为1小时:
UPDATE gameobject
SET spawntimesecs = 3600
WHERE guid = 42;
以下SQL语句将删除GUID为42的游戏对象:
DELETE FROM gameobject
WHERE guid = 42;
使用以下SQL语句查询特定地图和坐标范围内的所有游戏对象:
SELECT g.guid, gt.name, g.position_x, g.position_y, g.position_z
FROM gameobject g
JOIN gameobject_template gt ON g.id = gt.entry
WHERE g.map = 0
AND g.position_x BETWEEN -8900 AND -8800
AND g.position_y BETWEEN 600 AND 700;
将spawntimesecs设置为0:
UPDATE gameobject
SET spawntimesecs = 0
WHERE guid = 42;
将spawnMask设置为15(1+2+4+8):
UPDATE gameobject
SET spawnMask = 15
WHERE guid = 42;
不需要完全重启服务器,但需要重新加载游戏对象数据:
.reload gameobject
.reload all gameobject
来重新加载所有与游戏对象相关的数据注意: 重新加载数据只会影响新生成的游戏对象,已经存在的游戏对象实例不会受到影响,除非它们被销毁并重生。
可能的原因包括:
可以使用以下命令在游戏中临时生成游戏对象来测试:
.gameobject add 游戏对象ID