AzerothCore-WoTLK 数据提取实操:三步跑通地图三件套
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
正在搭巫妖王之怒私服?AzerothCore 的地图数据提取是第一道坎:这篇带你按 extractor.sh 菜单选项走通 maps/vmaps/mmaps 三大产物,附耗时预期与调参经验。
先搞懂 —— 这三套数据到底在管什么
把游戏世界想成一座城市沙盘:
- maps:地形沙盘。山、海、悬崖,决定"哪里能站人"
- vmaps:建筑轮廓线稿。树、墙、房屋,决定"哪里挡视线"
- mmaps:游戏内 GPS 导航。决定"NPC 往哪走"
| 产物 | 用途 | 文件格式 | 上游依赖 |
|---|---|---|---|
| maps/ | 地形高度与地图结构 | .adt/.wdt | 客户端 MPQ |
| vmaps/ | 碰撞、遮挡、视线 | .vmtree/.vmtile | maps/ |
| mmaps/ | NPC 寻路导航网格 | .mmtile | maps/ + vmaps/ |
本节不碰代码。记住依赖链:MPQ → maps → vmaps → mmaps。链条断哪一环,下游全部失败。
动手前的环境清单
| 项目 | 最低要求 | 推荐值 | 说明 |
|---|---|---|---|
| 客户端版本 | WoW 3.3.5a(Build 12340) | 同左 | Data/ 下 MPQ 必须齐全,版本不符后续全废 |
| 磁盘空间 | 20GB 空闲 | 40GB | 三套产物加起来体积不小 |
| 内存 | 8GB | 16GB | 内存不足会频繁换盘,mmaps 耗时翻倍 |
| 操作系统 | Linux(Ubuntu 20.04+) | 同左 | 四个提取工具需先编译出二进制 |
⚠️ 坑一:四个工具二进制(map_extractor、vmap4_extractor、vmap4_assembler、mmaps_generator)必须和Data/目录放在同一个目录,extractor.sh 检测到缺失会直接拒绝启动。
⚠️ 坑二:MPQ 不完整或版本不对,提取"成功"也会产出废地图文件,排查成本极高。动手前先核对 Build 12340。
工具源码分别在 src/tools/map_extractor、src/tools/vmap4_extractor、src/tools/vmap4_assembler、src/tools/mmaps_generator。想读实现就从这四个目录入手。
5 分钟极速验证 —— 先跑通再深入
先拿最快的菜单选项 1 建立信心。输入是客户端 MPQ,输出是dbc/、maps/、Cameras/三个目录。
./extractor.sh菜单提示Press 1, 2, 3 or 4时输入1,回车。
跑对了长这样:
- 终端先打印 "The required files and folder exist",再打印 "Extract Base"
- 结束后当前目录多出
dbc/、maps/、Cameras/三个目录 maps/里能看到0000_0000.adt这种四位数字命名的文件
三个标志都满足,说明环境没问题,放心往下走。
分步实操:从 maps 到 mmaps 的完整链路
第一步:基础地图提取(extractor.sh 选项 1)
做什么:从Data/读 MPQ,产出maps/、dbc/、Cameras/。
怎么跑:上一节已演示。apps/extractor/extractor.sh 会先清空旧的 dbc/maps/Cameras 再调 map_extractor,重跑不残留脏数据。
产物长什么样:
maps/0000_0000.adt:地图 ID + 区块坐标命名,每块对应约 533 世界单位见方的区域dbc/:客户端数据表,worldserver 启动也要用Cameras/:相机数据,随基础文件一起产出
卡点提示:解析逻辑先校验 MHDR 区块头,再检查地形网格完整性。某张图反复失败时,八成是 Data/ 缺 MPQ,回客户端目录补全再跑。
第二步:vmap 提取与汇编(选项 2)
⬆ 依赖上一步产物:maps/
做什么:解析 WMO/M2 静态模型,原始数据先落到临时目录Buildings/,再汇编成vmaps/。
怎么跑:extractor.sh 菜单输入2。脚本依次做三件事:vmap4_extractor 提取、vmap4_assembler 汇编、删除 Buildings/。
产物长什么样:
vmaps/:每张地图一个.vmtree索引文件加若干.vmtile区块文件,如000.vmtreeBuildings/是临时工作目录,脚本结束后自动清掉,不用你管
卡点提示:终端刷出Couldn't open RootWmo!!!别慌,脚本里白纸黑字写了这是预期提示,不是报错。只有结束时vmaps/是空的才需要回头查。
第三步:mmaps 导航网格生成(选项 3)
⬆ 依赖上一步产物:vmaps/(至少要有一个 .vmtree)
做什么:用 Recast/Detour 把地形与碰撞数据算成导航网格,写入mmaps/。
怎么跑:菜单输入3。这步比较磨人,先去泡杯咖啡。想手动控线程就绕过菜单直接调:
./mmaps_generator --threads 8产物长什么样:
mmaps/:每个区块一个.mmtile文件,文件名是地图 ID 加区块坐标拼接,如04832.mmtile- 目录由工具自动创建,重跑前会清掉旧文件
卡点提示:工具启动时会检查maps/和vmaps/是否为空。看到'vmaps' directory is empty or does not exist,就是跳过了第二步,回去补跑选项 2。
💡 网格精度由mmaps-config.yaml控制:verticesPerMapEdge默认 2000,管网格分辨率;walkableClimb默认 6,是原版 WotLK 值,让 NPC 能翻过低矮围栏。
耗时预期与 mmaps 生成参数调优
SSD + 16GB 内存、全量提取(选项 4)的范围参考值:
| 阶段 | 耗时范围 | 主要瓶颈 |
|---|---|---|
| maps | 20-40 min | MPQ 随机读 |
| vmaps | 30-60 min | WMO 组文件解析 |
| mmaps | 2-5 h | 几何计算,单张大陆地图就有数百个区块 |
可调参数:
| 参数 | 默认值 | 调优方向 | 适用场景 |
|---|---|---|---|
--threads | CPU 核数 | 提到物理核数封顶 | 全阶段通用,mmaps 收益最明显 |
verticesPerMapEdge | 2000 | 降到 1500 提速 | 赶工期上线,寻路精度可让步 |
--tile X,Y加地图 ID | 全部区块 | 只重建单个区块 | 局部寻路异常,分钟级修完 |
--threads缺省已经是硬件并发值,堆得过高收益有限。真要压 mmaps 耗时,优先砍区块范围,其次才是降分辨率。
extractor.sh 高频报错速查
| 报错现象 | 根因 | 操作 |
|---|---|---|
| "required files and folder is missing" | 工具与 Data/ 不同目录 | 四工具放进 WoW 目录 |
| map_extractor 反复找 MPQ | Data/ 不全或版本不对 | 核对 3.3.5a Build 12340 |
| "'maps' directory is empty or does not exist" | 没跑选项 1 就跑 mmaps | 回选项 1 补跑 |
| "'vmaps' directory is empty or does not exist" | vmap 未汇编完成 | 回选项 2 补跑 |
| 某地图 mmaps 长时间卡死 | 几何复杂,线程吃满 | 加 --threads 重跑 |
落地部署与 DataDir 验证生效
把maps/、vmaps/、mmaps/三个目录拷到 worldserver 工作目录下(和 worldserver 可执行文件同级最省事)。
再改worldserver.conf(模板在src/server/apps/worldserver/worldserver.conf.dist):
DataDir = ".".表示 worldserver 所在目录。三目录放别处就改成对应路径,记得加引号。
验证闭环两步走:
- 启动 worldserver,看日志的 maps 通道。若出现 "Please place VMAP files (*.vmtree and *.vmtile)" 说明 DataDir 指错了,改完重启
- 进游戏让 NPC 穿过有建筑的地块。它会绕障碍而不穿墙,mmaps 才算真正生效
三套数据各司其职,凑齐才是 WoTLK 私服地图文件完整体。数据就绪后,下一步是导入数据库并配置 realm。
【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考