新地图的制做方法,还有些ACI的东西
半年多了还没有人找出加新地图的方法,我说说我以前用的方法,不过我当时自己写的程序和ACI代码被我当年一气之下全删了,所以也没有什么现成的可以用的东西,只是凭记忆写写大概的过程
先把传奇三的地图提取出来,传奇三MAP文件的格式应该很多人都知道,前几个DW是字图长和宽,后面全是一个单元一个单元的数据,每单元数据里第几位不记的了是个能不能行走的标记。全提取出来,形成一个 ACI里叫BUFFER
大概是这么个意思
int x_len=**;
int y_len=**;
byte map_data=new byte[x_len * y_len+8]; //加8还是+4我记不太清了。DW加8 WORD 加4。自己找个解开看看就行了
map_data 前面的两个DW还是W我记不太清了。多试试吧,好象是DW
还有一个重要的区别 ACI的地图文件里的 高低位有些是反着的。可能是ACI天生带来的,把一个DW填为10时,有时要写 10 00 00 00 有时要写成 00 00 00 10 ,这个自己多试试吧,相信很多人已经做到这一步了。 最关键的一步就是把这个 BUFFER 用ACI自己的压缩方式压缩一下,再写到文件里,这样的一个一个文件就是组成 mir3_map.fs 的部件。不是有人已经把这个文件给分解开来了么,看看分解后的一个个文件,那就是经过压缩过的。 ACI里压缩和解压缩的函数是 compress() 和 decompress 函数原型我记不太清了,好象是 buffer compress(buffer) 自己多试试吧。
还有更简单的方式 load_map(string mir3_map_file) 可以直接把传奇三地图文件提取到ACI里,用这个函数可以让百宝箱直接使用传奇三的地图文件,我没试过,刚写的时候突然想到这个问题,有兴趣的可以试一下
对应的函数 save_map() 这个函数把已经load_map()的地图数据写到硬盘里,是压缩过的还是没有压缩过的我记不太清了
呵呵,说到这里,还有最后的一步,读写文件。这个我不知道有没有人能实现 read_file() 读二进制 read_file_ex() 读文本文件和 write_file() . 函数原型参考ANSI C。实在不行自己猜也就猜出来的,当时我也是猜出来的。
要想读写文件,必须要有255的权限,用正常的ACI是不行的。要用到另一个函数,可以越过 权限直接运行最高权限的脚本,run_script_from_server( (buffer) string) 好象是这样的,时间太久我也记不太清了
这样一路下来,应该没有什么问题了吧。至于加密的那些ZD文件,只不过是有一个文件头,用二UE 打开一看就知道了。有特殊文件头的。读入后面的数据然后 decompress() 就得到文本文件了。没有特殊文件头的,就当做明文处理。
如果是自己研究摸索出来的,拿去赚钱无可厚非,如果是看了上面我写的东西才搞出来的,那就不要拿去卖钱了,做好了拿出来共享一下吧。实在觉的亏,那就少少收一点吧。
就是这样子了,没啥好说的了,上面都说的很清楚了,有不明白的地方自己再研究吧,就不要再来问我了。