魔兽世界私服trinitycore2的架构(3)地图数据
来源:互联网 发布:个人域名转让给企业 编辑:程序博客网 时间:2024/04/29 08:19
地图数据在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中的数据情况。
- 魔兽世界私服trinitycore2的架构(3)地图数据
- 魔兽世界私服trinitycore2的架构(1)
- 魔兽世界私服trinitycore2的架构(2)
- 魔兽世界私服trinitycore2的架构(4)工作线程
- 魔兽世界私服trinitycore2的架构(5)世界对象
- 魔兽世界私服trinitycore2的架构(6)国际化
- 魔兽世界私服trinitycore2的架构(7)国际化方案
- 魔兽世界私服trinitycore2的架构(8)脚本
- 魔兽世界私服trinitycore2的架构(9)人工智能
- 魔兽世界私服trinitycore2的数据库TDB(3)
- 魔兽世界私服trinitycore2的架构——世界对象
- 魔兽世界私服trinitycore2的数据库TDB(1)
- 魔兽世界私服trinitycore2的数据库TDB(2)
- 魔兽世界地图 - 隐藏的成功之路
- 魔兽世界私服架设
- 魔兽世界安装地图
- 魔兽世界客户端数据研究(一)
- 魔兽世界客户端数据研究(二)
- swing中jtable的使用
- 10月21日 工作日志
- Hibernate Util 类
- Cellular Emulator接打电话,收发短信设置
- 利用winrar3.70制作软件安装包
- 魔兽世界私服trinitycore2的架构(3)地图数据
- Oracle字符集问题总结
- 指针数组与二级指针比较
- SQLSERVER 分页存储过程(2 在SQL2005下使用)
- 逝
- 我的未来不是梦
- 程序员职业规划:让自己变得重要
- 有关实习
- ORACLE修改表空间方法