天堂2单机论坛

 找回密码
 立即注册
查看: 24|回复: 1

游戏地理数据(GeoData)的说明

[复制链接]
  • TA的每日心情
    郁闷
    2022-5-30 11:17
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    373

    主题

    497

    帖子

    9万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    95922
    发表于 昨天 15:38 | 显示全部楼层 |阅读模式
    关于游戏地理数据(GeoData)的说明

    一、地理数据是什么?为什么需要它?

    玩家常问:地理数据有什么用?放在哪里?
    先排除 *_conv.dat 和 *.l2j 这类格式——它们只用于 OFF 服务器(Java 也能实现,但这里不讨论)。

    没有地理数据时的问题:
    - 地图中没有墙壁概念,怪物和附魔可以随意穿墙。
    - 角色移动时会沿着墙壁“滑动”,坐标仍会改变。
    - 怪物能直接穿过坐标,移动更快。
    - 整个世界就像平坦的平台,只要玩家进入怪物的警戒半径(即使隔着墙看不见),主动怪就会直接攻击你。

    地理数据的作用:
    它包含了游戏客户端中所有障碍物(墙壁、地形等)的信息。不同编年史版本都有各自的地理数据,例如“插曲”版的地理数据就被认为不完整。

    二、地理数据的基本原理

    整个地图被划分为多个方格(区块),每个方格有唯一编号,用于定位特定区域。
    (参考图片:faq7.ru/images/imagehost/a534289651c23ac822f07fc90f26159d.jpg)

    图中只标注了地表区域,地牢(例如“地狱大陆”未显示)并不代表方格为空。
    网上流传的地理数据质量参差不齐,请选择适合你服务端版本的。
    如果某个方块中存在看不见的障碍物,或者无法通过门/大门,这不一定是数据本身的问题——有专门的软件可以编辑地理数据,移除隐形区域(这是另一个话题)。

    地理数据的正常工作还依赖于服务端的地理引擎(核心组件)。注意:地理数据和地理位置是两个不同的概念。
    不同开发团队的地理引擎实现不同,因此并非任意地理数据都适合任意服务端。请自行测试、对比,不要争论“哪个引擎更好”。

    三、什么是路径节点(PathNode)?

    路径节点的好处:怪物攻击时不会再穿墙,而是像玩家一样绕墙跑。
    路径节点由某些工具从地理数据方块生成,其质量取决于原始地理数据。

    补丁节点(Patchnode)文件的数量必须与地理数据文件的数量一致。

    四、不同服务端家族的地理数据支持

    1. 基于 Rebellion(Fortress)的服务端
       - 代表:L2Dream、L2f CCP、Phoenix、L2Royal(如有遗漏请见谅)。
       - 特点:可以将地理数据模块放到另一台机器上,分担主游戏服务器压力。
       - 注意:这类方案尚未完全完成(尽管付费的地理服务器可能已实现100%),不建议使用。
       - 这类服务端不需要额外的补丁节点——它们的 geothrift 在运行时会动态生成补丁节点。
         作者认为这不是坏方案,但自己使用的 SF Geothmove 完全正常。

    2. 基于 SF Assembly(L2jServer)的服务端
       - 代表:L2jServer(第一个用 Java 编写的模拟器)、L2jFree、L2Emu、L2Ambrella 等。
         也可算上 Balancer(Rebellion 基于的 Fortress),但它已不再需要补丁节点。
       - 过去这些团队曾使用外部地理服务器(除 L2jServer 外),但后来似乎废弃了。
       - 这类服务端需要同时提供 geodata + patchnode,才能让客户端获得舒适的体验。

    五、配置示例(基于 Rebellion – 以 L2Dream 为例)

    1. 放置地理数据文件
       路径示例:
       C:\L2Dream\game\data\geodata
       (不是 C:\L2Dream\geo\data\geodata——那是外部地理服务器的路径。请严格按上述路径放置。)
       文件格式:*.l2j

    2. 配置文件修改
       配置文件位于:C:\L2Dream\game\config
       文件名:geodata.ini 或 geodata.properties

       以下是配置文件内容(俄语注释已翻译):

       #=====================================================
       # 本文件是地理数据配置器。
       #
       # 地理数据可以禁用,可以在游戏服务器上以经典模式运行,也可以作为专用地理数据服务器运行。
       #
       # 目前,地理数据服务器没有实现授权(因为没必要)。
       # 如果你有黑客狂热,请在操作系统层面关闭,或者使用 SSL。
       #=====================================================

       # 启用/禁用地理数据和寻路。
       # 建议启用。需要确保 data/geodata 目录下存在地理数据文件。
       # 0 = 地理数据禁用
       # 1 = 地理数据将加载到游戏服务器中
       # 2 = 游戏服务器进入客户端模式,尝试连接指定地址;地理数据服务器则监听指定地址。
       #     适用于多台服务器的专用机器,建议使用千兆或更高速度的局域网。
       #     亚丁攻城期间的平均流量:每个玩家约 400 Kbps(包括激活的守卫)。
       #     普通游戏期间:每个玩家约 200 Kbps。
       GeoData = 0

       # 地理数据服务器绑定的主机地址。
       # * 表示绑定所有接口。
       # 当 GeoData = 0 或 1 时忽略该设置。
       GeoServerHost = 127.0.0.1

       # 客户端尝试连接的地址。
       # 当 GeoData = 0 或 1 时忽略。
       GeoClientTargetHost = 127.0.0.1

       # 地理数据端口。
       # 服务器在此端口开槽,客户端尝试连接。
       # 当 GeoData = 0 或 1 时忽略。
       GeoPort = 9050

       # 平滑路径。
       # 仅在调试时应禁用。
       PathClean = True

       # 是否处理地理数据中的门。
       # 该设置影响游戏服务器。
       AllowDoors = False

       PathFindingBoost = True
       PathFindArea = 250

       需要修改的参数:
       将 GeoData = 0 改为 GeoData = 1(如果坚持使用独立地理服务器,则保持为 2 并配置主机/端口)。

       门相关的设置:
       如果你确定服务端的地理引擎实现了门的“不可穿透”,可以将 AllowDoors = True 打开。

    3. 独立地理服务器(可选)
       如果你决定运行独立地理服务器,进入目录 C:\L2Dream\geo,修改 StartGeoServer.bat 中的内存分配:

       java -Xms512m -Xmx768m -cp l2dserver.jar l2d.game.geodata.network.geoserver.GeoServer

       可以按需调整 -Xms 和 -Xmx 的值。

    六、配置示例(基于 SF Assembly – 以 L2jServer 为例)

    L2jServer 一直没有太多改动,也不使用外部地理服务器。

    1. 放置文件
       - 地理数据文件 放置路径:
         C:\L2jServer\gameserver\data\geodata
       - 补丁节点文件 放置路径:
         C:\L2jServer\gameserver\data\pathnode

    2. 索引文件
       在 geodata 文件夹中需要创建 geo_index.txt;
       在 pathnode 文件夹中需要创建 pn_index.txt。
       两个文件的内容必须完全一致,例如:


    16_10
    16_12
    16_18
    16_19
    16_20
    16_21
    16_24
    16_25
    17_10
    17_11
    17_15
    17_16
    17_17
    17_19
    17_20
    17_21
    17_22
    17_23
    17_24
    17_25
    18_10
    18_11
    18_14
    18_15
    18_16
    18_19
    18_20
    18_21
    18_22
    18_23
    18_24
    18_25
    19_10
    19_11
    19_13
    19_14
    19_15
    19_16
    19_17
    19_18
    1 9_19
    19_20
    19_21
    19_22
    19_23
    19_24
    19_25
    19_26
    20_10
    20_11
    20 _13
    20_14
    20_15
    20_16
    20_17
    20_18
    20_19
    20_20
    20_21
    20_22
    20_ 23
    20_24
    20_25
    20_26
    21_11
    21_14
    21_15
    21_16
    21_17
    21_18
    21_1 9
    21_20
    21_21
    21_22
    21_23
    21_24
    21_25
    22_13
    22_14
    22_15
    22_16
    22_17
    22_18
    22_19
    22_20
    22_21
    22_22
    22_23
    22_24
    22_25
    23_11
    23_12
    23_13
    23_14
    23_15
    23_16
    23_17
    23_18
    23_19
    23_20
    23_21
    23_22
    23_23
    23_24
    23_25
    24_11
    24_12
    24_13
    24_14
    24_15
    24_16
    2 4_17
    24_18
    24_19
    24_20
    24_21
    24_22
    24_23
    24_24
    24_25
    25_11
    25 _12
    25_14
    25_15
    25_16
    25_17
    25_18
    25_19
    25_20
    25_21
    25_23
    26_ 11
    26_12
    26_14

       (完整列表请参见原始文档,此处仅示意格式。)
       如果内容不匹配,加载地理数据时会报错,错误日志会提示缺少哪个文件。

    3. 配置文件修改
       配置文件位于:C:\L2jServer\gameserver\config\General.properties

       找到以下部分(俄语注释已翻译):

       # --------------------------------------------------------------
       # 地理数据设置
       # --------------------------------------------------------------
       # 地理数据选项:
       # 0 = 地理数据和寻路关闭(默认)
       # 1 = 地理数据用于检查视线(LOS),以及 L2Playable 的移动。
       #     你需要下载地理数据文件到 data/geodata 文件夹。
       #     怪物不会穿墙,但可能因没有视线而绕过墙壁激怒。
       # 2 = 启用完整地理数据,包括寻路(如果未启用 CellPathFinding,
       #     还需要 data/pathnode 文件)。
       #     所有角色的移动都必须经过地理数据检查。
       #     推荐服务器内存至少 2GB,最好 3GB。
       GeoData = 0

       # 单元格级寻路,能生成更精确的路线,但计算量可能增加约 10 倍。
       # 至少推荐用于小型服务器。
       # 如果设为 False,则使用 pathnode 文件。
       # 默认:False
       CellPathFinding = False

       # True = 将地理数据缓冲区内容加载到物理内存中。
       # False = 并不保证地理数据缓冲区不常驻物理内存。
       ForceGeodata = True

       # 控制客户端与服务器之间的玩家坐标同步模式:
       # -1 = 仅同步客户端 -> 服务器的 Z 坐标。没有地理数据时使用此默认值。
       # 1 = 同步客户端 -> 服务器。使用此选项(不使用地理数据)会让玩家更难绕过障碍物。
       # 2 = 用于地理数据(至少需要单元格级寻路,否则可尝试 -1)。
       #     如果客户端坐标与服务器计算坐标相差太远,服务器会发送验证包。
       CoordSynchronize = -1

       需要修改的参数:
       - 如果没有补丁节点,只设置 GeoData = 1(此时主动怪不会穿墙冲过来,但如果你转过拐角,怪物仍可能“看见”你并穿墙)。
       - 如果有补丁节点,设置 GeoData = 2,并建议启用 CellPathFinding = True(使路径节点更平滑,但会略微增加服务器负载)。不启用也可以。

    七、注意事项

    - 配置生效时间:如果你在服务器运行时修改了配置文件,这些配置只在服务器重启后才会生效。
    - 注释行:以 # 开头的行是注释,不参与实际配置。
    - 如果遇到问题,欢迎补充细节
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2 小时前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    26

    帖子

    83

    积分

    正式会员

    Rank: 2

    积分
    83
    发表于 昨天 15:58 | 显示全部楼层
    很有用的一篇講解,謝謝分享
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|监狱|天堂2单机论坛 ( 粤ICP备20030366号 )

    GMT+8, 2026-6-4 02:15 , Processed in 0.052927 second(s), 21 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表