0x00 前言
本教程介绍的是 rAthena 系的方法。
以 RWC(Ragnarok World Championship,仙境传说全球精英邀请赛)的活动地图为例,我们一般拿到的地图资源文件都包含这 3 个文件:
2012rwc_01.gat
2012rwc_01.gnd
2012rwc_01.rsw
某些地图可能还有额外的 2 个文件:
2012rwc_01.extra
2012rwc_01.bmp
(游戏右上角的小地图)
因为本文不涉及怎么创建/编辑地图,所以这些文件具体的作用是什么,我们暂时不需要知道。
只需要关心的是: 要怎么把这些文件添加到自己的 RO 服务器中呢 ?
—— 添加地图其实是涉及到 服务端 和 客户端 操作的,这里先说客户端:
0x10 添加地图到客户端
0x11 放置地图资源文件
把以下 4 个文件复制到客户端的 data
目录下:
2012rwc_01.gat
2012rwc_01.gnd
2012rwc_01.rsw
2012rwc_01.extra
(若有)
把这个小地图文件复制到客户端的 data/texture/蜡历牢磐其捞胶/map
目录下:
2012rwc_01.bmp
(若有)
小地图文件不是必须的,缺失的情况下只会在进入地图时提示异常,不影响游戏:
这里建议把所有地图资源文件打包到 GRF 文件中(需要确保相对路径一致),这样有个好处:如果你没有 *.bmp
小地图文件,就可以利用 GRF Editor 生成:
- 在
data
下找到2012rwc_01.gat
文件 - 点击 GRF Editor 右侧的
小地图预览 -> 保存进 Grf
- 在
data/texture/蜡历牢磐其捞胶/map
下可找到生成的小地图文件
若需要为多个地图文件添加小地图,可以这么操作:
- 在
data
下找到输入.gat
筛选条件 - 左手有节奏不断按下键盘
↓
键 - 右手配合节奏不断按下鼠标左键保存小地图
0x12 设置地图资源文件
使用 GBK 编码,打开并编辑 data/resnametable.txt
,在其中新增以下内容:
2012rwc_01.gnd#2012rwc_01.gnd#
2012rwc_01.gat#2012rwc_01.gat#
2012rwc_01.rsw#2012rwc_01.rsw#
蜡历牢磐其捞胶/map/2012rwc_01.bmp#蜡历牢磐其捞胶/map/2012rwc_01.bmp#
它们的格式为:
自定义地图名.gat#地图文件名.gat#
自定义地图名.gnd#地图文件名.gnd#
自定义地图名.rsw#地图文件名.rsw#
蜡历牢磐其捞胶/map/自定义地图名.bmp#蜡历牢磐其捞胶/map/地图文件名.bmp#
一般情况下,自定义地图名
和 地图文件名
应该是一样的,除非你要做地图映射(地图映射在文章的最后会介绍)。
这里注意几点:
自定义地图名
不能出现中文和空格,在后续所有配置中(包括客户端和服务端),都是用这个名字关联这张地图- 不需要配置
*.extra
,即使你有2012rwc_01.extra
- 需要配置
*.bmp
,即使你没有2012rwc_01.bmp
0x13 设置地图名称
使用 GBK 编码,打开并编辑 data/mapnametable.txt
,在其中新增一行: 2012rwc_01.rsw#2012 RWC 01#
(顺序不重要)
这行的格式为:自定义地图名.rsw#地图昵称#
其中:
自定义地图名
需要和前面保持一致地图昵称
可以是中英文和空格,它唯一的用途是在游戏中通过输入/where
显示出来:
0x14 设置地图 BGM
使用 GBK 编码,打开并编辑 data/mp3nametable.txt
,在其中新增一行: 2012rwc_01.rsw#bgm//100.mp3#
(顺序不重要)
这行的格式为:自定义地图名.rsw#地图背景音乐文件路径#
其中:
自定义地图名
需要和前面保持一致地图背景音乐路径
在 RO 客户端根目录下的BGM
目录中,//
为 windows 的文件路径分隔符,随便选一个已存在的音乐文件即可:
这里也可以制作一个喜欢的背景音乐放进去
0x20 添加地图到服务端
0x21 添加到地图列表
编辑 conf/maps_athena.conf
,在其中新增一行: map: 2012rwc_01
(顺序不重要)
这行的格式为:map: 自定义地图名
其中 自定义地图名
需要和前面保持一致。
0x22 添加到地图索引列表
编辑 db/import/map_index.txt
,在其中新增一行: 2012rwc_01
(顺序不重要)
这行的格式只有:自定义地图名
其中 自定义地图名
需要和前面保持一致。
0x23 添加到地图缓存
如果你看过本系列的《SDE 基础使用指引》,你会知道在 SDE 的工具中,有一个 MapCache 编辑器,使用它打开地图缓存文件 db/import/map_cache.dat
:
若你没有 db/import/map_cache.dat
,可先点击 New 新建。
然后点击 Edit 编辑按钮,可以看到两个选项:
Merge...
: 可以添加地图文件所在的 GRF,批量添加到地图缓存(工具会自动找到*.gat
格式的地图文件)Add maps...
: 一次只能选择单个*.gat
格式的地图文件添加到地图缓存
按需选择就好,你可以选择添加单个 2012rwc_01.gat
地图缓存。
这里我是直接添加整个 GRF 的,一劳永逸。不必担心添加所有地图缓存会不会导致 map_cache.dat
太大,我加了所有地图缓存才不到 3M 。
最后点击 File ->
Save 保存即可。
其实用 WeeMapCache 也可以编辑地图缓存,操作方式都是差不多的。但是不推荐用这款工具,它之前有个版本会导致地图上的水区域会出 BUG,例如无法收集圣水、无法使用水球术等。
0x30 验证效果
现在所有配置已完成,进入游戏输入命令 @warp 2012rwc_01
即可移动到新添加的地图:
- 右上角有小地图
/where
得到的地图昵称是2012 RWC 01
0x40 映射地图
可能你之前听到过「映射地图」,但是不知道是什么、也不知道应该怎么操作。
我以前面的场景作为例子,当你添加名为 2012rwc_01
的地图后,GM 要进入该地图,每次都要敲一遍命令 @warp 2012rwc_01
,又长不容易记。
是不是可以给 2012rwc_01
加个别名,例如 rwc2012
就好记多了。
这时你可能会说:“在添加地图前,先把文件名改成 rwc2012
不就可以了吗” ?
其实是不行的,地图几个资源文件其实是通过文件名关联起来的,即使修改了文件名,客户端还是会用原本的文件名去找地图,结果就是找不到资源直接报错:
正确的做法应该是「映射地图」,操作方法非常简单,只需要把上文中预留的 自定义地图名
统一做修改即可,需要注意:
- 不能有中文
- 不能有空格
- 必须全局唯一
例如修改为 rwc2012
。
另外需要注意的是,服务端在添加地图缓存 map_cache.dat 时,不要添加名为 2012rwc_01.gat
的缓存;而是需要把地图原文件复制到任意位置、重命名为 rwc2012
:
2012rwc_01.gat -> rwc2012.gat
2012rwc_01.gnd -> rwc2012.gnd
2012rwc_01.rsw -> rwc2012.rsw
2012rwc_01.extra -> rwc2012.extra
(若有)
然后使用 MapCache 编辑器添加 rwc2012.gat
到地图缓存 map_cache.dat 中:
最后删除这几个文件即可(客户端不需要加载重命名后的文件):
rwc2012.gat
rwc2012.gnd
rwc2012.rsw
rwc2012.extra
(若有)
这样做的目的是让服务端有一个地图索引名为 rwc2012
,但实际上客户端找的地图资源是 2012rwc_01
。
此后 GM 只需要敲命令 @warp rwc2012
,就能进入地图 2012rwc_01
。
0xE0 附:地图缓存
关于地图缓存 map_cache.dat,在 rAthena 的 doc/map_cache.txt、和 PandasWS 的 conf/grf-files.txt 都有其说明:
自 SVN 版本约 10000 起,rAthena 的 map-server 不再直接读取 GRF 文件中的地图数据,而是从这个缓存文件中读取。
这意味着所有地图的必要信息都被存储在 map_cache.dat 中,以便服务器更高效地加载和管理地图。
因此若新增的地图没有缓存在 map_cache.dat,游戏中会无法进入该地图,同时提示 找不到地图
:
反之若地图只在 map_cache.dat 中,客户端却缺失该地图资源文件,当你强制用用 @warp
指令移动到该地图时,游戏就会崩溃: