魔兽世界私服trinitycore2的架构(3)地图数据

地图数据在MMO中占据重要的位置,不但数据量大,还具有基础性地位。在魔兽世界中,地图数据分布于几个mpq文件中,一般说来,他存在于mpq内 部目录/world/maps/下,而maps也会被划分成多个目录,比如东部王国和卡里姆多。每个地图中,都会有一个wdt和多个adt文件构成,实际 上,还有一个wdl文件,只是tc2中没有提到,估计是文件列表。

每个wdt文件被划分成64×64个格子(GRID),每个格子被划分成16×16个单元(CELL),每个CELL的长度为8个点。总共算来应该2^26个点。每个点都有2个高度,一个估计是CELL本身的高度,另外一个是自定义的高度,点的实际高度是这2个高度的和。

每个CELL除了这种空间数据外,还有一个是液体的数据,液体的类型包括水、海洋、岩浆、稀泥,由此看来,液体实际上种特殊的地图数据。在adt文 件还包括矢量点、蒙皮等数据,当在服务端提取出来的时候,似乎都被忽略掉,这是正常的,TrinityCore2在运行之前必须从客户端的mpq文件中, 提取出地图数据,这些地图数据是被简化过的,然后保存在*.map文件中。

我在【投影世界 】【动态分区 】 中,也同样表达了这种观点。首先,将整个地图将整个切割成多个分区,我的观点和暴雪有所不同的是,我建议以蜂巢模式进行切割,而暴雪是以矩形进行切割。虽 然理论上,我的观点比较先进,但是实现上,我也倾向于矩形,毕竟矩形是最简单的地图切割方案。不过,我还是希望能找到一种高效的方式,能够对地图进行蜂巢 切割。在服务器端,提取出地形数据,而摒弃那些外观数据,这也是我在投影世界中所表达的那样。

当我越来越深入研究tc2,发现很多思想跟我在《单一世界架构》表述的,惊人吻合。实际上我在研究tc2的代码时,在地图方面遇到很多麻烦的事情,最后我从tc2提供的地图提取工具中,找到了线索,在system.cpp的ConvertADT函数中,了解到*.map中的数据情况。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值