spell_target_position - 法术目标位置表

法术目标位置表定义了特定法术的固定目标位置。某些法术需要传送玩家到特定的坐标位置,或者在特定位置产生效果,这个表提供了这些法术所需的精确坐标信息。

表结构

字段名 类型 描述
id mediumint unsigned 法术ID (主键)
详细说明:指定需要固定目标位置的法术ID。对应Spell.dbc文件中的法术记录。
适用法术类型:
  • 传送法术 - 将玩家传送到特定位置的法术
  • 召唤法术 - 在特定位置召唤生物或物体的法术
  • 区域效果法术 - 在特定位置产生效果的法术
  • 任务法术 - 任务相关的位置传送法术
  • 事件法术 - 特殊事件中使用的位置法术

常见示例:
  • 炉石回城 - 传送到绑定的旅店位置
  • 城市传送 - 传送到主城的固定位置
  • 副本传送 - 传送到副本入口的固定位置
  • 任务传送 - 任务中的特殊传送效果
target_map smallint unsigned 目标地图ID
详细说明:指定法术目标位置所在的地图ID。对应Map.dbc文件中的地图记录。
取值范围:0 - 65535 (smallint unsigned的范围)
常见地图ID:
  • 0 - 东部王国 (Eastern Kingdoms)
  • 1 - 卡利姆多 (Kalimdor)
  • 530 - 外域 (Outland) - TBC扩展
  • 571 - 诺森德 (Northrend) - WotLK扩展
  • 各种副本地图 - 如死亡矿井(36)、怒焰裂谷(389)等

地图类型:
  • 主世界地图 - 大陆地图,玩家可以自由探索
  • 副本地图 - 独立的副本空间
  • 战场地图 - PvP战场专用地图
  • 特殊地图 - 事件或任务专用地图
target_position_x float 目标X坐标
详细说明:指定目标位置的X轴坐标。X轴通常表示东西方向,数值越大越偏东。
坐标系统:
  • 坐标原点 - 每个地图都有自己的坐标原点
  • 精度要求 - 使用float类型提供高精度定位
  • 范围变化 - 不同地图的坐标范围不同

获取方法:
  • 游戏内命令 - 使用.gps命令获取当前坐标
  • 数据库查询 - 从现有数据中查找相似位置
  • 地图工具 - 使用第三方地图工具
target_position_y float 目标Y坐标
详细说明:指定目标位置的Y轴坐标。Y轴通常表示南北方向,数值越大越偏北。
坐标特点:
  • 方向性 - Y轴正方向通常指向北方
  • 精确性 - 需要精确到小数点后几位
  • 地形适应 - 需要考虑地形高低变化
target_position_z float 目标Z坐标
详细说明:指定目标位置的Z轴坐标。Z轴表示高度,数值越大位置越高。
高度考虑:
  • 地面高度 - 确保玩家不会传送到地下或空中
  • 建筑物内 - 室内位置需要准确的高度设置
  • 安全性 - 避免传送到危险的高度
  • 可达性 - 确保位置是玩家可以到达的

高度获取:
  • 实地测试 - 在游戏中实际测试高度
  • 地形数据 - 参考地形高度数据
  • 安全边距 - 适当增加安全高度边距
target_orientation float 目标朝向
详细说明:指定传送后玩家的朝向角度。朝向以弧度为单位,决定玩家传送后面向的方向。
取值范围:0.0 - 6.28318 (0到2π弧度,即0到360度)
方向对应:
  • 0.0 - 面向北方
  • 1.5708 - 面向东方 (π/2)
  • 3.14159 - 面向南方 (π)
  • 4.71239 - 面向西方 (3π/2)

角度转换:
  • 度数转弧度 - 弧度 = 度数 × π / 180
  • 弧度转度数 - 度数 = 弧度 × 180 / π

设置建议:
  • 合理朝向 - 让玩家面向有意义的方向
  • 避免障碍 - 不要让玩家面向墙壁或障碍物
  • 引导性 - 可以让玩家面向下一个目标方向

配置示例

主城传送法术

-- 传送到暴风城
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(3561, 0, -8833.38, 628.628, 94.0066, 1.06465);  -- 暴风城法师区

-- 传送到奥格瑞玛
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(3567, 1, 1676.21, -4315.29, 61.5243, 1.06465);  -- 奥格瑞玛智慧谷

-- 传送到铁炉堡
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(3562, 0, -4981.25, -881.542, 501.66, 2.16421);  -- 铁炉堡神秘区

副本传送法术

-- 传送到死亡矿井
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(8690, 36, -14.8425, -385.248, 62.4561, 1.5708);  -- 死亡矿井入口

-- 传送到怒焰裂谷
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(8676, 389, 1.71934, -0.161438, -2.78423, 0.0);   -- 怒焰裂谷入口

-- 传送到监狱
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(8724, 34, 54.2331, 0.28, -18.4775, 1.5708);      -- 监狱入口

特殊任务传送

-- 任务相关的特殊传送
INSERT INTO spell_target_position (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES
(12885, 0, -8949.95, -132.493, 83.5312, 0.0),     -- 特殊任务传送点1
(23442, 1, 9947.52, 2482.73, 1316.21, 1.5708),    -- 特殊任务传送点2
(34123, 530, -3864.92, -11643.7, -137.644, 2.16); -- 外域任务传送点

查询示例

查看所有传送法术位置

SELECT stp.*, s.SpellName
FROM spell_target_position stp
LEFT JOIN spell_template s ON stp.id = s.ID
ORDER BY stp.target_map, stp.id;

查找特定地图的传送点

-- 查找东部王国的所有传送点
SELECT stp.*, s.SpellName
FROM spell_target_position stp
LEFT JOIN spell_template s ON stp.id = s.ID
WHERE stp.target_map = 0  -- 东部王国
ORDER BY stp.target_position_x, stp.target_position_y;

计算两个传送点之间的距离

-- 计算两个传送点之间的距离
SELECT 
    stp1.id as spell1_id,
    stp2.id as spell2_id,
    SQRT(
        POWER(stp1.target_position_x - stp2.target_position_x, 2) +
        POWER(stp1.target_position_y - stp2.target_position_y, 2)
    ) as distance_2d
FROM spell_target_position stp1
CROSS JOIN spell_target_position stp2
WHERE stp1.target_map = stp2.target_map 
  AND stp1.id != stp2.id
  AND stp1.id = 3561  -- 暴风城传送
ORDER BY distance_2d;

注意事项

⚠️ 重要提醒