points_of_interest 表
points_of_interest 表(兴趣点表)定义了游戏世界中的重要位置标记。这些标记会在玩家的小地图和世界地图上显示,帮助玩家快速找到商店、训练师、飞行管理员、银行等重要 NPC 和服务设施的位置。
表概述
points_of_interest 表存储了游戏世界中各个重要位置的坐标和图标信息。当玩家与守卫等 NPC 对话并询问方向时,游戏会通过 gossip_menu_option 表中的 ActionPoiID 字段引用本表的 ID,在地图上显示相应的标记。
每个兴趣点包含世界坐标(PositionX, PositionY)、图标类型(Icon)、标志位(Flags)、重要性等级(Importance)和显示名称(Name)。
ID
int unsigned, 主键
兴趣点唯一标识符
int unsigned, 主键
兴趣点唯一标识符
PositionX/Y
float
世界坐标位置
float
世界坐标位置
Icon
int unsigned
地图图标类型
int unsigned
地图图标类型
Name
text, 非空
兴趣点显示名称
text, 非空
兴趣点显示名称
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | int UNSIGNED | 0 | 兴趣点的唯一标识符,主键 |
| PositionX | float | 0 | 兴趣点的世界 X 坐标 |
| PositionY | float | 0 | 兴趣点的世界 Y 坐标 |
| Icon | int UNSIGNED | 0 | 在地图上显示的图标类型编号 |
| Flags | int UNSIGNED | 0 | 兴趣点的标志位,控制显示行为 |
| Importance | int UNSIGNED | 0 | 兴趣点的重要性等级 |
| Name | text | 非空 | 鼠标悬停时显示的文本名称 |
主键: ID | 引擎: InnoDB | 字符集: utf8mb4
重要字段详解
ID (兴趣点 ID)
兴趣点的唯一标识符。在 gossip_menu_option 表的 ActionPoiID 字段中被引用,用于在 NPC 对话中标记位置。
PositionX / PositionY (坐标)
兴趣点在游戏世界中的二维坐标。这些坐标决定了地图标记的位置。可以通过 GM 命令 .gps 获取当前位置坐标。
示例:
- 暴风城区域:PositionX ≈ -8833, PositionY ≈ 628
- 奥格瑞玛区域:PositionX ≈ 1632, PositionY ≈ -4373
Icon (图标类型)
定义在地图上显示的图标类型:
- 0 默认图标
- 1 商店/商人
- 2 训练师
- 3 旅店
- 4 银行
- 5 修理
- 6 飞行点
- 7 任务
Flags (标志位)
控制兴趣点的特殊行为和显示方式:
- 0 无特殊标志
- 1 始终显示
- 2 仅在附近显示
- 4 重要位置
Importance (重要性)
兴趣点的重要性等级,数值越高表示越重要。当多个兴趣点重叠时,重要性高的会优先显示。
Name (名称)
当玩家将鼠标悬停在地图标记上时显示的文本。名称应简洁明了,如"武器商店"、"法师训练师"等。
实战案例
案例1:添加武器商店标记
INSERT INTO points_of_interest (ID, PositionX, PositionY, Icon, Flags, Importance, Name)
VALUES (1001, -8800.0, 650.0, 1, 1, 10, '武器商店');
案例2:添加训练师标记
INSERT INTO points_of_interest (ID, PositionX, PositionY, Icon, Flags, Importance, Name)
VALUES (1002, -8850.0, 700.0, 2, 1, 10, '战士训练师');
案例3:添加飞行点标记
INSERT INTO points_of_interest (ID, PositionX, PositionY, Icon, Flags, Importance, Name)
VALUES (1003, -8840.0, 490.0, 6, 1, 20, '暴风城飞行点');
案例4:在对话选项中引用兴趣点
-- 让守卫对话选项在地图上标记武器商店
UPDATE gossip_menu_option
SET ActionPoiID = 1001
WHERE MenuID = 5000 AND OptionID = 0;
查询示例
查找特定区域的兴趣点
SELECT ID, Name, PositionX, PositionY, Icon
FROM points_of_interest
WHERE PositionX BETWEEN -9000 AND -8000
AND PositionY BETWEEN 500 AND 800
ORDER BY Name;
按图标类型统计
SELECT Icon, COUNT(*) as count
FROM points_of_interest
GROUP BY Icon
ORDER BY count DESC;
常见问题
Q: 兴趣点不显示怎么办?
- 坐标(PositionX, PositionY)是否正确
- Icon 图标类型是否有效
- Flags 设置是否合理
- gossip_menu_option 中的 ActionPoiID 是否正确引用
Q: 兴趣点名称支持多语言吗?
是的,可以通过 points_of_interest_locale 表为不同语言提供本地化名称。
相关表格
- points_of_interest_locale - 兴趣点本地化表
- gossip_menu_option - 通过 ActionPoiID 引用本表
- quest_poi - 任务兴趣点表